)
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from datetime import date, timedelta
+from odoo import api, fields, models, _
+import base64
+import io
+import json
+import xlsxwriter
+from odoo.exceptions import ValidationError, UserError
+from odoo.tools.json import json_default
+
+class ResPartner(models.Model):
+ """Inheriting res.partner"""
+ _inherit = "res.partner"
+
+ invoice_list = fields.One2many('account.move', 'partner_id',
+ string="Invoice Details",
+ readonly=True,
+ domain=(
+ [('payment_state', '=', 'not_paid'),
+ ('move_type', '=', 'out_invoice')]))
+ total_due = fields.Monetary(compute='_compute_for_followup', store=False,
+ readonly=True)
+ next_reminder_date = fields.Date(compute='_compute_for_followup',
+ store=False, readonly=True)
+ total_overdue = fields.Monetary(compute='_compute_for_followup',
+ store=False, readonly=True)
+ followup_status = fields.Selection(
+ [('in_need_of_action', 'In need of action'),
+ ('with_overdue_invoices', 'With overdue invoices'),
+ ('no_action_needed', 'No action needed')],
+ string='Followup status',
+ )
+
+ warning_stage = fields.Float(string='Warning Amount',
+ help="A warning message will appear once the "
+ "selected customer is crossed warning "
+ "amount. Set its value to 0.00 to"
+ " disable this feature")
+ blocking_stage = fields.Float(string='Blocking Amount',
+ help="Cannot make sales once the selected "
+ "customer is crossed blocking amount."
+ "Set its value to 0.00 to disable "
+ "this feature")
+ due_amount = fields.Float(string="Total Sale",
+ compute="compute_due_amount")
+ active_limit = fields.Boolean("Active Credit Limit", default=False)
+
+ enable_credit_limit = fields.Boolean(string="Credit Limit Enabled",
+ compute="_compute_enable_credit_limit")
+
+ # customer statement
+
+ customer_report_ids = fields.Many2many(
+ 'account.move',
+ compute='_compute_customer_report_ids',
+ help='Partner Invoices related to Customer')
+ vendor_statement_ids = fields.Many2many(
+ 'account.move',
+ compute='_compute_vendor_statement_ids',
+ help='Partner Bills related to Vendor')
+ currency_id = fields.Many2one(
+ 'res.currency',
+ default=lambda self: self.env.company.currency_id.id,
+ help="currency related to Customer or Vendor")
+
+
+ def _compute_for_followup(self):
+ """
+ Compute the fields 'total_due', 'total_overdue' , 'next_reminder_date' and 'followup_status'
+ """
+ for record in self:
+ total_due = 0
+ total_overdue = 0
+ today = fields.Date.today()
+ for am in record.invoice_list:
+ if am.company_id == self.env.company:
+ amount = am.amount_residual
+ total_due += amount
+
+ is_overdue = today > am.invoice_date_due if am.invoice_date_due else today > am.date
+ if is_overdue:
+ total_overdue += amount or 0
+ min_date = record.get_min_date()
+ action = record.action_after()
+ if min_date:
+ date_reminder = min_date + timedelta(days=action)
+ if date_reminder:
+ record.next_reminder_date = date_reminder
+ else:
+ date_reminder = today
+ record.next_reminder_date = date_reminder
+ if total_overdue > 0 and date_reminder > today:
+ followup_status = "with_overdue_invoices"
+ elif total_due > 0 and date_reminder <= today:
+ followup_status = "in_need_of_action"
+ else:
+ followup_status = "no_action_needed"
+ record.total_due = total_due
+ record.total_overdue = total_overdue
+ record.followup_status = followup_status
+
+ def get_min_date(self):
+ """Get the minimum invoice due date from the partner's invoice list."""
+ today = date.today()
+ for this in self:
+ if this.invoice_list:
+ min_list = this.invoice_list.mapped('invoice_date_due')
+ while False in min_list:
+ min_list.remove(False)
+ return min(min_list)
+ else:
+ return today
+
+ def get_delay(self):
+ """Retrieve the delay information for follow-up lines associated with the company."""
+ delay = """SELECT fl.id, fl.delay
+ FROM followup_line fl
+ JOIN account_followup af ON fl.followup_id = af.id
+ WHERE af.company_id = %s
+ ORDER BY fl.delay;
+
+ """
+ self._cr.execute(delay, [self.env.company.id])
+ record = self._cr.dictfetchall()
+
+ return record
+
+ def action_after(self):
+ """Retrieve the delay information for follow-up lines associated with the company and return the delay value if found."""
+ lines = self.env['followup.line'].search([(
+ 'followup_id.company_id', '=', self.env.company.id)])
+ if lines:
+ record = self.get_delay()
+ for i in record:
+ return i['delay']
+
+ def compute_due_amount(self):
+ """Compute function to compute the due amount with the
+ credit and debit amount"""
+ for rec in self:
+ if not rec.id:
+ continue
+ rec.due_amount = rec.credit - rec.debit
+
+ def _compute_enable_credit_limit(self):
+ """ Check credit limit is enabled in account settings """
+ params = self.env['ir.config_parameter'].sudo()
+ customer_credit_limit = params.get_param('customer_credit_limit',
+ default=False)
+ for rec in self:
+ rec.enable_credit_limit = True if customer_credit_limit else False
+
+ @api.constrains('warning_stage', 'blocking_stage')
+ def constrains_warning_stage(self):
+ """Constrains functionality used to indicate or raise an
+ UserError"""
+ if self.active_limit and self.enable_credit_limit:
+ if self.warning_stage >= self.blocking_stage:
+ if self.blocking_stage > 0:
+ raise UserError(_(
+ "Warning amount should be less than Blocking amount"))
+
+ # customer statement
+ def _compute_customer_report_ids(self):
+ """ For computing 'invoices' of partner """
+ for rec in self:
+ inv_ids = self.env['account.move'].search(
+ [('partner_id', '=', rec.id),
+ ('move_type', '=', 'out_invoice'),
+ ('payment_state', '!=', 'paid'),
+ ('state', '=', 'posted')])
+ rec.customer_report_ids = inv_ids
+
+ def _compute_vendor_statement_ids(self):
+ """ For computing 'bills' of partner """
+ for rec in self:
+ bills = self.env['account.move'].search(
+ [('partner_id', '=', rec.id),
+ ('move_type', '=', 'in_invoice'),
+ ('payment_state', '!=', 'paid'),
+ ('state', '=', 'posted')])
+ rec.vendor_statement_ids = bills
+
+ def main_query(self):
+ """ Return select query """
+ query = """SELECT name , invoice_date, invoice_date_due,
+ amount_total_signed AS sub_total,
+ amount_residual_signed AS amount_due ,
+ amount_residual AS balance
+ FROM account_move WHERE payment_state != 'paid'
+ AND state ='posted' AND partner_id= '%s'
+ AND company_id = '%s' """ % (self.id, self.env.company.id)
+ return query
+
+ def amount_query(self):
+ """ Return query for calculating total amount """
+ amount_query = """ SELECT SUM(amount_total_signed) AS total,
+ SUM(amount_residual) AS balance
+ FROM account_move WHERE payment_state != 'paid'
+ AND state ='posted' AND partner_id= '%s'
+ AND company_id = '%s' """ % (self.id, self.env.company.id)
+ return amount_query
+
+ def action_share_pdf(self):
+ """ Action for sharing customer pdf report """
+ if self.customer_report_ids:
+ main_query = self.main_query()
+ main_query += """ AND move_type IN ('out_invoice')"""
+ amount = self.amount_query()
+ amount += """ AND move_type IN ('out_invoice')"""
+ self.env.cr.execute(main_query)
+ main = self.env.cr.dictfetchall()
+ self.env.cr.execute(amount)
+ amount = self.env.cr.dictfetchall()
+ data = {
+ 'customer': self.display_name,
+ 'street': self.street,
+ 'street2': self.street2,
+ 'city': self.city,
+ 'state': self.state_id.name,
+ 'zip': self.zip,
+ 'my_data': main,
+ 'total': amount[0]['total'],
+ 'balance': amount[0]['balance'],
+ 'currency': self.currency_id.symbol,
+ }
+ report = self.env['ir.actions.report'].sudo()._render_qweb_pdf(
+ 'base_accounting_kit.res_partner_action', self, data=data)
+ data_record = base64.b64encode(report[0])
+ ir_values = {
+ 'name': 'Statement Report',
+ 'type': 'binary',
+ 'datas': data_record,
+ 'mimetype': 'application/pdf',
+ 'res_model': 'res.partner'
+ }
+ attachment = self.env['ir.attachment'].sudo().create(ir_values)
+ email_values = {
+ 'email_to': self.email,
+ 'subject': 'Payment Statement Report',
+ 'body_html': 'Dear Mr/Miss. ' + self.name +
+ '
We have attached your '
+ 'payment statement. Please check
'
+ 'Best regards,
' + self.env.user.name,
+ 'attachment_ids': [attachment.id],
+ }
+ mail = self.env['mail.mail'].sudo().create(email_values)
+ mail.send()
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'display_notification',
+ 'params': {
+ 'message': 'Email Sent Successfully',
+ 'type': 'success',
+ 'sticky': False
+ }
+ }
+ else:
+ raise ValidationError('There is no statement to send')
+
+ def action_print_pdf(self):
+ """ Action for printing pdf report """
+ if self.customer_report_ids:
+ main_query = self.main_query()
+ main_query += """ AND move_type IN ('out_invoice')"""
+ amount = self.amount_query()
+ amount += """ AND move_type IN ('out_invoice')"""
+ self.env.cr.execute(main_query)
+ main = self.env.cr.dictfetchall()
+ self.env.cr.execute(amount)
+ amount = self.env.cr.dictfetchall()
+ data = {
+ 'customer': self.display_name,
+ 'street': self.street,
+ 'street2': self.street2,
+ 'city': self.city,
+ 'state': self.state_id.name,
+ 'zip': self.zip,
+ 'my_data': main,
+ 'total': amount[0]['total'],
+ 'balance': amount[0]['balance'],
+ 'currency': self.currency_id.symbol,
+ }
+ return self.env.ref('base_accounting_kit.res_partner_action'
+ ).report_action(self, data=data)
+ else:
+ raise ValidationError('There is no statement to print')
+
+ def action_print_xlsx(self):
+ """ Action for printing xlsx report of customers """
+ if self.customer_report_ids:
+ main_query = self.main_query()
+ main_query += """ AND move_type IN ('out_invoice')"""
+ amount = self.amount_query()
+ amount += """ AND move_type IN ('out_invoice')"""
+ self.env.cr.execute(main_query)
+ main = self.env.cr.dictfetchall()
+ self.env.cr.execute(amount)
+ amount = self.env.cr.dictfetchall()
+ data = {
+ 'customer': self.display_name,
+ 'street': self.street,
+ 'street2': self.street2,
+ 'city': self.city,
+ 'state': self.state_id.name,
+ 'zip': self.zip,
+ 'my_data': main,
+ 'total': amount[0]['total'],
+ 'balance': amount[0]['balance'],
+ 'currency': self.currency_id.symbol,
+ }
+ return {
+ 'type': 'ir.actions.report',
+ 'data': {
+ 'model': 'res.partner',
+ 'options': json.dumps(data,
+ default=json_default),
+ 'output_format': 'xlsx',
+ 'report_name': 'Payment Statement Report'
+ },
+ 'report_type': 'xlsx',
+ }
+ else:
+ raise ValidationError('There is no statement to print')
+
+ def get_xlsx_report(self, data, response):
+ """ Get xlsx report data """
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ sheet = workbook.add_worksheet()
+ cell_format_with_color = workbook.add_format({
+ 'font_size': '14px', 'bold': True,
+ 'bg_color': 'yellow', 'border': 1})
+ cell_format = workbook.add_format({'font_size': '14px', 'bold': True})
+ txt = workbook.add_format({'font_size': '13px'})
+ txt_border = workbook.add_format({'font_size': '13px', 'border': 1})
+ head = workbook.add_format({'align': 'center', 'bold': True,
+ 'font_size': '22px'})
+ sheet.merge_range('B2:Q4', 'Payment Statement Report', head)
+ if data['customer']:
+ sheet.merge_range('B7:D7', 'Customer/Supplier : ', cell_format)
+ sheet.merge_range('E7:H7', data['customer'], txt)
+ sheet.merge_range('B9:C9', 'Address : ', cell_format)
+ if data['street']:
+ sheet.merge_range('D9:F9', data['street'], txt)
+ if data['street2']:
+ sheet.merge_range('D10:F10', data['street2'], txt)
+ if data['city']:
+ sheet.merge_range('D11:F11', data['city'], txt)
+ if data['state']:
+ sheet.merge_range('D12:F12', data['state'], )
+ if data['zip']:
+ sheet.merge_range('D13:F13', data['zip'], txt)
+ sheet.merge_range('B15:C15', 'Date', cell_format_with_color)
+ sheet.merge_range('D15:G15', 'Invoice/Bill Number',
+ cell_format_with_color)
+ sheet.merge_range('H15:I15', 'Due Date', cell_format_with_color)
+ sheet.merge_range('J15:L15', 'Invoices/Debit', cell_format_with_color)
+ sheet.merge_range('M15:O15', 'Amount Due', cell_format_with_color)
+ sheet.merge_range('P15:R15', 'Balance Due', cell_format_with_color)
+ row = 15
+ column = 0
+ for record in data['my_data']:
+ sub_total = data['currency'] + str(record['sub_total'])
+ amount_due = data['currency'] + str(record['amount_due'])
+ balance = data['currency'] + str(record['balance'])
+ total = data['currency'] + str(data['total'])
+ remain_balance = data['currency'] + str(data['balance'])
+ sheet.merge_range(row, column + 1, row, column + 2,
+ record['invoice_date'], txt_border)
+ sheet.merge_range(row, column + 3, row, column + 6,
+ record['name'], txt_border)
+ sheet.merge_range(row, column + 7, row, column + 8,
+ record['invoice_date_due'], txt_border)
+ sheet.merge_range(row, column + 9, row, column + 11,
+ sub_total, txt_border)
+ sheet.merge_range(row, column + 12, row, column + 14,
+ amount_due, txt_border)
+ sheet.merge_range(row, column + 15, row, column + 17,
+ balance, txt_border)
+ row = row + 1
+ sheet.write(row + 2, column + 1, 'Total Amount: ', cell_format)
+ sheet.merge_range(row + 2, column + 3, row + 2, column + 4,
+ total, txt)
+ sheet.write(row + 4, column + 1, 'Balance Due: ', cell_format)
+ sheet.merge_range(row + 4, column + 3, row + 4, column + 4,
+ remain_balance, txt)
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
+
+ def action_share_xlsx(self):
+ """ Action for sharing xlsx report via email """
+ if self.customer_report_ids:
+ main_query = self.main_query()
+ main_query += """ AND move_type IN ('out_invoice')"""
+ amount = self.amount_query()
+ amount += """ AND move_type IN ('out_invoice')"""
+ self.env.cr.execute(main_query)
+ main = self.env.cr.dictfetchall()
+ self.env.cr.execute(amount)
+ amount = self.env.cr.dictfetchall()
+ data = {
+ 'customer': self.display_name,
+ 'street': self.street,
+ 'street2': self.street2,
+ 'city': self.city,
+ 'state': self.state_id.name,
+ 'zip': self.zip,
+ 'my_data': main,
+ 'total': amount[0]['total'],
+ 'balance': amount[0]['balance'],
+ 'currency': self.currency_id.symbol,
+ }
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ sheet = workbook.add_worksheet()
+ cell_format = workbook.add_format({
+ 'font_size': '14px', 'bold': True})
+ txt = workbook.add_format({'font_size': '13px'})
+ head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '22px'})
+ sheet.merge_range('B2:P4', 'Payment Statement Report', head)
+ date_style = workbook.add_format(
+ {'text_wrap': True, 'align': 'center',
+ 'num_format': 'yyyy-mm-dd'})
+ if data['customer']:
+ sheet.write('B7:C7', 'Customer : ', cell_format)
+ sheet.merge_range('D7:G7', data['customer'], txt)
+ sheet.write('B9:C7', 'Address : ', cell_format)
+ if data['street']:
+ sheet.merge_range('D9:F9', data['street'], txt)
+ if data['street2']:
+ sheet.merge_range('D10:F10', data['street2'], txt)
+ if data['city']:
+ sheet.merge_range('D11:F11', data['city'], txt)
+ if data['state']:
+ sheet.merge_range('D12:F12', data['state'], txt)
+ if data['zip']:
+ sheet.merge_range('D13:F13', data['zip'], txt)
+ sheet.write('B15', 'Date', cell_format)
+ sheet.write('D15', 'Invoice/Bill Number', cell_format)
+ sheet.write('H15', 'Due Date', cell_format)
+ sheet.write('J15', 'Invoices/Debit', cell_format)
+ sheet.write('M15', 'Amount Due', cell_format)
+ sheet.write('P15', 'Balance Due', cell_format)
+ row = 16
+ column = 0
+ for record in data['my_data']:
+ sub_total = data['currency'] + str(record['sub_total'])
+ amount_due = data['currency'] + str(record['amount_due'])
+ balance = data['currency'] + str(record['balance'])
+ total = data['currency'] + str(data['total'])
+ remain_balance = data['currency'] + str(data['balance'])
+ sheet.merge_range(row, column + 1, row, column + 2,
+ record['invoice_date'], date_style)
+ sheet.merge_range(row, column + 3, row, column + 5,
+ record['name'], txt)
+ sheet.merge_range(row, column + 7, row, column + 8,
+ record['invoice_date_due'], date_style)
+ sheet.merge_range(row, column + 9, row, column + 10,
+ sub_total, txt)
+ sheet.merge_range(row, column + 12, row, column + 13,
+ amount_due, txt)
+ sheet.merge_range(row, column + 15, row, column + 16,
+ balance, txt)
+ row = row + 1
+ sheet.write(row + 2, column + 1, 'Total Amount : ', cell_format)
+ sheet.merge_range(row + 2, column + 4, row + 2, column + 5,
+ total, txt)
+ sheet.write(row + 4, column + 1, 'Balance Due : ', cell_format)
+ sheet.merge_range(row + 4, column + 4, row + 4, column + 5,
+ remain_balance, txt)
+ workbook.close()
+ output.seek(0)
+ xlsx = base64.b64encode(output.read())
+ output.close()
+ ir_values = {
+ 'name': "Statement Report.xlsx",
+ 'type': 'binary',
+ 'datas': xlsx,
+ 'store_fname': xlsx,
+ }
+ attachment = self.env['ir.attachment'].sudo().create(ir_values)
+ email_values = {
+ 'email_to': self.email,
+ 'subject': 'Payment Statement Report',
+ 'body_html': '
Dear Mr/Miss. ' + self.name +
+ '
We have attached your'
+ ' payment statement. Please check
'
+ 'Best regards,
' + self.env.user.name,
+ 'attachment_ids': [attachment.id],
+ }
+ mail = self.env['mail.mail'].sudo().create(email_values)
+ mail.send()
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'display_notification',
+ 'params': {
+ 'message': 'Email Sent Successfully',
+ 'type': 'success',
+ 'sticky': False
+ }
+ }
+ else:
+ raise ValidationError('There is no statement to send')
diff --git a/third_party_addons/base_accounting_kit/models/sale_order.py b/third_party_addons/base_accounting_kit/models/sale_order.py
new file mode 100644
index 000000000..6634180c1
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/models/sale_order.py
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, fields, models
+from odoo.exceptions import UserError
+from odoo.tools.translate import _
+
+
+class SaleOrder(models.Model):
+ """The Class inherits the sale.order model for adding the new
+ fields and functions"""
+ _inherit = 'sale.order'
+
+ has_due = fields.Boolean(string='Has due')
+ is_warning = fields.Boolean(string='Is warning')
+ due_amount = fields.Float(string='Due Amount',
+ related='partner_id.due_amount')
+
+ def _action_confirm(self):
+ """To check the selected customers due amount is exceed than
+ blocking stage"""
+ if self.partner_id.active_limit \
+ and self.partner_id.enable_credit_limit:
+ if self.due_amount >= self.partner_id.blocking_stage:
+ if self.partner_id.blocking_stage != 0:
+ raise UserError(_(
+ "%s is in Blocking Stage and "
+ "has a due amount of %s %s to pay") % (
+ self.partner_id.name, self.due_amount,
+ self.currency_id.symbol))
+ return super(SaleOrder, self)._action_confirm()
+
+ @api.onchange('partner_id')
+ def check_due(self):
+ """To show the due amount and warning stage"""
+ if self.partner_id and self.partner_id.due_amount > 0 \
+ and self.partner_id.active_limit \
+ and self.partner_id.enable_credit_limit:
+ self.has_due = True
+ else:
+ self.has_due = False
+ if self.partner_id and self.partner_id.active_limit\
+ and self.partner_id.enable_credit_limit:
+ if self.due_amount >= self.partner_id.warning_stage:
+ if self.partner_id.warning_stage != 0:
+ self.is_warning = True
+ else:
+ self.is_warning = False
diff --git a/third_party_addons/base_accounting_kit/report/__init__.py b/third_party_addons/base_accounting_kit/report/__init__.py
new file mode 100644
index 000000000..6ca86482a
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/__init__.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import account_asset_report
+from . import account_bank_book
+from . import account_cash_book
+from . import account_day_book
+from . import account_report_common_account
+from . import cash_flow_report
+from . import general_ledger_report
+from . import multiple_invoice_report
+from . import report_aged_partner
+from . import report_financial
+from . import report_journal_audit
+from . import report_partner_ledger
+from . import report_tax
+from . import report_trial_balance
diff --git a/third_party_addons/base_accounting_kit/report/account_asset_report.py b/third_party_addons/base_accounting_kit/report/account_asset_report.py
new file mode 100644
index 000000000..9a898e07c
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/account_asset_report.py
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models, tools
+
+
+class AssetAssetReport(models.Model):
+ _name = "asset.asset.report"
+ _description = "Assets Analysis"
+ _auto = False
+
+ name = fields.Char(string='Year', required=False, readonly=True)
+ date = fields.Date(readonly=True)
+ depreciation_date = fields.Date(string='Depreciation Date', readonly=True)
+ asset_id = fields.Many2one('account.asset.asset', string='Asset', readonly=True)
+ asset_category_id = fields.Many2one('account.asset.category', string='Asset category', readonly=True)
+ partner_id = fields.Many2one('res.partner', string='Partner', readonly=True)
+ state = fields.Selection([('draft', 'Draft'), ('open', 'Running'), ('close', 'Close')], string='Status', readonly=True)
+ depreciation_value = fields.Float(string='Amount of Depreciation Lines', readonly=True)
+ installment_value = fields.Float(string='Amount of Installment Lines', readonly=True)
+ move_check = fields.Boolean(string='Posted', readonly=True)
+ installment_nbr = fields.Integer(string='# of Installment Lines', readonly=True)
+ depreciation_nbr = fields.Integer(string='# of Depreciation Lines', readonly=True)
+ gross_value = fields.Float(string='Gross Amount', readonly=True)
+ posted_value = fields.Float(string='Posted Amount', readonly=True)
+ unposted_value = fields.Float(string='Unposted Amount', readonly=True)
+ company_id = fields.Many2one('res.company', string='Company', readonly=True)
+
+ def init(self):
+ tools.drop_view_if_exists(self._cr, 'asset_asset_report')
+ self._cr.execute("""
+ create or replace view asset_asset_report as (
+ select
+ min(dl.id) as id,
+ dl.name as name,
+ dl.depreciation_date as depreciation_date,
+ a.date as date,
+ (CASE WHEN dlmin.id = min(dl.id)
+ THEN a.value
+ ELSE 0
+ END) as gross_value,
+ dl.amount as depreciation_value,
+ dl.amount as installment_value,
+ (CASE WHEN dl.move_check
+ THEN dl.amount
+ ELSE 0
+ END) as posted_value,
+ (CASE WHEN NOT dl.move_check
+ THEN dl.amount
+ ELSE 0
+ END) as unposted_value,
+ dl.asset_id as asset_id,
+ dl.move_check as move_check,
+ a.category_id as asset_category_id,
+ a.partner_id as partner_id,
+ a.state as state,
+ count(dl.*) as installment_nbr,
+ count(dl.*) as depreciation_nbr,
+ a.company_id as company_id
+ from account_asset_depreciation_line dl
+ left join account_asset_asset a on (dl.asset_id=a.id)
+ left join (select min(d.id) as id,ac.id as ac_id from
+ account_asset_depreciation_line as d inner join
+ account_asset_asset as ac ON (ac.id=d.asset_id) group by
+ ac_id) as dlmin on dlmin.ac_id=a.id
+ where a.active is true
+ group by
+ dl.amount,dl.asset_id,dl.depreciation_date,dl.name,
+ a.date, dl.move_check, a.state, a.category_id,
+ a.partner_id, a.company_id,
+ a.value, a.id, a.salvage_value, dlmin.id
+ )""")
diff --git a/third_party_addons/base_accounting_kit/report/account_asset_report_views.xml b/third_party_addons/base_accounting_kit/report/account_asset_report_views.xml
new file mode 100644
index 000000000..504cc2624
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/account_asset_report_views.xml
@@ -0,0 +1,78 @@
+
+
+
+
+ asset.asset.report.view.pivot
+ asset.asset.report
+
+
+
+
+
+
+
+
+
+
+ asset.asset.report.view.graph
+ asset.asset.report
+
+
+
+
+
+
+
+
+
+
+ asset.asset.report.view.search
+ asset.asset.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Assets Analysis
+ asset.asset.report
+ graph,pivot
+
+ [('asset_category_id.type', '=', 'purchase')]
+ {'search_default_only_active': 1}
+
+
+ From this report, you can have an overview on all depreciation's. The
+ search bar can also be used to personalize your assets depreciation reporting.
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/account_bank_book.py b/third_party_addons/base_accounting_kit/report/account_bank_book.py
new file mode 100644
index 000000000..7fb8a76c1
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/account_bank_book.py
@@ -0,0 +1,175 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from datetime import time
+from odoo import api, models, _
+from odoo.exceptions import UserError
+
+
+class ReportBankBook(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_bank_book'
+ _description = 'Bank Book Report'
+
+ def _get_account_move_entry(self, accounts, init_balance, sortby,
+ display_account):
+ cr = self.env.cr
+ move_line = self.env['account.move.line']
+ move_lines = {x: [] for x in accounts.ids}
+
+ # Prepare initial sql query and Get the initial move lines
+ if init_balance:
+ init_tables, init_where_clause, init_where_params = move_line.with_context(
+ date_from=self.env.context.get('date_from'), date_to=False,
+ initial_bal=True)._query_get()
+ init_wheres = [""]
+ if init_where_clause.strip():
+ init_wheres.append(init_where_clause.strip())
+ init_filters = " AND ".join(init_wheres)
+ filters = init_filters.replace('account_move_line__move_id',
+ 'm').replace('account_move_line',
+ 'l')
+ sql = ("""SELECT 0 AS lid, l.account_id AS account_id, \
+ '' AS ldate, '' AS lcode, 0.0 AS amount_currency, \
+ '' AS lref, 'Initial Balance' AS lname, \
+ COALESCE(SUM(l.debit),0.0) AS debit, \
+ COALESCE(SUM(l.credit),0.0) AS credit, \
+ COALESCE(SUM(l.debit),0) - COALESCE(SUM(l.credit), 0) as balance, \
+ '' AS lpartner_id,\
+ '' AS move_name, '' AS mmove_id, '' AS currency_code,\
+ NULL AS currency_id,\
+ '' AS invoice_id, '' AS invoice_type, '' AS invoice_number,\
+ '' AS partner_name\
+ FROM account_move_line l\
+ LEFT JOIN account_move m ON (l.move_id=m.id)\
+ LEFT JOIN res_currency c ON (l.currency_id=c.id)\
+ LEFT JOIN res_partner p ON (l.partner_id=p.id)\
+ JOIN account_journal j ON (l.journal_id=j.id)\
+ WHERE l.account_id IN %s""" + filters + ' GROUP BY l.account_id')
+ params = (tuple(accounts.ids),) + tuple(init_where_params)
+ cr.execute(sql, params)
+ for row in cr.dictfetchall():
+ move_lines[row.pop('account_id')].append(row)
+ sql_sort = 'l.date, l.move_id'
+ if sortby == 'sort_journal_partner':
+ sql_sort = 'j.code, p.name, l.move_id'
+
+ # Prepare sql query base on selected parameters from wizard
+ tables, where_clause, where_params = move_line._query_get()
+ wheres = [""]
+ if where_clause.strip():
+ wheres.append(where_clause.strip())
+ filters = " AND ".join(wheres)
+ filters = filters.replace('account_move_line__move_id', 'm').replace(
+ 'account_move_line', 'l')
+
+ # Get move lines base on sql query and Calculate the total
+ # balance of move lines
+ sql = ('''SELECT l.id AS lid, l.account_id \
+ AS account_id, l.date AS ldate, j.code AS lcode,\
+ l.currency_id, l.amount_currency, l.ref AS lref, l.name AS lname,\
+ COALESCE(l.debit,0) AS debit, \
+ COALESCE(l.credit,0) AS credit, \
+ COALESCE(SUM(l.debit),0) - COALESCE(SUM(l.credit), 0) AS balance,\
+ m.name AS move_name, c.symbol AS \
+ currency_code, p.name AS partner_name\
+ FROM account_move_line l\
+ JOIN account_move m ON (l.move_id=m.id)\
+ LEFT JOIN res_currency c ON (l.currency_id=c.id)\
+ LEFT JOIN res_partner p ON (l.partner_id=p.id)\
+ JOIN account_journal j ON (l.journal_id=j.id)\
+ JOIN account_account acc ON (l.account_id = acc.id) \
+ WHERE l.account_id IN %s ''' + filters + ''' GROUP BY \
+ l.id, l.account_id, l.date, j.code, l.currency_id, \
+ l.amount_currency, l.ref, l.name, m.name, \
+ c.symbol, p.name ORDER BY ''' + sql_sort)
+ params = (tuple(accounts.ids),) + tuple(where_params)
+ cr.execute(sql, params)
+
+ for row in cr.dictfetchall():
+ balance = 0
+ for line in move_lines.get(row['account_id']):
+ balance += line['debit'] - line['credit']
+ row['balance'] += balance
+ move_lines[row.pop('account_id')].append(row)
+
+ # Calculate the debit, credit and balance for Accounts
+ account_res = []
+ for account in accounts:
+ account_company = self.env.company
+ currency = account.currency_id and \
+ account.currency_id or account_company.currency_id
+ res = dict((fn, 0.0) for fn in ['credit', 'debit', 'balance'])
+ res['code'] = account.code
+ res['name'] = account.name
+ res['move_lines'] = move_lines[account.id]
+ for line in res.get('move_lines'):
+ res['debit'] += line['debit']
+ res['credit'] += line['credit']
+ res['balance'] = line['balance']
+ if display_account == 'all':
+ account_res.append(res)
+ if display_account == 'movement' and res.get('move_lines'):
+ account_res.append(res)
+ if display_account == 'not_zero' and not currency.is_zero(
+ res['balance']):
+ account_res.append(res)
+ return account_res
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form') or not self.env.context.get('active_model'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+
+ model = self.env.context.get('active_model')
+ docs = self.env[model].browse(self.env.context.get('active_ids', []))
+ init_balance = data['form'].get('initial_balance', True)
+ sortby = data['form'].get('sortby', 'sort_date')
+ display_account = 'movement'
+ codes = []
+ if data['form'].get('journal_ids', False):
+ codes = [journal.code for journal in
+ self.env['account.journal'].search(
+ [('id', 'in', data['form']['journal_ids'])])]
+ account_ids = data['form']['account_ids']
+ accounts = self.env['account.account'].search(
+ [('id', 'in', account_ids)])
+ if not accounts:
+ journals = self.env['account.journal'].search([('type', '=', 'bank')])
+ accounts = []
+ for journal in journals:
+ accounts.append(journal.default_account_id.id)
+ accounts = self.env['account.account'].search([('id', 'in', accounts)])
+
+ accounts_res = self.with_context(data['form'].get('used_context', {}))._get_account_move_entry(
+ accounts,
+ init_balance,
+ sortby,
+ display_account)
+ return {
+ 'doc_ids': docids,
+ 'doc_model': model,
+ 'data': data['form'],
+ 'docs': docs,
+ 'time': time,
+ 'Accounts': accounts_res,
+ 'print_journal': codes,
+ }
diff --git a/third_party_addons/base_accounting_kit/report/account_bank_book_template.xml b/third_party_addons/base_accounting_kit/report/account_bank_book_template.xml
new file mode 100644
index 000000000..c3b45d80e
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/account_bank_book_template.xml
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
: Bank Book Report
+
+
+
+
+
Display Account
+
+ All accounts'
+ With movements
+ With balance not equal to zero
+
+
+
+
Target Moves:
+
All Entries
+
All Posted Entries
+
+
+
+
+
+
Sorted By:
+
Date
+
Journal and Partner
+
+
+
+ Date from :
+
+
+
+
+ Date to :
+
+
+
+
+
+
+
+
+ Date
+ JRNL
+ Partner
+ Ref
+ Move
+ Entry Label
+ Debit
+ Credit
+ Balance
+ Currency
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/account_cash_book.py b/third_party_addons/base_accounting_kit/report/account_cash_book.py
new file mode 100644
index 000000000..c8685722b
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/account_cash_book.py
@@ -0,0 +1,183 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from datetime import time
+from odoo import api, models, _
+from odoo.exceptions import UserError
+
+
+class ReportCashBook(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_cash_book'
+ _description = 'Cash Book Report'
+
+ def _get_account_move_entry(self, accounts, init_balance, sortby,
+ display_account):
+
+ cr = self.env.cr
+ move_line = self.env['account.move.line']
+ move_lines = {x: [] for x in accounts.ids}
+
+ # Prepare initial sql query and Get the initial move lines
+ if init_balance:
+ init_tables, init_where_clause, init_where_params = move_line.with_context(
+ date_from=self.env.context.get('date_from'), date_to=False,
+ initial_bal=True)._query_get()
+ init_wheres = [""]
+ if init_where_clause.strip():
+ init_wheres.append(init_where_clause.strip())
+ init_filters = " AND ".join(init_wheres)
+ filters = init_filters.replace('account_move_line__move_id',
+ 'm').replace('account_move_line',
+ 'l')
+ sql = ("""SELECT 0 AS lid, l.account_id AS account_id, '' AS ldate,
+ '' AS lcode, 0.0 AS amount_currency, '' AS lref, 'Initial Balance'
+ AS lname, COALESCE(SUM(l.debit),0.0) AS debit,
+ COALESCE(SUM(l.credit),0.0) AS credit, COALESCE(SUM(l.debit),0)
+ - COALESCE(SUM(l.credit), 0) as balance, '' AS lpartner_id,\
+ '' AS move_name, '' AS mmove_id, '' AS currency_code,\
+ NULL AS currency_id,\
+ '' AS invoice_id, '' AS invoice_type, '' AS invoice_number,\
+ '' AS partner_name\
+ FROM account_move_line l\
+ LEFT JOIN account_move m ON (l.move_id=m.id)\
+ LEFT JOIN res_currency c ON (l.currency_id=c.id)\
+ LEFT JOIN res_partner p ON (l.partner_id=p.id)\
+ JOIN account_journal j ON (l.journal_id=j.id)\
+ WHERE l.account_id IN %s""" + filters +
+ ' GROUP BY l.account_id')
+ params = (tuple(accounts.ids),) + tuple(init_where_params)
+ cr.execute(sql, params)
+ for row in cr.dictfetchall():
+ move_lines[row.pop('account_id')].append(row)
+ sql_sort = 'l.date, l.move_id'
+ if sortby == 'sort_journal_partner':
+ sql_sort = 'j.code, p.name, l.move_id'
+
+ # Prepare sql query base on selected parameters from wizard
+ tables, where_clause, where_params = move_line._query_get()
+ wheres = [""]
+ if where_clause.strip():
+ wheres.append(where_clause.strip())
+ filters = " AND ".join(wheres)
+ filters = filters.replace('account_move_line__move_id', 'm').replace(
+ 'account_move_line', 'l')
+ if not accounts:
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'cash')])
+ accounts = []
+ for journal in journals:
+ accounts.append(
+ journal.default_account_id.id)
+ accounts = self.env['account.account'].search(
+ [('id', 'in', accounts)])
+
+ # Get move lines base on sql query and Calculate the total balance of
+ # move lines
+ sql = ('''SELECT l.id AS lid, l.account_id AS account_id, l.date AS
+ ldate, j.code AS lcode, l.currency_id, l.amount_currency, l.ref AS lref, l.name AS lname, COALESCE(l.debit,0) AS debit, COALESCE(l.credit,0) AS credit, COALESCE(SUM(l.debit),0) - COALESCE(SUM(l.credit), 0) AS balance,\
+ m.name AS move_name, c.symbol AS currency_code, p.name AS
+ partner_name\
+ FROM account_move_line l\
+ JOIN account_move m ON (l.move_id=m.id)\
+ LEFT JOIN res_currency c ON (l.currency_id=c.id)\
+ LEFT JOIN res_partner p ON (l.partner_id=p.id)\
+ JOIN account_journal j ON (l.journal_id=j.id)\
+ JOIN account_account acc ON (l.account_id = acc.id) \
+ WHERE l.account_id IN %s ''' + filters + ''' GROUP BY l.id,
+ l.account_id, l.date, j.code, l.currency_id, l.amount_currency,
+ l.ref, l.name, m.name, c.symbol, p.name ORDER BY ''' + sql_sort)
+ params = (tuple(accounts.ids),) + tuple(where_params)
+ cr.execute(sql, params)
+
+ for row in cr.dictfetchall():
+ balance = 0
+ for line in move_lines.get(row['account_id']):
+ balance += line['debit'] - line['credit']
+ row['balance'] += balance
+ move_lines[row.pop('account_id')].append(row)
+
+ # Calculate the debit, credit and balance for Accounts
+ account_res = []
+ for account in accounts:
+ account_company = self.env.company
+ currency = account.currency_id and account.currency_id or account_company.currency_id
+ res = dict((fn, 0.0) for fn in ['credit', 'debit', 'balance'])
+ res['code'] = account.code
+ res['name'] = account.name
+ res['move_lines'] = move_lines[account.id]
+ for line in res.get('move_lines'):
+ res['debit'] += line['debit']
+ res['credit'] += line['credit']
+ res['balance'] = line['balance']
+ if display_account == 'all':
+ account_res.append(res)
+ if display_account == 'movement' and res.get('move_lines'):
+ account_res.append(res)
+ if display_account == 'not_zero' and not currency.is_zero(
+ res['balance']):
+ account_res.append(res)
+
+ return account_res
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form') or not self.env.context.get('active_model'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+
+ model = self.env.context.get('active_model')
+ docs = self.env[model].browse(
+ self.env.context.get('active_ids', []))
+ init_balance = data['form'].get('initial_balance', True)
+ sortby = data['form'].get('sortby', 'sort_date')
+ display_account = 'movement'
+ codes = []
+ if data['form'].get('journal_ids', False):
+ codes = [journal.code for journal in
+ self.env['account.journal'].search(
+ [('id', 'in', data['form']['journal_ids'])])]
+ account_ids = data['form']['account_ids']
+ accounts = self.env['account.account'].search(
+ [('id', 'in', account_ids)])
+ if not accounts:
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'cash')])
+ accounts = []
+ for journal in journals:
+ accounts.append(
+ journal.default_account_id.id)
+ accounts = self.env['account.account'].search(
+ [('id', 'in', accounts)])
+ accounts_res = self.with_context(
+ data['form'].get('used_context', {}))._get_account_move_entry(
+ accounts,
+ init_balance,
+ sortby,
+ display_account)
+ return {
+ 'doc_ids': docids,
+ 'doc_model': model,
+ 'data': data['form'],
+ 'docs': docs,
+ 'time': time,
+ 'Accounts': accounts_res,
+ 'print_journal': codes,
+ }
diff --git a/third_party_addons/base_accounting_kit/report/account_cash_book_template.xml b/third_party_addons/base_accounting_kit/report/account_cash_book_template.xml
new file mode 100644
index 000000000..47bd54d43
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/account_cash_book_template.xml
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
: Cash Book Report
+
+
+
+
+
Display Account
+
+
+ All accounts'
+
+
+ With movements
+
+
+ With balance not equal to zero
+
+
+
+
+
Target Moves:
+
All Entries
+
+
All Posted
+ Entries
+
+
+
+
+
+
+
Sorted By:
+
Date
+
+ Journal and Partner
+
+
+
+
+ Date from :
+
+
+
+
+ Date to :
+
+
+
+
+
+
+
+
+ Date
+ JRNL
+ Partner
+ Ref
+ Move
+ Entry Label
+ Debit
+ Credit
+ Balance
+
+ Currency
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/account_day_book.py b/third_party_addons/base_accounting_kit/report/account_day_book.py
new file mode 100644
index 000000000..d49c4722e
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/account_day_book.py
@@ -0,0 +1,130 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import time
+from datetime import timedelta, datetime
+from odoo import api, models, _
+from odoo.exceptions import UserError
+
+
+class DayBookPdfReport(models.AbstractModel):
+ _name = 'report.base_accounting_kit.day_book_report_template'
+ _description = 'Day Book Report'
+
+ def _get_account_move_entry(self, accounts, form_data, pass_date):
+ cr = self.env.cr
+ move_line = self.env['account.move.line']
+ tables, where_clause, where_params = move_line._query_get()
+ wheres = [""]
+ if where_clause.strip():
+ wheres.append(where_clause.strip())
+ if form_data['target_move'] == 'posted':
+ target_move = "AND m.state = 'posted'"
+ else:
+ target_move = ''
+ sql = ('''
+ SELECT l.id AS lid, acc.name as accname, l.account_id AS
+ account_id, l.date AS ldate, j.code AS lcode, l.currency_id,
+ l.amount_currency, l.ref AS lref, l.name AS lname,
+ COALESCE(l.debit,0) AS debit, COALESCE(l.credit,0) AS credit,
+ COALESCE(SUM(l.debit),0) - COALESCE(SUM(l.credit), 0) AS
+ balance,
+ m.name AS move_name, c.symbol AS currency_code, p.name
+ AS partner_name
+ FROM account_move_line l
+ JOIN account_move m ON (l.move_id=m.id)
+ LEFT JOIN res_currency c ON (l.currency_id=c.id)
+ LEFT JOIN res_partner p ON (l.partner_id=p.id)
+ JOIN account_journal j ON (l.journal_id=j.id)
+ JOIN account_account acc ON (l.account_id = acc.id)
+ WHERE l.account_id IN %s AND l.journal_id IN %s '''
+ + target_move + ''' AND l.date = %s
+ GROUP BY l.id, l.account_id, l.date,
+ j.code, l.currency_id, l.amount_currency, l.ref,
+ l.name, m.name, c.symbol, p.name , acc.name
+ ORDER BY l.date DESC
+ ''')
+ params = (
+ tuple(accounts.ids), tuple(form_data['journal_ids']), pass_date)
+ cr.execute(sql, params)
+ data = cr.dictfetchall()
+ res = {}
+ debit = credit = balance = 0.00
+ for line in data:
+ debit += line['debit']
+ credit += line['credit']
+ balance += line['balance']
+ res['debit'] = debit
+ res['credit'] = credit
+ res['balance'] = balance
+ res['lines'] = data
+ return res
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form') or not self.env.context.get('active_model'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+
+ model = self.env.context.get('active_model')
+ docs = self.env[model].browse(
+ self.env.context.get('active_ids', []))
+ form_data = data['form']
+ codes = []
+ if data['form'].get('journal_ids', False):
+ codes = [journal.code for journal in
+ self.env['account.journal'].search(
+ [('id', 'in', data['form']['journal_ids'])])]
+ active_acc = data['form']['account_ids']
+ accounts = self.env['account.account'].search(
+ [('id', 'in', active_acc)]) if data['form']['account_ids'] else \
+ self.env['account.account'].search([])
+
+ date_start = datetime.strptime(form_data['date_from'],
+ '%Y-%m-%d').date()
+ date_end = datetime.strptime(form_data['date_to'], '%Y-%m-%d').date()
+ days = date_end - date_start
+ dates = []
+ record = []
+ for i in range(days.days + 1):
+ dates.append(date_start + timedelta(days=i))
+ for head in dates:
+ pass_date = str(head)
+ accounts_res = self.with_context(
+ data['form'].get('used_context', {}))._get_account_move_entry(
+ accounts, form_data, pass_date)
+ if accounts_res['lines']:
+ record.append({
+ 'date': head,
+ 'debit': accounts_res['debit'],
+ 'credit': accounts_res['credit'],
+ 'balance': accounts_res['balance'],
+ 'child_lines': accounts_res['lines']
+ })
+ return {
+ 'doc_ids': docids,
+ 'doc_model': model,
+ 'data': data['form'],
+ 'docs': docs,
+ 'time': time,
+ 'Accounts': record,
+ 'print_journal': codes,
+ }
diff --git a/third_party_addons/base_accounting_kit/report/account_day_book_template.xml b/third_party_addons/base_accounting_kit/report/account_day_book_template.xml
new file mode 100644
index 000000000..11467b845
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/account_day_book_template.xml
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
: Day Book Report
+
+
+
+
+
Target Moves:
+
All Entries
+
All Posted Entries
+
+
+
+ Date from :
+
+
+
+
+ Date to :
+
+
+
+
+
+
+
+
+ Date
+ JRNL
+ Partner
+ Ref
+ Move
+ Entry Label
+ Debit
+ Credit
+ Balance
+ Currency
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/account_report_common_account.py b/third_party_addons/base_accounting_kit/report/account_report_common_account.py
new file mode 100644
index 000000000..76a1e3986
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/account_report_common_account.py
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+from odoo.tools.misc import get_lang
+
+
+class AccountCommonAccountReport(models.TransientModel):
+ _name = 'account.common.account.report'
+ _description = 'Account Common Account Report'
+ _inherit = "account.report"
+
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_common_report_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_common_report_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ display_account = fields.Selection(
+ [('all', 'All'), ('movement', 'With movements'),
+ ('not_zero', 'With balance is not equal to 0')],
+ string='Display Accounts', required=True, default='movement')
+ target_move = fields.Selection([('posted', 'All Posted Entries'),
+ ('all', 'All Entries'),
+ ], string='Target Moves', required=True, default='posted')
+ date_from = fields.Date(string='Start Date')
+ date_to = fields.Date(string='End Date')
+ company_id = fields.Many2one('res.company', string='Company', required=True, readonly=True,
+ default=lambda self: self.env.company)
+
+ def _build_contexts(self, data):
+ result = {}
+ result['journal_ids'] = 'journal_ids' in data['form'] and data['form']['journal_ids'] or False
+ result['state'] = 'target_move' in data['form'] and data['form']['target_move'] or ''
+ result['date_from'] = data['form']['date_from'] or False
+ result['date_to'] = data['form']['date_to'] or False
+ result['strict_range'] = True if result['date_from'] else False
+ result['company_id'] = data['form']['company_id'][0] or False
+ return result
+
+ def _print_report(self, data):
+ raise NotImplementedError()
+
+ def check_report(self):
+ self.ensure_one()
+ data = {}
+ data['ids'] = self.env.context.get('active_ids', [])
+ data['model'] = self.env.context.get('active_model', 'ir.ui.menu')
+ data['form'] = self.read(['date_from', 'date_to', 'journal_ids', 'target_move', 'company_id'])[0]
+ used_context = self._build_contexts(data)
+ data['form']['used_context'] = dict(used_context, lang=get_lang(self.env).code)
+ return self.with_context(discard_logo_check=True)._print_report(data)
+
+ def pre_print_report(self, data):
+ data['form'].update(self.read(['display_account'])[0])
+ return data
diff --git a/third_party_addons/base_accounting_kit/report/cash_flow_report.py b/third_party_addons/base_accounting_kit/report/cash_flow_report.py
new file mode 100644
index 000000000..c46f5ee21
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/cash_flow_report.py
@@ -0,0 +1,215 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import time
+from odoo import api, models, _
+from odoo.exceptions import UserError
+
+
+class ReportFinancial(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_cash_flow'
+ _description = 'Cash Flow Report'
+
+ def _compute_account_balance(self, accounts):
+ mapping = {
+ 'balance': "COALESCE(SUM(debit),0) - COALESCE(SUM(credit), 0) as balance",
+ 'debit': "COALESCE(SUM(debit), 0) as debit",
+ 'credit': "COALESCE(SUM(credit), 0) as credit",
+ }
+
+ res = {}
+ for account in accounts:
+ res[account.id] = dict.fromkeys(mapping, 0.0)
+ if accounts:
+ tables, where_clause, where_params = self.env[
+ 'account.move.line']._query_get()
+ tables = tables.replace('"', '') if tables else "account_move_line"
+ wheres = [""]
+ if where_clause.strip():
+ wheres.append(where_clause.strip())
+ filters = " AND ".join(wheres)
+ request = "SELECT account_id as id, " + ', '.join(
+ mapping.values()) + \
+ " FROM " + tables + \
+ " WHERE account_id IN %s " \
+ + filters + \
+ " GROUP BY account_id"
+ params = (tuple(accounts._ids),) + tuple(where_params)
+ self.env.cr.execute(request, params)
+ for row in self.env.cr.dictfetchall():
+ res[row['id']] = row
+ return res
+
+ def _compute_report_balance(self, reports):
+ res = {}
+ fields = ['credit', 'debit', 'balance']
+ for report in reports:
+ if report.id in res:
+ continue
+ res[report.id] = dict((fn, 0.0) for fn in fields)
+ if report.type == 'accounts':
+ # it's the sum of credit or debit
+ res2 = self._compute_report_balance(report.parent_id)
+ for key, value in res2.items():
+ cash_in_operation = self.env.ref(
+ 'base_accounting_kit.cash_in_from_operation0')
+ cash_out_operation = self.env.ref(
+ 'base_accounting_kit.cash_out_operation1')
+ cash_in_financial = self.env.ref(
+ 'base_accounting_kit.cash_in_financial0')
+ cash_out_financial = self.env.ref(
+ 'base_accounting_kit.cash_out_financial1')
+ cash_in_investing = self.env.ref(
+ 'base_accounting_kit.cash_in_investing0')
+ cash_out_investing = self.env.ref(
+ 'base_accounting_kit.cash_out_investing1')
+ if report == cash_in_operation or report == cash_in_financial or report == cash_in_investing:
+ res[report.id]['debit'] += value['debit']
+ res[report.id]['balance'] += value['debit']
+ elif report == cash_out_operation or report == cash_out_financial or report == cash_out_investing:
+ res[report.id]['credit'] += value['credit']
+ res[report.id]['balance'] += -(value['credit'])
+ elif report.type == 'account_type':
+ # it's the sum the leaf accounts with such an account type
+ accounts = self.env['account.account'].search(
+ [('account_type', 'in', report.account_type_ids)])
+ res[report.id]['account'] = self._compute_account_balance(
+ accounts)
+ for value in res[report.id]['account'].values():
+ for field in fields:
+ res[report.id][field] += value.get(field)
+ elif report.type == 'account_report' and report.account_report_id:
+ # it's the amount of the linked
+ res[report.id]['account'] = self._compute_account_balance(
+ report.account_ids)
+ for value in res[report.id]['account'].values():
+ for field in fields:
+ res[report.id][field] += value.get(field)
+
+ elif report.type == 'sum':
+ # it's the sum of the linked accounts
+ res[report.id]['account'] = self._compute_account_balance(
+ report.account_ids)
+ for values in res[report.id]['account'].values():
+ for field in fields:
+ res[report.id][field] += values.get(field)
+ return res
+
+ def get_account_lines(self, data):
+ lines = []
+ account_report = self.env['account.financial.report'].search(
+ [('id', '=', data['account_report_id'][0])])
+ child_reports = account_report._get_children_by_order()
+ res = self.with_context(
+ data.get('used_context'))._compute_report_balance(child_reports)
+ if data['enable_filter']:
+ comparison_res = self.with_context(
+ data.get('comparison_context'))._compute_report_balance(
+ child_reports)
+ for report_id, value in comparison_res.items():
+ res[report_id]['comp_bal'] = value['balance']
+ report_acc = res[report_id].get('account')
+ if report_acc:
+ for account_id, val in comparison_res[report_id].get(
+ 'account').items():
+ report_acc[account_id]['comp_bal'] = val['balance']
+
+ for report in child_reports:
+ vals = {
+ 'name': report.name,
+ 'balance': res[report.id]['balance'] * int(report.sign),
+ 'type': 'report',
+ 'level': bool(report.style_overwrite) and int(
+ report.style_overwrite) or report.level,
+ 'account_type': report.type or False,
+ # used to underline the financial report balances
+ }
+ if data['debit_credit']:
+ vals['debit'] = res[report.id]['debit']
+ vals['credit'] = res[report.id]['credit']
+
+ if data['enable_filter']:
+ vals['balance_cmp'] = res[report.id]['comp_bal'] * int(
+ report.sign)
+
+ lines.append(vals)
+ if report.display_detail == 'no_detail':
+ # the rest of the loop is used to display the details of the financial report, so it's not needed here.
+ continue
+ if res[report.id].get('account'):
+ # if res[report.id].get('debit'):
+ sub_lines = []
+ for account_id, value in res[report.id]['account'].items():
+ # if there are accounts to display, we add them to the
+ # lines with a level equals to their level in
+ # the COA + 1 (to avoid having them with a too low level
+ # that would conflicts with the level of data
+ # financial reports for Assets, liabilities...)
+ flag = False
+ account = self.env['account.account'].browse(account_id)
+ vals = {
+ 'name': account.code + ' ' + account.name,
+ 'balance': value['balance'] * int(report.sign) or 0.0,
+ 'type': 'account',
+ 'level': report.display_detail == 'detail_with_hierarchy' and 4,
+ 'account_type': account.internal_type,
+ }
+ if data['debit_credit']:
+ vals['debit'] = value['debit']
+ vals['credit'] = value['credit']
+ if not account.company_id.currency_id.is_zero(
+ vals[
+ 'debit']) or not account.company_id.currency_id.is_zero(
+ vals['credit']):
+ flag = True
+ if not account.company_id.currency_id.is_zero(
+ vals['balance']):
+ flag = True
+ if data['enable_filter']:
+ vals['balance_cmp'] = value['comp_bal'] * int(
+ report.sign)
+ if not account.company_id.currency_id.is_zero(
+ vals['balance_cmp']):
+ flag = True
+ if flag:
+ sub_lines.append(vals)
+ lines += sorted(sub_lines,
+ key=lambda sub_line: sub_line['name'])
+ return lines
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form') or not self.env.context.get(
+ 'active_model') or not self.env.context.get('active_id'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+
+ model = self.env.context.get('active_model')
+ docs = self.env[model].browse(self.env.context.get('active_id'))
+ report_lines = self.get_account_lines(data.get('form'))
+ return {
+ 'doc_ids': self.ids,
+ 'doc_model': model,
+ 'data': data['form'],
+ 'docs': docs,
+ 'time': time,
+ 'get_account_lines': report_lines,
+ }
diff --git a/third_party_addons/base_accounting_kit/report/cash_flow_report_template.xml b/third_party_addons/base_accounting_kit/report/cash_flow_report_template.xml
new file mode 100644
index 000000000..d63893336
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/cash_flow_report_template.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
Target Moves:
+
+ All Entries
+ All Posted Entries
+
+
+
+
+ Date from :
+
+
+ Date to :
+
+
+
+
+
+
+
+
+ Name
+
+
+ Debit
+
+
+ Credit
+
+
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/general_ledger_report.py b/third_party_addons/base_accounting_kit/report/general_ledger_report.py
new file mode 100644
index 000000000..8cda3fcaa
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/general_ledger_report.py
@@ -0,0 +1,183 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import time
+from odoo import api, models, _
+from odoo.exceptions import UserError
+
+
+class ReportGeneralLedger(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_general_ledger'
+ _description = 'General Ledger Report'
+
+ def _get_account_move_entry(self, accounts, init_balance, sortby,
+ display_account):
+ """
+ :param:
+ accounts: the recordset of accounts
+ init_balance: boolean value of initial_balance
+ sortby: sorting by date or partner and journal
+ display_account: type of account(receivable, payable and both)
+
+ Returns a dictionary of accounts with following key and value {
+ 'code': account code,
+ 'name': account name,
+ 'debit': sum of total debit amount,
+ 'credit': sum of total credit amount,
+ 'balance': total balance,
+ 'amount_currency': sum of amount_currency,
+ 'move_lines': list of move line
+ }
+ """
+ cr = self.env.cr
+ MoveLine = self.env['account.move.line']
+ move_lines = {x: [] for x in accounts.ids}
+
+ # Prepare initial sql query and Get the initial move lines
+ if init_balance:
+ init_tables, init_where_clause, init_where_params = MoveLine.with_context(
+ date_from=self.env.context.get('date_from'), date_to=False,
+ initial_bal=True)._query_get()
+ init_wheres = [""]
+ if init_where_clause.strip():
+ init_wheres.append(init_where_clause.strip())
+ init_filters = " AND ".join(init_wheres)
+ filters = init_filters.replace('account_move_line__move_id',
+ 'm').replace('account_move_line',
+ 'l')
+ sql = ("""SELECT 0 AS lid, l.account_id AS account_id, ''
+ AS ldate, '' AS lcode, 0.0 AS amount_currency, '' AS lref,
+ 'Initial Balance' AS lname, COALESCE(SUM(l.debit),0.0) AS debit,
+ COALESCE(SUM(l.credit),0.0) AS credit, COALESCE(SUM(l.debit),0)
+ - COALESCE(SUM(l.credit), 0) as balance, '' AS lpartner_id,\
+ '' AS move_name, '' AS mmove_id, '' AS currency_code,\
+ NULL AS currency_id,\
+ '' AS invoice_id, '' AS invoice_type, '' AS invoice_number,\
+ '' AS partner_name\
+ FROM account_move_line l\
+ LEFT JOIN account_move m ON (l.move_id=m.id)\
+ LEFT JOIN res_currency c ON (l.currency_id=c.id)\
+ LEFT JOIN res_partner p ON (l.partner_id=p.id)\
+ LEFT JOIN account_move i ON (m.id =i.id)\
+ JOIN account_journal j ON (l.journal_id=j.id)\
+ WHERE l.account_id IN %s""" + filters +
+ ' GROUP BY l.account_id')
+ params = (tuple(accounts.ids),) + tuple(init_where_params)
+ cr.execute(sql, params)
+ for row in cr.dictfetchall():
+ move_lines[row.pop('account_id')].append(row)
+
+ sql_sort = 'l.date, l.move_id'
+ if sortby == 'sort_journal_partner':
+ sql_sort = 'j.code, p.name, l.move_id'
+
+ # Prepare sql query base on selected parameters from wizard
+ tables, where_clause, where_params = MoveLine._query_get()
+ wheres = [""]
+ if where_clause.strip():
+ wheres.append(where_clause.strip())
+ filters = " AND ".join(wheres)
+ filters = filters.replace('account_move_line__move_id', 'm').replace(
+ 'account_move_line', 'l')
+
+ # Get move lines base on sql query and Calculate the total balance of move lines
+ sql = ('''SELECT l.id AS lid, l.account_id AS account_id,
+ l.date AS ldate, j.code AS lcode, l.currency_id, l.amount_currency,
+ l.ref AS lref, l.name AS lname, COALESCE(l.debit,0) AS debit,
+ COALESCE(l.credit,0) AS credit, COALESCE(SUM(l.debit),0) -
+ COALESCE(SUM(l.credit), 0) AS balance,\
+ m.name AS move_name, c.symbol AS currency_code, p.name AS
+ partner_name\
+ FROM account_move_line l\
+ JOIN account_move m ON (l.move_id=m.id)\
+ LEFT JOIN res_currency c ON (l.currency_id=c.id)\
+ LEFT JOIN res_partner p ON (l.partner_id=p.id)\
+ JOIN account_journal j ON (l.journal_id=j.id)\
+ JOIN account_account acc ON (l.account_id = acc.id) \
+ WHERE l.account_id IN %s ''' + filters + ''' GROUP BY l.id,
+ l.account_id, l.date, j.code, l.currency_id, l.amount_currency,
+ l.ref, l.name, m.name, c.symbol, p.name ORDER BY ''' + sql_sort)
+ params = (tuple(accounts.ids),) + tuple(where_params)
+ cr.execute(sql, params)
+
+ for row in cr.dictfetchall():
+ balance = 0
+ for line in move_lines.get(row['account_id']):
+ balance += line['debit'] - line['credit']
+ row['balance'] += balance
+ move_lines[row.pop('account_id')].append(row)
+
+ # Calculate the debit, credit and balance for Accounts
+ account_res = []
+ for account in accounts:
+ account_company = self.env.company
+ currency = account.currency_id and account.currency_id or account_company.currency_id
+ res = dict((fn, 0.0) for fn in ['credit', 'debit', 'balance'])
+ res['code'] = account.code
+ res['name'] = account.name
+ res['move_lines'] = move_lines[account.id]
+ for line in res.get('move_lines'):
+ res['debit'] += line['debit']
+ res['credit'] += line['credit']
+ res['balance'] = line['balance']
+ if display_account == 'all':
+ account_res.append(res)
+ if display_account == 'movement' and res.get('move_lines'):
+ account_res.append(res)
+ if display_account == 'not_zero' and not currency.is_zero(
+ res['balance']):
+ account_res.append(res)
+
+ return account_res
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form') or not self.env.context.get('active_model'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+
+ model = self.env.context.get('active_model')
+ docs = self.env[model].browse(
+ self.env.context.get('active_ids', []))
+
+ init_balance = data['form'].get('initial_balance', True)
+ sortby = data['form'].get('sortby', 'sort_date')
+ display_account = data['form']['display_account']
+ codes = []
+ if data['form'].get('journal_ids', False):
+ codes = [journal.code for journal in
+ self.env['account.journal'].search(
+ [('id', 'in', data['form']['journal_ids'])])]
+
+ accounts = docs if model == 'account.account' else self.env[
+ 'account.account'].search([])
+ accounts_res = self.with_context(
+ data['form'].get('used_context', {}))._get_account_move_entry(
+ accounts, init_balance, sortby, display_account)
+ return {
+ 'doc_ids': docids,
+ 'doc_model': model,
+ 'data': data['form'],
+ 'docs': docs,
+ 'time': time,
+ 'Accounts': accounts_res,
+ 'print_journal': codes,
+ }
diff --git a/third_party_addons/base_accounting_kit/report/general_ledger_report_template.xml b/third_party_addons/base_accounting_kit/report/general_ledger_report_template.xml
new file mode 100644
index 000000000..ab82c73bf
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/general_ledger_report_template.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
: General ledger
+
+
+
+
Display Account
+
+ All accounts'
+ With movements
+ With balance not equal to zero
+
+
+
+
Target Moves:
+
All Entries
+
All Posted Entries
+
+
+
+
+
Sorted By:
+
Date
+
Journal and Partner
+
+
+ Date from :
+ Date to :
+
+
+
+
+
+
+ Date
+ JRNL
+ Partner
+ Ref
+ Move
+ Entry Label
+ Debit
+ Credit
+ Balance
+ Currency
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/multiple_invoice_layouts.xml b/third_party_addons/base_accounting_kit/report/multiple_invoice_layouts.xml
new file mode 100644
index 000000000..0ca67f0d5
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/multiple_invoice_layouts.xml
@@ -0,0 +1,645 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page:
+
+ /
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page:
+
+ /
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page:
+
+ of
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sample Name
+
+
+ Sample Name
+
+
+
+
+
+
+
+
+
+ Deco Addict
+
+
+
+ 77
+ Santa Barbara
+ Rd Pleasant Hill CA 94523
+ United States
+
+
+
+
+
+
+
+
+
+
+ Invoice
+ INV/2020/07/0003
+
+
+
+
+
+
+ Description
+
+
+ Quantity
+
+
+ Unit Price
+
+
+ Taxes
+
+
+ Amount
+
+
+
+
+
+
+ [FURN_8999] Three-Seat Sofa
+
+ Three Seater Sofa with Lounger in Steel
+ Grey Colour
+
+
+
+ 5.000
+
+
+ 1,500.00
+
+
+ 15.00%
+
+
+ $
+
+ 7,500.00
+
+
+
+
+
+
+ [FURN_8220] Four Person Desk
+
+ Four person modern office workstation
+
+
+
+ 5.000
+
+
+ 23,500.00
+
+
+ 15.00%
+
+
+ $
+
+ 117,500.00
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Subtotal
+
+
+ $
+
+ 125,000.00
+
+
+
+
+
+
+ Tax
+ 15%
+
+
+
+ $
+ 18,750.00
+
+
+
+
+
+ Total
+
+
+ $
+
+ 143,750.00
+
+
+
+
+
+
+
+
+
+
+ Please use the following communication for your payment
+ :
+
+
+ INV/2020/07/0003
+
+
+
+
+ Payment terms: 300 Days
+
+
+
+
+ Sample Name
+
+
+ Sample Name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/multiple_invoice_report.py b/third_party_addons/base_accounting_kit/report/multiple_invoice_report.py
new file mode 100644
index 000000000..fb44fa240
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/multiple_invoice_report.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, models
+
+
+class ReportInvoiceMultiple(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_multiple_invoice'
+ _inherit = 'report.account.report_invoice'
+ _description = 'Report Invoice Multiple'
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ rslt = super()._get_report_values(docids, data)
+
+ inv = rslt['docs']
+ layout = inv.journal_id.company_id.external_report_layout_id.key
+
+ if layout == 'web.external_layout_boxed':
+ new_layout = 'base_accounting_kit.boxed'
+
+ elif layout == 'web.external_layout_bold':
+ new_layout = 'base_accounting_kit.bold'
+
+ elif layout == 'web.external_layout_striped':
+ new_layout = 'base_accounting_kit.striped'
+
+ else:
+ new_layout = 'base_accounting_kit.standard'
+
+ rslt['mi_type'] = inv.journal_id.multiple_invoice_type
+ rslt['mi_ids'] = inv.journal_id.multiple_invoice_ids
+ rslt['txt_position'] = inv.journal_id.text_position
+ rslt['body_txt_position'] = inv.journal_id.body_text_position
+ rslt['txt_align'] = inv.journal_id.text_align
+ rslt['layout'] = new_layout
+ rslt['report_type'] = data.get('report_type') if data else ''
+ return rslt
diff --git a/third_party_addons/base_accounting_kit/report/multiple_invoice_report_template.xml b/third_party_addons/base_accounting_kit/report/multiple_invoice_report_template.xml
new file mode 100644
index 000000000..f30616ebc
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/multiple_invoice_report_template.xml
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+ Tax ID :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Invoice
+
+
+ Draft Invoice
+
+
+ Cancelled Invoice
+
+ Credit Note
+ Vendor Credit Note
+
+ Vendor Bill
+
+
+
+
+
+
+
+
+
+ Description
+
+
+ Quantity
+
+
+ Unit Price
+
+
+ Disc.%
+
+
+ Taxes
+
+
+
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Subtotal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Paid on 2021-09-19
+
+
+ 20.00
+
+
+
+
+
+ Amount Due
+
+ 11.05
+
+
+
+
+
+
+
+
+
+
+ Total amount in words:
+ Thirty one dollar and Five cents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Please use the following communication for your payment :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Incoterm:
+
+ -
+
+
+
+
+ Scan me with your banking
+ app.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Multiple Invoice Copies
+ account.move
+ qweb-pdf
+ base_accounting_kit.report_multiple_invoice
+ base_accounting_kit.report_multiple_invoice
+
+ report
+
+
diff --git a/third_party_addons/base_accounting_kit/report/report.xml b/third_party_addons/base_accounting_kit/report/report.xml
new file mode 100644
index 000000000..7f1da6b4b
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report.xml
@@ -0,0 +1,97 @@
+
+
+
+
+ Financial reports
+ financial.report
+ qweb-pdf
+ base_accounting_kit.report_financial
+ base_accounting_kit.report_financial
+
+
+
+ General Ledger
+ account.report.general.ledger
+ qweb-pdf
+ base_accounting_kit.report_general_ledger
+ base_accounting_kit.report_general_ledger
+
+
+
+
+ Partner Ledger
+ account.report.partner.ledger
+ qweb-pdf
+ base_accounting_kit.report_partnerledger
+ base_accounting_kit.report_partnerledger
+
+
+
+ Aged Partner Balance
+ res.partner
+ qweb-pdf
+ base_accounting_kit.report_agedpartnerbalance
+ base_accounting_kit.report_agedpartnerbalance
+
+
+
+ Journals Audit
+ account.common.journal.report
+ qweb-pdf
+ base_accounting_kit.report_journal_audit
+ base_accounting_kit.report_journal_audit
+
+
+
+ Tax Report
+ kit.account.tax.report
+ qweb-pdf
+ base_accounting_kit.report_tax
+ base_accounting_kit.report_tax
+
+
+
+ Trial Balance
+ account.balance.report
+ qweb-pdf
+ base_accounting_kit.report_trial_balance
+ base_accounting_kit.report_trial_balance
+
+
+
+ Cash Flow Statement
+ account.financial.report
+ qweb-pdf
+ base_accounting_kit.report_cash_flow
+ base_accounting_kit.report_cash_flow
+
+
+
+ Bank Book Report
+ account.bank.book.report
+ qweb-pdf
+ base_accounting_kit.report_bank_book
+ base_accounting_kit.report_bank_book
+ False
+
+
+
+
+ Cash Book Report
+ account.cash.book.report
+ qweb-pdf
+ base_accounting_kit.report_cash_book
+ base_accounting_kit.report_cash_book
+ False
+
+
+
+
+ Day Book PDF Report
+ account.day.book.report
+ qweb-pdf
+ base_accounting_kit.day_book_report_template
+ base_accounting_kit.day_book_report_template
+ True
+
+
diff --git a/third_party_addons/base_accounting_kit/report/report_aged_partner.py b/third_party_addons/base_accounting_kit/report/report_aged_partner.py
new file mode 100644
index 000000000..55a6adcd1
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_aged_partner.py
@@ -0,0 +1,297 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import time
+from datetime import datetime
+from dateutil.relativedelta import relativedelta
+from odoo import api, models, _
+from odoo.exceptions import UserError
+from odoo.tools import float_is_zero
+
+
+class ReportAgedPartnerBalance(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_agedpartnerbalance'
+ _description = 'Aged Partner Balance Report'
+
+ def _get_partner_move_lines(self, account_type, date_from, target_move,
+ period_length):
+ # This method can receive the context key 'include_nullified_amount' {Boolean}
+ # Do an invoice and a payment and unreconcile. The amount will be nullified
+ # By default, the partner wouldn't appear in this report.
+ # The context key allow it to appear
+ # In case of a period_length of 30 days as of 2019-02-08, we want the following periods:
+ # Name Stop Start
+ # 1 - 30 : 2019-02-07 - 2019-01-09
+ # 31 - 60 : 2019-01-08 - 2018-12-10
+ # 61 - 90 : 2018-12-09 - 2018-11-10
+ # 91 - 120 : 2018-11-09 - 2018-10-11
+ # +120 : 2018-10-10
+ periods = {}
+ start = datetime.strptime(date_from, "%Y-%m-%d")
+ date_from = datetime.strptime(date_from, "%Y-%m-%d").date()
+ for i in range(5)[::-1]:
+ stop = start - relativedelta(days=period_length)
+ period_name = str((5 - (i + 1)) * period_length + 1) + '-' + str(
+ (5 - i) * period_length)
+ period_stop = (start - relativedelta(days=1)).strftime('%Y-%m-%d')
+ if i == 0:
+ period_name = '+' + str(4 * period_length)
+ periods[str(i)] = {
+ 'name': period_name,
+ 'stop': period_stop,
+ 'start': (i != 0 and stop.strftime('%Y-%m-%d') or False),
+ }
+ start = stop
+
+ res = []
+ total = []
+ cr = self.env.cr
+ user_company = self.env.company
+ user_currency = user_company.currency_id
+ ResCurrency = self.env['res.currency'].with_context(date=date_from)
+ company_ids = self._context.get('company_ids') or [user_company.id]
+ move_state = ['draft', 'posted']
+ if target_move == 'posted':
+ move_state = ['posted']
+ arg_list = (tuple(move_state), tuple(account_type))
+ # build the reconciliation clause to see what partner needs to be printed
+ reconciliation_clause = '(l.reconciled IS FALSE)'
+ cr.execute(
+ 'SELECT debit_move_id, credit_move_id FROM account_partial_reconcile where max_date > %s',
+ (date_from,))
+ reconciled_after_date = []
+
+ for row in cr.fetchall():
+ reconciled_after_date += [row[0], row[1]]
+
+ if reconciled_after_date:
+ reconciliation_clause = '(l.reconciled IS FALSE OR l.id IN %s)'
+ arg_list += (tuple(reconciled_after_date),)
+ arg_list += (date_from, tuple(company_ids))
+ query = '''
+ SELECT DISTINCT l.partner_id, UPPER(res_partner.name)
+ FROM account_move_line AS l left join res_partner on l.partner_id = res_partner.id, account_account, account_move am
+ WHERE (l.account_id = account_account.id)
+ AND (l.move_id = am.id)
+ AND (am.state IN %s)
+ AND (account_account.account_type IN %s)
+ AND ''' + reconciliation_clause + '''
+ AND (l.date <= %s)
+ AND l.company_id IN %s
+ ORDER BY UPPER(res_partner.name)'''
+ cr.execute(query, arg_list)
+
+ partners = cr.dictfetchall()
+ # put a total of 0
+ for i in range(7):
+ total.append(0)
+
+ # Build a string like (1,2,3) for easy use in SQL query
+ partner_ids = [partner['partner_id'] for partner in partners if
+ partner['partner_id']]
+ lines = dict(
+ (partner['partner_id'] or False, []) for partner in partners)
+ if not partner_ids:
+ return [], [], {}
+
+ # This dictionary will store the not due amount of all partners
+ undue_amounts = {}
+ query = '''SELECT l.id
+ FROM account_move_line AS l, account_account, account_move am
+ WHERE (l.account_id = account_account.id) AND (l.move_id = am.id)
+ AND (am.state IN %s)
+ AND (account_account.account_type IN %s)
+ AND (COALESCE(l.date_maturity,l.date) >= %s)\
+ AND ((l.partner_id IN %s) OR (l.partner_id IS NULL))
+ AND (l.date <= %s)
+ AND l.company_id IN %s'''
+ cr.execute(query, (
+ tuple(move_state), tuple(account_type), date_from,
+ tuple(partner_ids), date_from, tuple(company_ids)))
+ aml_ids = cr.fetchall()
+ aml_ids = aml_ids and [x[0] for x in aml_ids] or []
+ for line in self.env['account.move.line'].browse(aml_ids):
+ partner_id = line.partner_id.id or False
+ if partner_id not in undue_amounts:
+ undue_amounts[partner_id] = 0.0
+ line_amount = ResCurrency._get_conversion_rate(line.company_id.currency_id,
+ user_currency, line.balance)
+ if user_currency.is_zero(line_amount):
+ continue
+ for partial_line in line.matched_debit_ids:
+ if partial_line.max_date <= date_from:
+ line_amount += ResCurrency._get_conversion_rate(
+ partial_line.company_id.currency_id, user_currency,
+ partial_line.amount)
+ for partial_line in line.matched_credit_ids:
+ if partial_line.max_date <= date_from:
+ line_amount -= ResCurrency._get_conversion_rate(
+ partial_line.company_id.currency_id, user_currency,
+ partial_line.amount)
+ if not self.env.company.currency_id.is_zero(line_amount):
+ undue_amounts[partner_id] += line_amount
+ lines[partner_id].append({
+ 'line': line,
+ 'amount': line_amount,
+ 'period': 6,
+ })
+ # Use one query per period and store results in history (a list variable)
+ # Each history will contain: history[1] = {'': }
+ history = []
+ for i in range(5):
+ args_list = (
+ tuple(move_state), tuple(account_type), tuple(partner_ids),)
+ dates_query = '(COALESCE(l.date_maturity,l.date)'
+
+ if periods[str(i)]['start'] and periods[str(i)]['stop']:
+ dates_query += ' BETWEEN %s AND %s)'
+ args_list += (
+ periods[str(i)]['start'], periods[str(i)]['stop'])
+ elif periods[str(i)]['start']:
+ dates_query += ' >= %s)'
+ args_list += (periods[str(i)]['start'],)
+ else:
+ dates_query += ' <= %s)'
+ args_list += (periods[str(i)]['stop'],)
+ args_list += (date_from, tuple(company_ids))
+ query = '''SELECT l.id
+ FROM account_move_line AS l, account_account, account_move am
+ WHERE (l.account_id = account_account.id) AND (l.move_id = am.id)
+ AND (am.state IN %s)
+ AND (account_account.account_type IN %s)
+ AND ((l.partner_id IN %s) OR (l.partner_id IS NULL))
+ AND ''' + dates_query + '''
+ AND (l.date <= %s)
+ AND l.company_id IN %s'''
+ cr.execute(query, args_list)
+ partners_amount = {}
+ aml_ids = cr.fetchall()
+ aml_ids = aml_ids and [x[0] for x in aml_ids] or []
+ for line in self.env['account.move.line'].browse(aml_ids):
+ partner_id = line.partner_id.id or False
+ if partner_id not in partners_amount:
+ partners_amount[partner_id] = 0.0
+ line_amount = ResCurrency._get_conversion_rate(line.company_id.currency_id,
+ user_currency, line.balance)
+ if user_currency.is_zero(line_amount):
+ continue
+ for partial_line in line.matched_debit_ids:
+ if partial_line.max_date <= date_from:
+ line_amount += ResCurrency._get_conversion_rate(
+ partial_line.company_id.currency_id, user_currency,
+ partial_line.amount)
+ for partial_line in line.matched_credit_ids:
+ if partial_line.max_date <= date_from:
+ line_amount -= ResCurrency._get_conversion_rate(
+ partial_line.company_id.currency_id, user_currency,
+ partial_line.amount)
+
+ if not self.env.company.currency_id.is_zero(
+ line_amount):
+ partners_amount[partner_id] += line_amount
+ lines[partner_id].append({
+ 'line': line,
+ 'amount': line_amount,
+ 'period': i + 1,
+ })
+ history.append(partners_amount)
+ for partner in partners:
+ if partner['partner_id'] is None:
+ partner['partner_id'] = False
+ at_least_one_amount = False
+ values = {}
+ undue_amt = 0.0
+ if partner[
+ 'partner_id'] in undue_amounts: # Making sure this partner actually was found by the query
+ undue_amt = undue_amounts[partner['partner_id']]
+
+ total[6] = total[6] + undue_amt
+ values['direction'] = undue_amt
+ if not float_is_zero(values['direction'],
+ precision_rounding=self.env.company.currency_id.rounding):
+ at_least_one_amount = True
+
+ for i in range(5):
+ during = False
+ if partner['partner_id'] in history[i]:
+ during = [history[i][partner['partner_id']]]
+ # Adding counter
+ total[(i)] = total[(i)] + (during and during[0] or 0)
+ values[str(i)] = during and during[0] or 0.0
+ if not float_is_zero(values[str(i)],
+ precision_rounding=self.env.company.currency_id.rounding):
+ at_least_one_amount = True
+ values['total'] = sum(
+ [values['direction']] + [values[str(i)] for i in range(5)])
+ ## Add for total
+ total[(i + 1)] += values['total']
+ values['partner_id'] = partner['partner_id']
+ if partner['partner_id']:
+ browsed_partner = self.env['res.partner'].browse(
+ partner['partner_id'])
+ values['name'] = browsed_partner.name and len(
+ browsed_partner.name) >= 45 and browsed_partner.name[
+ 0:40] + '...' or browsed_partner.name
+ values['trust'] = browsed_partner.trust
+ else:
+ values['name'] = _('Unknown Partner')
+ values['trust'] = False
+
+ if at_least_one_amount or (
+ self._context.get('include_nullified_amount') and lines[
+ partner['partner_id']]):
+ res.append(values)
+ return res, total, lines
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form') or not self.env.context.get(
+ 'active_model') or not self.env.context.get('active_id'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+
+ total = []
+ model = self.env.context.get('active_model')
+ docs = self.env[model].browse(self.env.context.get('active_id'))
+
+ target_move = data['form'].get('target_move', 'all')
+ date_from = data['form'].get('date_from', time.strftime('%Y-%m-%d'))
+
+ if data['form']['result_selection'] == 'customer':
+ account_type = ['asset_receivable']
+ elif data['form']['result_selection'] == 'supplier':
+ account_type = ['liability_payable']
+ else:
+ account_type = ['liability_payable', 'asset_receivable']
+
+ movelines, total, dummy = self._get_partner_move_lines(account_type,
+ date_from,
+ target_move,
+ data['form']['period_length'])
+ return {
+ 'doc_ids': self.ids,
+ 'doc_model': model,
+ 'data': data['form'],
+ 'docs': docs,
+ 'time': time,
+ 'get_partner_lines': movelines,
+ 'get_direction': total,
+ }
diff --git a/third_party_addons/base_accounting_kit/report/report_aged_partner_template.xml b/third_party_addons/base_accounting_kit/report/report_aged_partner_template.xml
new file mode 100644
index 000000000..0d4615630
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_aged_partner_template.xml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
Aged Partner Balance
+
+
+
+
Period Length (days)
+
+
+
+
+
+
Partner's:
+
+ Receivable Accounts
+ Payable Accounts
+ Receivable and Payable Accounts
+
+
+
+
Target Moves:
+
+ All Entries
+ All Posted Entries
+
+
+
+
+
+
+
+ Partners
+
+ Not due
+
+
+
+
+
+
+ Total
+
+
+ Account Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/report_financial.py b/third_party_addons/base_accounting_kit/report/report_financial.py
new file mode 100644
index 000000000..b5d664ff6
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_financial.py
@@ -0,0 +1,157 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, fields, models
+
+
+# ---------------------------------------------------------
+# Account Financial Report
+# ---------------------------------------------------------
+class AccountTypes(models.Model):
+ _name = "account.account.type"
+
+ name = fields.Char(string='Account Type', required=True, translate=True)
+ type = fields.Selection([
+ ('other', 'Regular'),
+ ('receivable', 'Receivable'),
+ ('payable', 'Payable'),
+ ('liquidity', 'Liquidity'),
+ ], required=True, default='other',
+ help="The 'Internal Type' is used for features available on "
+ "different types of accounts: liquidity type is for cash or "
+ "bank accounts" \
+ ", payable/receivable is for vendor/customer accounts.")
+
+
+class AccountFinancialReport(models.Model):
+ _name = "account.financial.report"
+ _description = "Account Report"
+ _rec_name = 'name'
+
+ @api.depends('parent_id', 'parent_id.level')
+ def _get_level(self):
+ """Returns a dictionary with key=the ID of a record and
+ value = the level of this
+ record in the tree structure."""
+ for report in self:
+ level = 0
+ if report.parent_id:
+ level = report.parent_id.level + 1
+ report.level = level
+
+ def _get_children_by_order(self):
+ """returns a recordset of all the children computed recursively,
+ and sorted by sequence. Ready for the printing"""
+ res = self
+ children = self.search([('parent_id', 'in', self.ids)],
+ order='sequence ASC')
+ if children:
+ for child in children:
+ res += child._get_children_by_order()
+ return res
+
+ name = fields.Char('Report Name', required=True, translate=True)
+ parent_id = fields.Many2one('account.financial.report', 'Parent')
+ children_ids = fields.One2many(
+ 'account.financial.report',
+ 'parent_id',
+ 'Account Report')
+ sequence = fields.Integer('Sequence')
+ level = fields.Integer(compute='_get_level', string='Level', store=True, recursive=True)
+ type = fields.Selection(
+ [('sum', 'View'),
+ ('accounts', 'Accounts'),
+ ('account_type', 'Account Type'),
+ ('account_report', 'Report Value')],
+ 'Type',
+ default='sum')
+ account_ids = fields.Many2many(
+ 'account.account',
+ 'account_account_financial_report',
+ 'report_line_id',
+ 'account_id',
+ 'Accounts')
+ account_report_id = fields.Many2one(
+ 'account.financial.report',
+ 'Report Value')
+ # account_type_ids = fields.Many2many(
+ # 'account.account.type',
+ # 'Account Types')
+ account_type_ids = fields.Selection(
+ selection=[
+ ("asset_receivable", "Receivable"),
+ ("asset_cash", "Bank and Cash"),
+ ("asset_current", "Current Assets"),
+ ("asset_non_current", "Non-current Assets"),
+ ("asset_prepayments", "Prepayments"),
+ ("asset_fixed", "Fixed Assets"),
+ ("liability_payable", "Payable"),
+ ("liability_credit_card", "Credit Card"),
+ ("liability_current", "Current Liabilities"),
+ ("liability_non_current", "Non-current Liabilities"),
+ ("equity", "Equity"),
+ ("equity_unaffected", "Current Year Earnings"),
+ ("income", "Income"),
+ ("income_other", "Other Income"),
+ ("expense", "Expenses"),
+ ("expense_depreciation", "Depreciation"),
+ ("expense_direct_cost", "Cost of Revenue"),
+ ("off_balance", "Off-Balance Sheet"),
+ ],
+ string="Type",
+ help="These types are defined according to your country. The type contains more information " \
+ "about the account and its specificities."
+ )
+
+ sign = fields.Selection(
+ [("-1", 'Reverse balance sign'), ("1", 'Preserve balance sign')],
+ 'Sign on Reports', required=True, default="1",
+ help='For accounts that are typically more'
+ ' debited than credited and that you'
+ ' would like to print as negative'
+ ' amounts in your reports, you should'
+ ' reverse the sign of the balance;'
+ ' e.g.: Expense account. The same applies'
+ ' for accounts that are typically more'
+ ' credited than debited and that you would'
+ ' like to print as positive amounts in'
+ ' your reports; e.g.: Income account.')
+ display_detail = fields.Selection(
+ [('no_detail', 'No detail'),
+ ('detail_flat', 'Display children flat'),
+ ('detail_with_hierarchy', 'Display children with hierarchy')],
+ 'Display details',
+ default='detail_flat')
+ style_overwrite = fields.Selection(
+ [('0', 'Automatic formatting'),
+ ('1', 'Main Title 1 (bold, underlined)'),
+ ('2', 'Title 2 (bold)'),
+ ('3', 'Title 3 (bold, smaller)'),
+ ('4', 'Normal Text'),
+ ('5', 'Italic Text (smaller)'),
+ ('6', 'Smallest Text')],
+ 'Financial Report Style',
+ default='0',
+ help="You can set up here the format you want this"
+ " record to be displayed. If you leave the"
+ " automatic formatting, it will be computed"
+ " based on the financial reports hierarchy "
+ "(auto-computed field 'level').")
diff --git a/third_party_addons/base_accounting_kit/report/report_financial_template.xml b/third_party_addons/base_accounting_kit/report/report_financial_template.xml
new file mode 100644
index 000000000..fcbb47a53
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_financial_template.xml
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Target Moves:
+
+ All Entries
+ All Posted Entries
+
+
+
+
+
+ Date from :
+
+
+
+
+ Date to :
+
+
+
+
+
+
+
+
+ Name
+ Debit
+ Credit
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name
+ Balance
+
+ Comp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/report_journal_audit.py b/third_party_addons/base_accounting_kit/report/report_journal_audit.py
new file mode 100644
index 000000000..58613e896
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_journal_audit.py
@@ -0,0 +1,160 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import time
+from odoo import api, models, _
+from odoo.exceptions import UserError
+
+
+class ReportJournal(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_journal_audit'
+ _description = 'Journal Report'
+
+ def lines(self, target_move, journal_ids, sort_selection, data):
+ if isinstance(journal_ids, int):
+ journal_ids = [journal_ids]
+ move_state = ['draft', 'posted']
+ if target_move == 'posted':
+ move_state = ['posted']
+
+ query_get_clause = self._get_query_get_clause(data)
+ params = [tuple(move_state), tuple(journal_ids)] + query_get_clause[2]
+ query = 'SELECT "account_move_line".id FROM ' + query_get_clause[
+ 0] + (', account_move am, account_account acc WHERE '
+ '"account_move_line".account_id = acc.id AND '
+ '"account_move_line".move_id=am.id AND am.state IN %s AND '
+ '"account_move_line".journal_id IN %s AND ') + \
+ query_get_clause[1] + ' ORDER BY '
+ if sort_selection == 'date':
+ query += '"account_move_line".date'
+ else:
+ query += 'am.name'
+ query += ', "account_move_line".move_id'
+ self.env.cr.execute(query, tuple(params))
+ ids = (x[0] for x in self.env.cr.fetchall())
+ return self.env['account.move.line'].browse(ids)
+
+ def _sum_debit(self, data, journal_id):
+ move_state = ['draft', 'posted']
+ if data['form'].get('target_move', 'all') == 'posted':
+ move_state = ['posted']
+
+ query_get_clause = self._get_query_get_clause(data)
+ params = [tuple(move_state), tuple(journal_id.ids)] + query_get_clause[
+ 2]
+ self.env.cr.execute('SELECT SUM(debit) FROM ' + query_get_clause[
+ 0] + ', account_move am '
+ 'WHERE "account_move_line".move_id=am.id AND am.state IN %s'
+ ' AND "account_move_line".journal_id IN %s AND ' +
+ query_get_clause[1] + ' ',
+ tuple(params))
+ return self.env.cr.fetchone()[0] or 0.0
+
+ def _sum_credit(self, data, journal_id):
+ move_state = ['draft', 'posted']
+ if data['form'].get('target_move', 'all') == 'posted':
+ move_state = ['posted']
+
+ query_get_clause = self._get_query_get_clause(data)
+ params = [tuple(move_state), tuple(journal_id.ids)] + query_get_clause[
+ 2]
+ self.env.cr.execute('SELECT SUM(credit) FROM ' + query_get_clause[
+ 0] + ', account_move am '
+ 'WHERE "account_move_line".move_id=am.id AND am.state IN %s AND "account_move_line".journal_id IN %s AND ' +
+ query_get_clause[1] + ' ',
+ tuple(params))
+ return self.env.cr.fetchone()[0] or 0.0
+
+ def _get_taxes(self, data, journal_id):
+ move_state = ['draft', 'posted']
+ if data['form'].get('target_move', 'all') == 'posted':
+ move_state = ['posted']
+
+ query_get_clause = self._get_query_get_clause(data)
+ params = [tuple(move_state), tuple(journal_id.ids)] + query_get_clause[
+ 2]
+ query = """
+ SELECT rel.account_tax_id, SUM("account_move_line".balance) AS base_amount
+ FROM account_move_line_account_tax_rel rel, """ + query_get_clause[
+ 0] + """
+ LEFT JOIN account_move am ON "account_move_line".move_id = am.id
+ WHERE "account_move_line".id = rel.account_move_line_id
+ AND am.state IN %s
+ AND "account_move_line".journal_id IN %s
+ AND """ + query_get_clause[1] + """
+ GROUP BY rel.account_tax_id"""
+ self.env.cr.execute(query, tuple(params))
+ ids = []
+ base_amounts = {}
+ for row in self.env.cr.fetchall():
+ ids.append(row[0])
+ base_amounts[row[0]] = row[1]
+
+ res = {}
+ for tax in self.env['account.tax'].browse(ids):
+ self.env.cr.execute(
+ 'SELECT sum(debit - credit) FROM ' + query_get_clause[
+ 0] + ', account_move am '
+ 'WHERE "account_move_line".move_id=am.id AND am.state IN %s AND "account_move_line".journal_id IN %s AND ' +
+ query_get_clause[1] + ' AND tax_line_id = %s',
+ tuple(params + [tax.id]))
+ res[tax] = {
+ 'base_amount': base_amounts[tax.id],
+ 'tax_amount': self.env.cr.fetchone()[0] or 0.0,
+ }
+ if journal_id.type == 'sale':
+ # sales operation are credits
+ res[tax]['base_amount'] = res[tax]['base_amount'] * -1
+ res[tax]['tax_amount'] = res[tax]['tax_amount'] * -1
+ return res
+
+ def _get_query_get_clause(self, data):
+ return self.env['account.move.line'].with_context(
+ data['form'].get('used_context', {}))._query_get()
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+
+ target_move = data['form'].get('target_move', 'all')
+ sort_selection = data['form'].get('sort_selection', 'date')
+
+ res = {}
+ for journal in data['form']['journal_ids']:
+ res[journal] = self.with_context(
+ data['form'].get('used_context', {})).lines(target_move,
+ journal,
+ sort_selection,
+ data)
+ return {
+ 'doc_ids': data['form']['journal_ids'],
+ 'doc_model': self.env['account.journal'],
+ 'data': data,
+ 'docs': self.env['account.journal'].browse(
+ data['form']['journal_ids']),
+ 'time': time,
+ 'lines': res,
+ 'sum_credit': self._sum_credit,
+ 'sum_debit': self._sum_debit,
+ 'get_taxes': self._get_taxes,
+ }
diff --git a/third_party_addons/base_accounting_kit/report/report_journal_audit_template.xml b/third_party_addons/base_accounting_kit/report/report_journal_audit_template.xml
new file mode 100644
index 000000000..0139c765d
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_journal_audit_template.xml
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Journal
+
+
+
+
+
+
+
+
+
+
Entries Sorted By:
+
Journal Entry Number
+
Date
+
+
+
+
Target Moves:
+
All Entries
+
All Posted Entries
+
+
+
+
+
+
+
+ Move
+ Date
+ Account
+ Partner
+ Label
+ Debit
+ Credit
+ Currency
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tax Declaration
+
+
+ Name
+ Base Amount
+ Tax Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/report_partner_ledger.py b/third_party_addons/base_accounting_kit/report/report_partner_ledger.py
new file mode 100644
index 000000000..990f2eff8
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_partner_ledger.py
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import time
+from odoo import api, models, _
+from odoo.exceptions import UserError
+
+
+class ReportPartnerLedger(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_partnerledger'
+ _description = 'Partner Ledger Report'
+
+ def _lines(self, data, partner):
+ full_account = []
+ currency = self.env['res.currency']
+ query_get_data = self.env['account.move.line'].with_context(
+ data['form'].get('used_context', {}))._query_get()
+ reconcile_clause = "" if data['form'][
+ 'reconciled'] else ' AND "account_move_line".full_reconcile_id IS NULL '
+ params = [partner.id, tuple(data['computed']['move_state']),
+ tuple(data['computed']['account_ids'])] + \
+ query_get_data[2]
+ query = """
+ SELECT "account_move_line".id, "account_move_line".date, j.code,
+ acc.name as a_name, "account_move_line".ref,
+ m.name as move_name, "account_move_line".name,
+ "account_move_line".debit, "account_move_line".credit,
+ "account_move_line".amount_currency,
+ "account_move_line".currency_id, c.symbol AS currency_code
+ FROM """ + query_get_data[0] + """
+ LEFT JOIN account_journal j ON ("account_move_line".journal_id = j.id)
+ LEFT JOIN account_account acc ON ("account_move_line".account_id = acc.id)
+ LEFT JOIN res_currency c ON ("account_move_line".currency_id=c.id)
+ LEFT JOIN account_move m ON (m.id="account_move_line".move_id)
+ WHERE "account_move_line".partner_id = %s
+ AND m.state IN %s
+ AND "account_move_line".account_id IN %s AND """ + \
+ query_get_data[1] + reconcile_clause + """
+ ORDER BY "account_move_line".date"""
+ self.env.cr.execute(query, tuple(params))
+ res = self.env.cr.dictfetchall()
+ sum = 0.0
+ lang_code = self.env.context.get('lang') or 'en_US'
+ lang = self.env['res.lang']
+ lang_id = lang._lang_get(lang_code)
+ date_format = lang_id.date_format
+ for r in res:
+ r['date'] = r['date']
+ r['displayed_name'] = '-'.join(
+ r[field_name] for field_name in ('move_name', 'ref', 'name')
+ if r[field_name] not in (None, '', '/')
+ )
+ sum += r['debit'] - r['credit']
+ r['progress'] = sum
+ r['currency_id'] = currency.browse(r.get('currency_id'))
+ full_account.append(r)
+ return full_account
+
+ def _sum_partner(self, data, partner, field):
+ if field not in ['debit', 'credit', 'debit - credit']:
+ return
+ result = 0.0
+ query_get_data = self.env['account.move.line'].with_context(
+ data['form'].get('used_context', {}))._query_get()
+ reconcile_clause = "" if data['form'][
+ 'reconciled'] else ' AND "account_move_line".full_reconcile_id IS NULL '
+
+ params = [partner.id, tuple(data['computed']['move_state']),
+ tuple(data['computed']['account_ids'])] + \
+ query_get_data[2]
+ query = """SELECT sum(""" + field + """)
+ FROM """ + query_get_data[0] + """, account_move AS m
+ WHERE "account_move_line".partner_id = %s
+ AND m.id = "account_move_line".move_id
+ AND m.state IN %s
+ AND account_id IN %s
+ AND """ + query_get_data[1] + reconcile_clause
+ self.env.cr.execute(query, tuple(params))
+
+ contemp = self.env.cr.fetchone()
+ if contemp is not None:
+ result = contemp[0] or 0.0
+ return result
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+
+ data['computed'] = {}
+
+ obj_partner = self.env['res.partner']
+ query_get_data = self.env['account.move.line'].with_context(
+ data['form'].get('used_context', {}))._query_get()
+ data['computed']['move_state'] = ['draft', 'posted']
+ if data['form'].get('target_move', 'all') == 'posted':
+ data['computed']['move_state'] = ['posted']
+ result_selection = data['form'].get('result_selection', 'customer')
+ if result_selection == 'supplier':
+ data['computed']['ACCOUNT_TYPE'] = ['liability_payable']
+ elif result_selection == 'customer':
+ data['computed']['ACCOUNT_TYPE'] = ['asset_receivable']
+ else:
+ data['computed']['ACCOUNT_TYPE'] = ['liability_payable', 'asset_receivable']
+
+ self.env.cr.execute("""
+ SELECT a.id
+ FROM account_account a
+ WHERE a.account_type IN %s
+ AND NOT a.deprecated""",
+ (tuple(data['computed']['ACCOUNT_TYPE']),))
+ data['computed']['account_ids'] = [a for (a,) in
+ self.env.cr.fetchall()]
+ params = [tuple(data['computed']['move_state']),
+ tuple(data['computed']['account_ids'])] + query_get_data[2]
+ reconcile_clause = "" if data['form'][
+ 'reconciled'] else ' AND "account_move_line".full_reconcile_id IS NULL '
+ query = """
+ SELECT DISTINCT "account_move_line".partner_id
+ FROM """ + query_get_data[0] + """, account_account AS account, account_move AS am
+ WHERE "account_move_line".partner_id IS NOT NULL
+ AND "account_move_line".account_id = account.id
+ AND am.id = "account_move_line".move_id
+ AND am.state IN %s
+ AND "account_move_line".account_id IN %s
+ AND NOT account.deprecated
+ AND """ + query_get_data[1] + reconcile_clause
+ self.env.cr.execute(query, tuple(params))
+ partner_ids = [res['partner_id'] for res in self.env.cr.dictfetchall()]
+ partners = obj_partner.browse(partner_ids)
+ partners = sorted(partners, key=lambda x: (x.ref or '', x.name or ''))
+ return {
+ 'doc_ids': partner_ids,
+ 'doc_model': self.env['res.partner'],
+ 'data': data,
+ 'docs': partners,
+ 'time': time,
+ 'lines': self._lines,
+ 'sum_partner': self._sum_partner,
+ }
diff --git a/third_party_addons/base_accounting_kit/report/report_partner_ledger_template.xml b/third_party_addons/base_accounting_kit/report/report_partner_ledger_template.xml
new file mode 100644
index 000000000..b5c42d9bc
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_partner_ledger_template.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
Partner Ledger
+
+
+
+
+ Date from :
+
+
+
+
+ Date to :
+
+
+
+
+
Target Moves:
+
All Entries
+
All Posted Entries
+
+
+
+
+
+
+ Date
+ JRNL
+ Ref
+ Debit
+ Credit
+ Balance
+ Currency
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/report_tax.py b/third_party_addons/base_accounting_kit/report/report_tax.py
new file mode 100644
index 000000000..098d02676
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_tax.py
@@ -0,0 +1,114 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from _datetime import datetime
+from odoo import api, models, _
+from odoo.exceptions import UserError
+
+
+class ReportTax(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_tax'
+ _description = 'Tax Report'
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+ return {
+ 'data': data['form'],
+ 'lines': self.get_lines(data.get('form')),
+ }
+
+ def _sql_from_amls_one(self):
+ sql = """SELECT "account_move_line".tax_line_id, COALESCE(SUM("account_move_line".debit-"account_move_line".credit), 0)
+ FROM %s
+ WHERE %s GROUP BY "account_move_line".tax_line_id"""
+ return sql
+
+ def _sql_from_amls_two(self):
+ sql = """SELECT r.account_tax_id, COALESCE(SUM("account_move_line".debit-"account_move_line".credit), 0)
+ FROM %s
+ INNER JOIN account_move_line_account_tax_rel r ON ("account_move_line".id = r.account_move_line_id)
+ INNER JOIN account_tax t ON (r.account_tax_id = t.id)
+ WHERE %s GROUP BY r.account_tax_id"""
+ return sql
+
+ def _compute_from_amls(self, options, taxes):
+ # compute the tax amount
+ sql = self._sql_from_amls_one()
+ tables, where_clause, where_params = self.env[
+ 'account.move.line']._query_get()
+
+ query = sql % (tables, where_clause)
+ self.env.cr.execute(query, where_params)
+ results = self.env.cr.fetchall()
+ for result in results:
+ if result[0] in taxes:
+ taxes[result[0]]['tax'] = abs(result[1])
+
+ # compute the net amount
+ sql2 = self._sql_from_amls_two()
+ query = sql2 % (tables, where_clause)
+ self.env.cr.execute(query, where_params)
+ results = self.env.cr.fetchall()
+ for result in results:
+ if result[0] in taxes:
+ taxes[result[0]]['net'] = abs(result[1])
+
+ @api.model
+ def get_lines(self, options):
+ taxes = {}
+ for tax in self.env['account.tax'].search(
+ [('type_tax_use', '!=', 'none')]):
+ if tax.children_tax_ids:
+ for child in tax.children_tax_ids:
+ if child.type_tax_use != 'none':
+ continue
+ taxes[child.id] = {'tax': 0, 'net': 0, 'name': child.name,
+ 'type': tax.type_tax_use}
+ else:
+ taxes[tax.id] = {'tax': 0, 'net': 0, 'name': tax.name,
+ 'type': tax.type_tax_use}
+ if options['date_from'] and not options['date_to']:
+ self.with_context(date_from=options['date_from'],
+ strict_range=True)._compute_from_amls(options,
+ taxes)
+ elif options['date_to'] and not options['date_from']:
+ self.with_context(date_to=options['date_to'],
+ strict_range=True)._compute_from_amls(options,
+ taxes)
+ elif options['date_from'] and options['date_to']:
+ self.with_context(date_from=options['date_from'],
+ date_to=options['date_to'],
+ strict_range=True)._compute_from_amls(options,
+ taxes)
+ else:
+ date_to = str(datetime.today().date())
+ self.with_context(date_to=date_to,
+ strict_range=True)._compute_from_amls(options,
+ taxes)
+
+ groups = dict((tp, []) for tp in ['sale', 'purchase'])
+ for tax in taxes.values():
+ if tax['tax']:
+ groups[tax['type']].append(tax)
+ return groups
diff --git a/third_party_addons/base_accounting_kit/report/report_tax_template.xml b/third_party_addons/base_accounting_kit/report/report_tax_template.xml
new file mode 100644
index 000000000..35699bcab
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_tax_template.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
Tax Report
+
+
+
+
+ Date from :
+
+
+
+
+ Date to :
+
+
+
+
+
+
+
+ Sale
+ Net
+ Tax
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/report_trial_balance.py b/third_party_addons/base_accounting_kit/report/report_trial_balance.py
new file mode 100644
index 000000000..b1dd0862f
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_trial_balance.py
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import time
+from odoo import api, models, _
+from odoo.exceptions import UserError
+
+
+class ReportTrialBalance(models.AbstractModel):
+ _name = 'report.base_accounting_kit.report_trial_balance'
+ _description = 'Trial Balance Report'
+
+ def _get_accounts(self, accounts, display_account):
+ """ compute the balance, debit and credit for the provided accounts
+ :Arguments:
+ `accounts`: list of accounts record,
+ `display_account`: it's used to display either all accounts or those accounts which balance is > 0
+ :Returns a list of dictionary of Accounts with following key and value
+ `name`: Account name,
+ `code`: Account code,
+ `credit`: total amount of credit,
+ `debit`: total amount of debit,
+ `balance`: total amount of balance,
+ """
+
+ account_result = {}
+ # Prepare sql query base on selected parameters from wizard
+ tables, where_clause, where_params = self.env[
+ 'account.move.line']._query_get()
+ tables = tables.replace('"', '')
+ if not tables:
+ tables = 'account_move_line'
+ wheres = [""]
+ if where_clause.strip():
+ wheres.append(where_clause.strip())
+ filters = " AND ".join(wheres)
+ # compute the balance, debit and credit for the provided accounts
+ request = (
+ "SELECT account_id AS id, SUM(debit) AS debit, "
+ "SUM(credit) AS credit, (SUM(debit) - SUM(credit)) "
+ "AS balance" +
+ " FROM " + tables + " WHERE account_id IN %s " +
+ filters + " GROUP BY account_id")
+ params = (tuple(accounts.ids),) + tuple(where_params)
+ self.env.cr.execute(request, params)
+ for row in self.env.cr.dictfetchall():
+ account_result[row.pop('id')] = row
+
+ account_res = []
+ for account in accounts:
+ res = dict((fn, 0.0) for fn in ['credit', 'debit', 'balance'])
+ account_company = self.env.company
+ currency = (account.currency_id and account.currency_id or
+ account_company.currency_id)
+ res['code'] = account.code
+ res['name'] = account.name
+ if account.id in account_result:
+ res['debit'] = account_result[account.id].get('debit')
+ res['credit'] = account_result[account.id].get('credit')
+ res['balance'] = account_result[account.id].get('balance')
+ if display_account == 'all':
+ account_res.append(res)
+ if display_account == 'not_zero' and not currency.is_zero(
+ res['balance']):
+ account_res.append(res)
+ if display_account == 'movement' and (
+ not currency.is_zero(res['debit']) or not currency.is_zero(
+ res['credit'])):
+ account_res.append(res)
+ return account_res
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ if not data.get('form') or not self.env.context.get('active_model'):
+ raise UserError(
+ _("Form content is missing, this report cannot be printed."))
+
+ model = self.env.context.get('active_model')
+ docs = self.env[model].browse(
+ self.env.context.get('active_ids', []))
+ display_account = data['form'].get('display_account')
+ accounts = docs if model == 'account.account' else self.env[
+ 'account.account'].search([])
+ account_res = self.with_context(
+ data['form'].get('used_context'))._get_accounts(accounts,
+ display_account)
+ return {
+ 'doc_ids': self.ids,
+ 'doc_model': model,
+ 'data': data['form'],
+ 'docs': docs,
+ 'time': time,
+ 'Accounts': account_res,
+ }
diff --git a/third_party_addons/base_accounting_kit/report/report_trial_balance_template.xml b/third_party_addons/base_accounting_kit/report/report_trial_balance_template.xml
new file mode 100644
index 000000000..e9a58f1a9
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/report_trial_balance_template.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
: Trial Balance
+
+
+
+
Display Account:
+
+
+ All accounts
+
+
+ With movements
+
+
+ With balance not equal to zero
+
+
+
+
+
+
+ Date from :
+
+
+
+
+ Date to :
+
+
+
+
+
+
Target Moves:
+
+ All
+ Entries
+
+ All
+ Posted Entries
+
+
+
+
+
+
+
+
+ Code
+ Account
+ Debit
+ Credit
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/report/res_partner_reports.xml b/third_party_addons/base_accounting_kit/report/res_partner_reports.xml
new file mode 100644
index 000000000..4d4e6d4ec
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/res_partner_reports.xml
@@ -0,0 +1,14 @@
+
+
+
+
+ Statement Report
+ res.partner
+ qweb-pdf
+ base_accounting_kit.res_partner_statement_report_template
+ base_accounting_kit.res_partner_statement_report_template
+ 'Statement Report- %s' %(object.name)
+
+ report
+
+
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/report/res_partner_templates.xml b/third_party_addons/base_accounting_kit/report/res_partner_templates.xml
new file mode 100644
index 000000000..334df5652
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/report/res_partner_templates.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
Payment Statement Report
+
+
+
+
+
+
+ Date
+ Invoice/Bill Number
+ Due Date
+ Invoices/Debit
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Amount:
+
+
+
+
+
+
+ Total Balance:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/security/ir.model.access.csv b/third_party_addons/base_accounting_kit/security/ir.model.access.csv
new file mode 100644
index 000000000..fa4383332
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/security/ir.model.access.csv
@@ -0,0 +1,49 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_financial_report_user,account_fin_rep_name_user,model_account_financial_report,account.group_account_user,1,1,1,1
+access_financial_report_manager,account_fin_rep_name_manager,model_account_financial_report,account.group_account_manager,1,1,1,1
+access_account_followup_manager,account.followup.manager,model_account_followup,account.group_account_manager,1,1,1,1
+access_account_followup_user,account.followup.user,model_account_followup,account.group_account_user,1,1,1,1
+access_followup_line,followup.line,model_followup_line,account.group_account_manager,1,1,1,1
+access_account_followup_line_user,account.followup.line.user,model_followup_line,account.group_account_user,1,1,1,1
+
+access_account_asset_category,account.asset.category,model_account_asset_category,account.group_account_user,1,0,0,0
+access_asset_modify_user,access_asset_modify_user,model_asset_modify,account.group_account_user,1,0,0,0
+access_asset_modify_manager,access_asset_modify_manager,model_asset_modify,account.group_account_manager,1,1,1,1
+access_account_asset_asset,account.asset.asset,model_account_asset_asset,account.group_account_user,1,0,0,0
+access_account_asset_category_manager,account.asset.category,model_account_asset_category,account.group_account_manager,1,1,1,1
+access_account_asset_asset_manager,account.asset.asset,model_account_asset_asset,account.group_account_manager,1,1,1,1
+access_account_asset_depreciation_line,account.asset.depreciation.line,model_account_asset_depreciation_line,account.group_account_user,1,0,0,0
+access_account_asset_depreciation_line_manager,account.asset.depreciation.line,model_account_asset_depreciation_line,account.group_account_manager,1,1,1,1
+access_asset_asset_report,asset.asset.report,model_asset_asset_report,account.group_account_user,1,0,0,0
+access_asset_asset_report_manager,asset.asset.report,model_asset_asset_report,account.group_account_manager,1,1,1,1
+access_account_asset_category_invoicing_payment,account.asset.category,model_account_asset_category,account.group_account_invoice,1,0,0,0
+access_account_asset_asset_invoicing_payment,account.asset.asset,model_account_asset_asset,account.group_account_invoice,1,0,1,0
+access_account_asset_depreciation_line_invoicing_payment,account.asset.depreciation.line,model_account_asset_depreciation_line,account.group_account_invoice,1,0,1,0
+
+access_account_aged_trial_balance,access.account.aged.trial.balance,model_account_aged_trial_balance,account.group_account_user,1,1,1,1
+access_account_account_bank_book_report,access.account.bank.book.report,model_account_bank_book_report,account.group_account_user,1,1,1,1
+access_account_cash_book_report,access.account.cash.book.report,model_account_cash_book_report,account.group_account_user,1,1,1,1
+access_account_day_book_report,access.account.day.book.report,model_account_day_book_report,account.group_account_user,1,1,1,1
+access_account_common_partner_report,access.account.common.partner.report,model_account_common_partner_report,account.group_account_user,1,1,1,1
+access_asset_depreciation_confirmation,access.asset.depreciation.confirmation,model_asset_depreciation_confirmation,account.group_account_user,1,1,1,1
+access_cash_flow_report,access.cash.flow.report,model_cash_flow_report,account.group_account_user,1,1,1,1
+access_financial_report,access.financial.report,model_financial_report,account.group_account_user,1,1,1,1
+access_report_base_accounting_kit_report_financial,access.report.base_accounting_kit.report_financial,model_report_base_accounting_kit_report_financial,account.group_account_user,1,1,1,1
+access_account_report_general_ledger,access.account.report.general.ledger,model_account_report_general_ledger,account.group_account_user,1,1,1,1
+access_account_print_journal,access.account.print.journal,model_account_print_journal,account.group_account_user,1,1,1,1
+access_account_report_partner_ledger,access.account.report.partner.ledger,model_account_report_partner_ledger,account.group_account_user,1,1,1,1
+access_account_common_account_report,access.account.common.account.report,model_account_common_account_report,account.group_account_user,1,1,1,1
+access_kit_account_tax_report,access.kit.account.tax.report,model_kit_account_tax_report,account.group_account_user,1,1,1,1
+access_account_balance_report,access.account.balance.report,model_account_balance_report,account.group_account_user,1,1,1,1
+
+access_multiple_invoice,multiple_invoice,model_multiple_invoice,account.group_account_manager,1,1,1,1
+access_multiple_invoice_layout,multiple_invoice_layout,model_multiple_invoice_layout,account.group_account_manager,1,1,1,1
+access_account_common_journal_report,account.common.journal.report,model_account_common_journal_report,account.group_account_user,1,1,1,1
+
+access_account_account_type,account.account.type,model_account_account_type,account.group_account_user,1,1,1,1
+
+access_account_lock_date,access.account.lock.date,model_account_lock_date,account.group_account_user,1,1,1,1
+access_account_recurring_entries_line,access.account.recurring.entries.line,model_account_recurring_entries_line,account.group_account_user,1,1,1,1
+access_generate_recurring_entries,generate.recurring.entries.user,model_account_recurring_payments,account.group_account_user,1,1,1,1
+
+access_import_bank_statement_user,access.import.bank.statement.user,model_import_bank_statement,base.group_user,1,1,1,1
diff --git a/third_party_addons/base_accounting_kit/security/security.xml b/third_party_addons/base_accounting_kit/security/security.xml
new file mode 100644
index 000000000..f43b7fce7
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/security/security.xml
@@ -0,0 +1,38 @@
+
+
+
+
+ Access to Accounting Dashboard
+
+
+
+ Account Asset Category multi-company
+
+
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
+
+
+
+
+ Account Asset multi-company
+
+
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
+
+
+
+
+ Accountant
+
+
+
+
+
+
+ Chief Accountant
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit1.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit1.png
new file mode 100644
index 000000000..8c75d445c
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit1.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit10.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit10.png
new file mode 100644
index 000000000..6f5eeb028
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit10.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit11.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit11.png
new file mode 100644
index 000000000..c3ac1b6e3
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit11.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit2.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit2.png
new file mode 100644
index 000000000..863b11f1d
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit2.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit3.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit3.png
new file mode 100644
index 000000000..391d4b3bb
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit3.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit4.jpg b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit4.jpg
new file mode 100644
index 000000000..33c965b1b
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit4.jpg differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit5.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit5.png
new file mode 100644
index 000000000..6d5b96683
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit5.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit6.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit6.png
new file mode 100644
index 000000000..c9d17d979
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit6.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit7.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit7.png
new file mode 100644
index 000000000..4f6eef248
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit7.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit8.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit8.png
new file mode 100644
index 000000000..6d4b8c472
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit8.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit9.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit9.png
new file mode 100644
index 000000000..8954373fc
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/accounting_kit9.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/ajmaljk.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/ajmaljk.png
new file mode 100644
index 000000000..63617cf57
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/ajmaljk.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/arrows-repeat.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/arrows-repeat.svg
new file mode 100644
index 000000000..1d7efabc5
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/arrows-repeat.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-1.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-1.png
new file mode 100644
index 000000000..c180db172
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-1.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-2.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-2.svg
new file mode 100644
index 000000000..e606d97d9
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-2.svg
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-bg.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-bg.png
new file mode 100644
index 000000000..a8238d3c0
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-bg.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-bg.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-bg.svg
new file mode 100644
index 000000000..b1378103e
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-bg.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-call.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-call.svg
new file mode 100644
index 000000000..96c687e81
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-call.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-mail.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-mail.svg
new file mode 100644
index 000000000..cbf0d158d
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-mail.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-pattern.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-pattern.svg
new file mode 100644
index 000000000..9c1c7e101
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-pattern.svg
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-promo.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-promo.svg
new file mode 100644
index 000000000..d52791b11
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/banner-promo.svg
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/blog-icon.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/blog-icon.png
new file mode 100644
index 000000000..ba4c7c366
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/blog-icon.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/blog-icon.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/blog-icon.svg
new file mode 100644
index 000000000..357cad65a
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/blog-icon.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/brand-pair.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/brand-pair.svg
new file mode 100644
index 000000000..d8db7fc1e
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/brand-pair.svg
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/check.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/check.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/chevron.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/chevron.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/close-icon.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/close-icon.svg
new file mode 100644
index 000000000..df8cce37a
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/close-icon.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/cogs.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/cogs.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/collabarate-icon.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/collabarate-icon.svg
new file mode 100644
index 000000000..dd4e10518
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/collabarate-icon.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/consultation.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/consultation.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/copy-clip.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/copy-clip.svg
new file mode 100644
index 000000000..2e8ec7ba3
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/copy-clip.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/copylink.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/copylink.svg
new file mode 100644
index 000000000..3b67f60e0
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/copylink.svg
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/cybro-logo.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/cybro-logo.png
new file mode 100644
index 000000000..ff4b78220
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/cybro-logo.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/down.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/down.svg
new file mode 100644
index 000000000..f21c36271
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/ecom-black.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/ecom-black.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/education-black.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/education-black.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/external-link-line.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/external-link-line.svg
new file mode 100644
index 000000000..bbd6a2b8a
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/external-link-line.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/faq.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/faq.png
new file mode 100644
index 000000000..4250b5b81
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/faq.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/feature-icon.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/feature-icon.svg
new file mode 100644
index 000000000..fa0ea6850
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/feature-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/feature.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/feature.png
new file mode 100644
index 000000000..ac7a785c0
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/feature.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/gear.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/gear.svg
new file mode 100644
index 000000000..0cc66b6ea
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/gear.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/hero.gif b/third_party_addons/base_accounting_kit/static/description/assets/icons/hero.gif
new file mode 100644
index 000000000..380654dfe
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/hero.gif differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/hire-odoo.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/hire-odoo.svg
new file mode 100644
index 000000000..e1ac089b0
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/hire-odoo.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/hotel-black.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/hotel-black.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/license.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/license.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/life-ring-icon.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/life-ring-icon.svg
new file mode 100644
index 000000000..3ae6e1d89
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/life-ring-icon.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/lifebuoy.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/lifebuoy.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/mail.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/mail.svg
new file mode 100644
index 000000000..1eedde695
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/mail.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/manufacturing-black.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/manufacturing-black.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/mouse-cursor.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/mouse-cursor.svg
new file mode 100644
index 000000000..081204c3a
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/mouse-cursor.svg
@@ -0,0 +1 @@
+mouse-cursor
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/notes.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/notes.png
new file mode 100644
index 000000000..ee5e95404
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/notes.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/notification icon.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/notification icon.svg
new file mode 100644
index 000000000..053189973
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/notification icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/odoo-consultancy.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/odoo-consultancy.svg
new file mode 100644
index 000000000..e05f65bde
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/odoo-consultancy.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/odoo-licencing.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/odoo-licencing.svg
new file mode 100644
index 000000000..2606c88b0
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/odoo-licencing.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/odoo-logo.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/odoo-logo.png
new file mode 100644
index 000000000..0e4d0eb5a
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/odoo-logo.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/password.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/password.svg
new file mode 100644
index 000000000..172a2effc
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/password.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/patter.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/patter.svg
new file mode 100644
index 000000000..25c9c0a8f
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/patter.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/pattern1.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/pattern1.png
new file mode 100644
index 000000000..09ab0fb2d
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/pattern1.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/pos-black.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/pos-black.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/puzzle-piece-icon.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/puzzle-piece-icon.svg
new file mode 100644
index 000000000..3e9ad9373
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/puzzle-piece-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/puzzle.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/puzzle.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/replace-icon.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/replace-icon.svg
new file mode 100644
index 000000000..d0e3a7af1
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/replace-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/restaurant-black.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/restaurant-black.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/screenshot-main.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/screenshot-main.png
new file mode 100644
index 000000000..575f8e676
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/screenshot-main.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/screenshot.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/screenshot.png
new file mode 100644
index 000000000..cef272529
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/screenshot.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/service-black.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/service-black.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/skype-fill.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/skype-fill.svg
new file mode 100644
index 000000000..c17423639
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/skype-fill.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/skype.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/skype.png
new file mode 100644
index 000000000..51b409fb3
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/skype.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/skype.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/skype.svg
new file mode 100644
index 000000000..df3dad39b
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/skype.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/star-1.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/star-1.svg
new file mode 100644
index 000000000..7e55ab162
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/star-1.svg
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/star-2.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/star-2.svg
new file mode 100644
index 000000000..5ae9f507a
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/star-2.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/support.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/support.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/test-1 - Copy.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/test-1 - Copy.png
new file mode 100644
index 000000000..f6a902663
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/test-1 - Copy.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/test-1.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/test-1.png
new file mode 100644
index 000000000..0908add2b
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/test-1.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/test-2.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/test-2.png
new file mode 100644
index 000000000..4671fe91e
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/test-2.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/trading-black.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/trading-black.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/training.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/training.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/translate.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/translate.svg
new file mode 100644
index 000000000..af9c8a1aa
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/translate.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/update.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/update.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/user.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/user.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/user.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/user.svg
new file mode 100644
index 000000000..edc53c44e
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/user.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/video.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/video.png
new file mode 100644
index 000000000..576705b17
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/video.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/whatsapp.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/whatsapp.svg
new file mode 100644
index 000000000..bba9ca395
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/whatsapp.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/wrench-icon.svg b/third_party_addons/base_accounting_kit/static/description/assets/icons/wrench-icon.svg
new file mode 100644
index 000000000..174b5a465
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/icons/wrench-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/wrench.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/wrench.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/icons/youtube-icon.png b/third_party_addons/base_accounting_kit/static/description/assets/icons/youtube-icon.png
new file mode 100644
index 000000000..f206560dc
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/icons/youtube-icon.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/modules/1.gif b/third_party_addons/base_accounting_kit/static/description/assets/modules/1.gif
new file mode 100644
index 000000000..dc180280d
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/modules/1.gif differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/modules/2.jpg b/third_party_addons/base_accounting_kit/static/description/assets/modules/2.jpg
new file mode 100644
index 000000000..662cadcc3
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/modules/2.jpg differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/modules/3.jpg b/third_party_addons/base_accounting_kit/static/description/assets/modules/3.jpg
new file mode 100644
index 000000000..717a00443
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/modules/3.jpg differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/modules/4.png b/third_party_addons/base_accounting_kit/static/description/assets/modules/4.png
new file mode 100644
index 000000000..00ebf54ad
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/modules/4.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/modules/5.jpg b/third_party_addons/base_accounting_kit/static/description/assets/modules/5.jpg
new file mode 100644
index 000000000..7c67e2eec
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/modules/5.jpg differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/modules/6.gif b/third_party_addons/base_accounting_kit/static/description/assets/modules/6.gif
new file mode 100644
index 000000000..a35ece8df
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/modules/6.gif differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/001.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/001.png
new file mode 100644
index 000000000..dcae97257
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/001.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/0010.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/0010.png
new file mode 100644
index 000000000..dce4511a5
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/0010.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/0011.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/0011.png
new file mode 100644
index 000000000..b612a8945
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/0011.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/0012.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/0012.png
new file mode 100644
index 000000000..76bbc4a87
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/0012.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/002.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/002.png
new file mode 100644
index 000000000..dc901b212
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/002.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/003.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/003.png
new file mode 100644
index 000000000..79b626e05
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/003.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/004.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/004.png
new file mode 100644
index 000000000..3054b390c
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/004.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/005.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/005.png
new file mode 100644
index 000000000..1486c40be
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/005.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/006.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/006.png
new file mode 100644
index 000000000..b538d9944
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/006.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/008.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/008.png
new file mode 100644
index 000000000..20c1424a1
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/008.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/009.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/009.png
new file mode 100644
index 000000000..f348f86d0
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/009.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/1.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/1.png
new file mode 100644
index 000000000..7b631de73
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/1.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/10.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/10.png
new file mode 100644
index 000000000..579a7537b
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/10.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/19.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/19.png
new file mode 100644
index 000000000..7d5cab6e8
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/19.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/2.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/2.png
new file mode 100644
index 000000000..8a9e1afa2
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/2.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/3.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/3.png
new file mode 100644
index 000000000..3ad896530
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/3.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/4.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/4.png
new file mode 100644
index 000000000..9b7fe4d07
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/4.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/5.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/5.png
new file mode 100644
index 000000000..1a6eb75f6
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/5.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/6.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/6.png
new file mode 100644
index 000000000..a4e39fbbc
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/6.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/7.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/7.png
new file mode 100644
index 000000000..98305c018
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/7.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/8.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/8.png
new file mode 100644
index 000000000..a3717cdb2
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/8.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/9.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/9.png
new file mode 100644
index 000000000..09033cc12
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/9.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/aged.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/aged.png
new file mode 100644
index 000000000..bc340f555
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/aged.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/bank_statements.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/bank_statements.png
new file mode 100644
index 000000000..516db83cc
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/bank_statements.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/customer_statement.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/customer_statement.png
new file mode 100644
index 000000000..03edfb53a
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/customer_statement.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/customer_statement_excel.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/customer_statement_excel.png
new file mode 100644
index 000000000..ae7f816e6
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/customer_statement_excel.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/customer_statement_pdf.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/customer_statement_pdf.png
new file mode 100644
index 000000000..09118ce97
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/customer_statement_pdf.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/hero.gif b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..38deff2b3
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/hero.gif differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/hero_old.gif b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/hero_old.gif
new file mode 100644
index 000000000..86b1342ed
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/hero_old.gif differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/import_button.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/import_button.png
new file mode 100644
index 000000000..12529f80f
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/import_button.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/import_wizard.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/import_wizard.png
new file mode 100644
index 000000000..5609c94d6
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/import_wizard.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/loc3.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/loc3.png
new file mode 100644
index 000000000..819a348b9
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/loc3.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/loc_1.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/loc_1.png
new file mode 100644
index 000000000..eb3f26ee4
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/loc_1.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/loc_2.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/loc_2.png
new file mode 100644
index 000000000..632937a85
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/loc_2.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/rec_1.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/rec_1.png
new file mode 100644
index 000000000..bd2d203a3
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/rec_1.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/rec_2.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/rec_2.png
new file mode 100644
index 000000000..ed66aeed9
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/rec_2.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/rec_3.png b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/rec_3.png
new file mode 100644
index 000000000..a95d7bedd
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/rec_3.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.csv b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.csv
new file mode 100644
index 000000000..04ca33a35
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.csv
@@ -0,0 +1,3 @@
+Account name,Amount,Amount in Currency,Date,Partner,Running Balance
+Bank-2023-04-14/1,2000,,2023-04-14,Deco Addict,10044.87
+Bank-2023-04-21/2,1000,,2023-03-20,Ready Mat,10044.8
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.ofx b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.ofx
new file mode 100644
index 000000000..d246b13e5
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.ofx
@@ -0,0 +1,65 @@
+OFXHEADER:100
+DATA:OFXSGML
+VERSION:102
+SECURITY:NONE
+ENCODING:USASCII
+CHARSET:1252
+COMPRESSION:NONE
+OLDFILEUID:NONE
+NEWFILEUID:NONE
+
+
+
+
+
+ 0
+ INFO
+
+ 20230419
+ ENG
+
+ BANK123
+
+
+
+
+
+ 1234567890
+
+ 0
+ INFO
+
+
+ USD
+
+ Bank-2023-04-14/1
+ 1234567890
+ CHECKING
+
+
+ 20220101
+ 20220131
+
+ DEBIT
+ 20230419
+ -3000.00
+ 1234567890-20220102-1
+ Deco Addict
+
+
+ CREDIT
+ 20220115
+ 1000.00
+ 1234567890-20220115-1
+ Ready Mat
+
+
+
+ 10044.87
+ 20220131
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.qif b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.qif
new file mode 100644
index 000000000..837d2fc4f
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.qif
@@ -0,0 +1,15 @@
+!Type:Bank
+D14/04/2023
+T2000.00
+PBank-2023-02-11/1
+^
+!Type:Bank
+D09/04/2023
+T-500.00
+PBank-2023-04-09/2
+^
+!Type:Bank
+D19/06/2022
+T1000.00
+PBank-2023-04-21/3
+^
diff --git a/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.xlsx b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.xlsx
new file mode 100644
index 000000000..56af415c8
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/assets/screenshots/statement.xlsx differ
diff --git a/third_party_addons/base_accounting_kit/static/description/banner.jpg b/third_party_addons/base_accounting_kit/static/description/banner.jpg
new file mode 100644
index 000000000..3cb15fe01
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/banner.jpg differ
diff --git a/third_party_addons/base_accounting_kit/static/description/icon.png b/third_party_addons/base_accounting_kit/static/description/icon.png
new file mode 100644
index 000000000..093211048
Binary files /dev/null and b/third_party_addons/base_accounting_kit/static/description/icon.png differ
diff --git a/third_party_addons/base_accounting_kit/static/description/index.html b/third_party_addons/base_accounting_kit/static/description/index.html
new file mode 100644
index 000000000..2edf592a3
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/description/index.html
@@ -0,0 +1,2223 @@
+
+
+
+
+
+ Odoo 18 Full Accounting Kit for Community
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Supports:
+
+ Community
+
+
+
+
+
+
+
+
+
+
Availability:
+
+ On Premise
+
+
+ Odoo Online
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Odoo 18 Full Accounting Kit for Community
+
+
+ A Full-Fledged Accounting kit For Every Organization.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Blog and Video Details
+
+
+
+
+
+
+
+
Read Blog
+
Read Our Detailed Blog
+
+
+
+
+
+ https://www.cybrosys.com/blog/what-are-the-key-features-of-odoo-18-full-accounting-kit-for-community
+
+
+
+
+
+
+
+
+
+
Video Tutorial
+
Watch Detailed Demo on Youtube
+
Watch Demo
+
+
+
+
+
+
+
+
+
+
+
+ This module uses some external python dependencies :
+ openpyxl, ofxparse and qifparse. Before
+ installing the module install the python
+ package
+ first. The required python packages can be installed using the
+ following commands.
+
+
+ pip
+ install openpyxl
+ pip
+ install ofxparse
+ pip
+ install qifparse
+
+
+ If you are running Odoo in a Docker environment, you can safely install the qifparse package by following the steps below:
+
+ 1. Create a custom Dockerfile (e.g. Dockerfile.odoo) with the following content:
+ FROM odoo:18.0
+
+ USER root
+
+ # Install qifparse to a custom directory
+ RUN pip3 install --target=/opt/qiflibs qifparse
+
+ # Add that directory to PYTHONPATH
+ ENV PYTHONPATH="/opt/qiflibs:$PYTHONPATH"
+
+ USER odoo
+ 2.Update your docker-compose.yml to use this custom Dockerfile for the web service:
+ services:
+ web:
+ build:
+ context: .
+ dockerfile: Dockerfile.odoo
+
+ 3. Rebuild and restart the containers:
+ docker-compose build
+ docker-compose up -d
+
+
+
+
+
+
+
+
+
+
+ Demo Database for Accounting Kit
+
+
+
+
+
+
+
+
Log in
+
+ demo
+
+
+
+
Password
+
+ demo
+
+
+
+
+
+
+
+
+
+
+
+
Odoo 18 Full Accounting Kit for Community
+
+ Are you ready to make your business more
+ organized?
+ Improve now!
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEY HIGHLIGHTS
+
+
+
+
+
+
+
+
+
+ All Financial Reports
+
+ Balance Sheet, Profit and Loss, Partner Ledger,General Ledger, Trial Balance,
+ Tax Reports, Journals Audit Reports, etc
+
+
+
+
+
+
+
+
+
+
+ Manage Customer Follow-Ups.
+
+ The Customer follow-up menu will be provided the Activities.
+
+
+
+
+
+
+
+
+
+
+ Multiple Invoice Copies Option
+
+ We can generate multiple Invoices copies.
+
+
+
+
+
+
+
+
+
+
+
+ Accounting Lock Dates.
+
+ Easily set accounting closing dates
+
+
+
+
+
+
+
+
+
+
+ Customer Credit Limit.
+
+ Option for adding the Customer Credit Limit.
+
+
+
+
+
+
+
+
+
+
+ Asset Management System.
+
+ We can manage the Asset and the related types.
+
+
+
+
+
+
+
+
+
+
+ Translations
+
+ Different Translations Available
+ Eg : Arabic, German, Chinese, etc
+
+
+
+
+
+
+
+
+
+
+ PDC Management.
+
+ In the Register Payment wizard we can add the
+ PDC to the recipient's bank account.
+
+
+
+
+
+
+
+
+
+
+ Bank Statement CSV File Format.
+
+ We can import Bank Statement in CSV file.
+
+
+
+
+
+
+
+
+
+
+ Bank Statement XLSX File Format.
+
+ We can import Bank Statement in XLSX File Format.
+
+
+
+
+
+
+
+
+
+
+ Bank Statement OFX File Format.
+
+ We can import Bank Statement in OFX File Format.
+
+
+
+
+
+
+
+
+
+
+ Bank Statement QIF File Format.
+
+ We can import Bank Statement in QIF File Format.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create
+
+ Assets.
+
+
+
+
+ Can Create Assets from Accounting > Accounting > Assets > New.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The Asset details and Depreciation Board
+ are displayed in the asset model.
+
+
+
+
+ Can see the all Related data in the Asset model, It helps to
+ calculate the depreciation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Asset
+
+ Categories.
+
+
+
+
+ Can Create Asset categories from Accounting > Configuration >
+ Asset Types > New option.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Asset
+
+
+ Types
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create Asset
+
+
+ from vendor bill.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Manage
+ Post dated checks.
+
+
+
+
+ Can manage the PDC in the Register Payment method.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reconciliation
+ Widget.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lock
+ Dates.
+
+
+
+
+
+
+
+
+
+
+
+
+ Create recurring templates from
+
+ Accounting > Configuration > Recurring Templates.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Manage Customer Follow-ups from
+
+ Accounting > Configuration > Management > Follow-up Levels.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Manage Customer Follow-ups from
+
+ Accounting > Customers > Follow-up Reports.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reporting menu will gives the
+
+
+ all Accounting Reports.
+
+
+
+
+ Can see menus for getting the Account related Reports. like
+ -Profit and Loss, Balance Sheet , Cash Flow, Bank Book, Cash
+ Book , Day Book etc
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Profit and Loss
+ For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balance Sheet -
+ For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cash Flow -
+ For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bank Book -
+ For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cash Book
+ - For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Day Book -
+ For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Partner Balance
+ - For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Partner Ledger
+ - For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Invoice Analysis
+ - For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ General Ledger
+ - For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Trial Balance -
+ For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tax Report
+ - For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Journal Audit
+ - For the Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A quick option to import bank statement.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A wizard that allows user to upload file.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ After importing the file user can view the statements that imported
+
+
+
+
+
+
+ After importing the file user can view the statements that imported.
+ (The example format for csv, xlsx, ofx and qif are added in screenshots
+ folder in the module.).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A quick option to access Customer Statements in Contacts
+
+
+
+
+
+
+ View and manage all customer statements directly from the contact’s form view.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Payment Statement Report
+
+
+
+
+
+
+ Generate, download, and email customer statements as PDF reports with button clicks directly from the contact’s form view
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Payment Statement Report Excel
+
+
+
+
+
+
+ Generate, download, and email customer statements as Excel reports with button clicks directly from the contact’s form view
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Multiple Invoice Copies Option
+
+
+
+
+
+
+
+
+
+
+
+ Manage Customer Follow-Ups.
+
+
+
+
+
+
+
+
+
+
+ Customer Credit Limit.
+
+
+
+
+
+
+
+
+
+
+
+ Asset Management System.
+
+
+
+
+
+
+
+
+
+
+
+
+ Accounting Report.
+
+
+
+
+
+
+
+
+
+
+
+ PDC Management.
+
+
+
+
+
+
+
+
+
+
+
+ Reconciliation Widget.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ You can manage PDCs by adding them to the
+ recipient's bank account in the Register Payment
+ wizard.
+
+
+
+
+
+
+
+
+ Yes, this module is specifically designed to work
+ with Odoo 18 Community Edition and not for odoo 18
+ enterprise edition.
+
+
+
+
+
+
+
+
+ It provides a customer follow-up menu that manages
+ follow-up activities directly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Latest Release 18.0.5.0.6
+
+
+ 13th Oct, 2025
+
+
+
+
+
+
+
+
+ Added Customer Statement feature.
+
+
+
+
+
+
+
+
+
+
+
+ Latest Release 18.0.2.0.4
+
+
+ 21nd April, 2025
+
+
+
+
+
+
+
+
+ Fixed qifparse external dependency (python) issue.
+
+
+
+
+
+
+
+
+
+
+
+ Latest Release 18.0.1.0.1
+
+
+ 22nd October, 2024
+
+
+
+
+
+
+
+
+ Added reconciliation widget and lock date
+
+
+
+
+
+
+
+
+
+
+
+ Latest Release 18.0.1.0.0
+
+
+ 26th September, 2024
+
+
+
+
+
+
+
+
+
+
+
+ Related Modules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/src/js/KanbanController.js b/third_party_addons/base_accounting_kit/static/src/js/KanbanController.js
new file mode 100644
index 000000000..37acd5c3f
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/src/js/KanbanController.js
@@ -0,0 +1,129 @@
+/** @odoo-module **/
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { View } from "@web/views/view";
+import { kanbanView } from "@web/views/kanban/kanban_view";
+import { KanbanController } from "@web/views/kanban/kanban_controller";
+import { KanbanRenderer } from "@web/views/kanban/kanban_renderer";
+import { KanbanRecord } from "@web/views/kanban/kanban_record";
+const { useState } = owl;
+
+class CustomKanbanController extends KanbanController {
+ async setup(){
+ super.setup()
+ this.state = useState({
+ selectedStLineId: null,
+ linesWidgetData: null,
+ moveLineData: null,
+ });
+ this.action = useService("action")
+ this.orm = useService("orm")
+ const o_bank_reconcile_status_buttons_aside_left = document.getElementsByClassName("o_bank_reconcile_status_buttons_aside_left")
+ }
+
+ async openRecord(record, mode) {
+ this.state.moveLineData = null;
+ this.state.viewID = await this.orm.call('res.config.settings', 'get_view_id', [])
+ await this.mountStLine(record.resId);
+
+ const statementRecord = document.querySelectorAll('.o_bank_reconcile_st_line_kanban_card');
+ statementRecord.forEach(line => {
+ line.addEventListener('click', async (event) => {
+ // Remove 'div-added' class and its child divs from all elements
+ statementRecord.forEach(item => {
+ item.classList.remove('div-added');
+ const childDiv = item.querySelector('.new-div');
+ if (childDiv) {
+ item.removeChild(childDiv);
+ }
+ });
+ // Add 'div-added' class and new div to the clicked record
+ if (!line.classList.contains('div-added')) {
+ const newDiv = document.createElement('div');
+ newDiv.classList.add('new-div'); // Add a class to identify the new div
+ line.classList.add('div-added');
+ line.appendChild(newDiv);
+ }
+ });
+ });
+ }
+
+ async mountStLine(stLineId){
+ const currentStLineId = this.state.selectedStLineId;
+ if (currentStLineId !== stLineId) {
+ this.state.selectedStLineId = stLineId; // Update selected ST Line ID
+ try {
+ const data = await this.orm.call("account.bank.statement.line", "get_statement_line", [stLineId]);
+ this.state.linesWidgetData = data;
+ } catch (error) {
+ console.error("Error fetching statement line data:", error);
+ }
+ try {
+ const data = await this.orm.call('account.bank.statement.line', 'read', [[stLineId]], { fields: ['lines_widget_json'] });
+ if (data && data.length > 0 && data[0].lines_widget_json) {
+ const parsedData = JSON.parse(data[0].lines_widget_json);
+ const moveIdMatch = parsedData.move_id.match(/\((\d+),\)/);
+ parsedData.numeric_move_id = moveIdMatch ? parseInt(moveIdMatch[1]) : null;
+ this.state.moveLineData = parsedData;
+ } else {
+ console.warn("No lines_widget_json found for selected statement line.");
+ }
+ } catch (error) {
+ console.error("Error reading statement line:", error);
+ }
+ }
+ }
+
+ get prepareFormPropsBankReconcile(){
+ if (!this.state.selectedStLineId) {
+ return null; // or some default props
+ }
+ return {
+ type: "form",
+ viewId: this.state.viewID,
+ context: {
+ default_st_line_id: this.state.selectedStLineId,
+ default_lines_widget: this.state.linesWidgetData || null,
+ default_move_line: this.state.moveLineData || null,
+ },
+ display: { controlPanel: false, noBreadcrumbs: true},
+ mode: "edit",
+ resModel: "account.bank.statement.line",
+ resId: this.state.selectedStLineId,
+ }
+ }
+}
+CustomKanbanController.components = {
+ ...CustomKanbanController.components, View }
+CustomKanbanController.template = "base_accounting_kit.CustomKanbanView";
+
+export class BankCustomKanbanRenderer extends KanbanRenderer {
+ setup(){
+ super.setup();
+ }
+}
+export class BankReconcileKanbanRecord extends KanbanRecord {
+ setup(){
+ super.setup();
+ this.state=useState({
+ Statement_record:{}
+ })
+ }
+}
+BankReconcileKanbanRecord.template = "base_accounting_kit.BankReconcileKanbanRecord";
+
+BankCustomKanbanRenderer.components = {
+ ...KanbanRenderer.components,
+ KanbanRecord: BankReconcileKanbanRecord,
+}
+BankCustomKanbanRenderer.template = "base_accounting_kit.BankRecKanbanRenderer";
+
+export const customKanbanView = {
+ ...kanbanView,
+ Controller: CustomKanbanController,
+ Renderer: BankCustomKanbanRenderer,
+ searchMenuTypes: ["filter"],
+};
+
+// Register it to the views registry
+registry.category("views").add("custom_kanban", customKanbanView);
diff --git a/third_party_addons/base_accounting_kit/static/src/js/ListController.js b/third_party_addons/base_accounting_kit/static/src/js/ListController.js
new file mode 100644
index 000000000..da17c06f3
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/src/js/ListController.js
@@ -0,0 +1,168 @@
+/** @odoo-module **/
+import { registry } from '@web/core/registry';
+import { ListController } from "@web/views/list/list_controller";
+import { listView } from "@web/views/list/list_view";
+import { useState, useRef } from "@odoo/owl";
+import { useListener, useService} from "@web/core/utils/hooks";
+export class AccountMoveLineListController extends ListController {
+ constructor() {
+ super(...arguments);
+ this.resIdList = [];
+ }
+ setup(){
+ super.setup();
+ this.state = useState({ selectedRecordId: null ,
+ selectedRecordIds: [],});
+ this.action = useService("action")
+ this.orm = useService("orm")
+ }
+ async openRecord(record) {
+ const kanban_row = this.__owl__.bdom.parentEl.ownerDocument.querySelector(`tr[data-id]`);
+ const data_id = parseInt(kanban_row.getAttribute('data-id'))
+ var data = await this.orm.call('account.bank.statement.line',
+ 'update_match_row_data',
+ [record.resId])
+ await this.orm.call('account.bank.statement.line', 'write', [[data_id], { lines_widget_json: JSON.stringify(data) }]);
+ const rowSelector = this.__owl__.bdom.parentEl.querySelector(`tr[data-id='${record.id}']`)
+ if (!record.clickCount) {
+ record.clickCount = true
+ rowSelector.style.backgroundColor = "#d1ecf1";
+ } else {
+ // Set the default background color here
+ record.clickCount = false;
+ rowSelector.style.backgroundColor = "white";
+ }
+
+ const currencySymbol = await this.orm.call('res.currency', 'read',[record.data.currency_id[0]])
+ const mainKanbanDiv = this.__owl__.bdom.parentEl.ownerDocument.querySelector('#base_accounting_reconcile')
+ const existingRow = this.__owl__.bdom.parentEl.ownerDocument.querySelector(`tr[data-resId="${record.resId}"]`)
+ const stateLineRow = this.__owl__.bdom.parentEl.ownerDocument.querySelector('.statement_row')
+ if (stateLineRow){
+ const dataIdValue = stateLineRow.getAttribute('data-id');
+ if(dataIdValue == record.resId){
+ mainKanbanDiv.removeChild(stateLineRow);
+ }
+ }
+ if (existingRow) {
+ mainKanbanDiv.removeChild(existingRow);
+ } else {
+ // If the row doesn't exist, create and add it
+ const dateObject = new Date(record.data.date);
+ const year = dateObject.getFullYear();
+ const month = String(dateObject.getMonth() + 1).padStart(2, '0'); // Months are 0-indexed
+ const day = String(dateObject.getDate()).padStart(2, '0');
+ const formattedDate = `${year}-${month}-${day}`;
+ let amount = parseFloat(record.data.amount_residual);
+ let debitColumn = '';
+ let creditColumn = '';
+ let partnerName = '';
+ let moveId = '';
+
+ // Check if partner_id exists and is not empty
+ if (record.data.partner_id && record.data.partner_id[1]) {
+ partnerName = record.data.partner_id[1];
+ }
+ if (record.data.move_id && record.data.move_id[1]) {
+ moveId = `
${record.data.move_id[1]} `;
+ }
+
+
+ if (amount < 0) {
+ debitColumn = `
${currencySymbol[0].symbol} ${-amount} `;
+ } else {
+ creditColumn = `
${currencySymbol[0].symbol} ${amount} `;
+ }
+
+ const newRow = document.createElement('tr');
+ newRow.setAttribute('data-resId', record.resId); // Set a unique identifier for the row
+ if (debitColumn !== '') {
+ newRow.innerHTML = `
${record.data.account_id[1]}
+ ${moveId} : ${record.data.name}
+
${partnerName}
+
${formattedDate}
+ ${debitColumn}
+
+
+
+ `;
+
+ } else if (creditColumn !== '') {
+ newRow.innerHTML = `
${record.data.account_id[1]}
+ ${moveId} : ${record.data.name}
+
${partnerName}
+
${formattedDate}
+
+ ${creditColumn}
+
+
+ `;
+ }
+ newRow.addEventListener('click', async () => {
+ const allRows = this.__owl__.bdom.parentEl.ownerDocument.querySelectorAll('tr[data-resId]');
+ allRows.forEach(row => {
+ row.classList.remove('selected-row');
+ });
+ newRow.classList.add('selected-row');
+ if (record.resId){
+ const manualOpsTab = this.__owl__.bdom.parentEl.ownerDocument.querySelector('[name="manual_operations_tab"]');
+ if (manualOpsTab) {
+ manualOpsTab.click();
+ const accountField = this.__owl__.bdom.parentEl.ownerDocument.querySelector('[name="account_id"]');
+ accountField.value = record.data.account_id[1];
+ }
+ }
+ });
+ // Append the new row to the mainKanbanDiv
+ mainKanbanDiv.appendChild(newRow);
+ const deleteButtons = this.__owl__.bdom.parentEl.ownerDocument.querySelectorAll('.fa-trash-o');
+ deleteButtons.forEach(button => {
+ button.addEventListener('click', async (event) => {
+ const resId = event.target.getAttribute('data-resId');
+ await this.removeRecord(resId);
+ });
+ });
+ const moveLine = this.__owl__.bdom.parentEl.ownerDocument.querySelectorAll('#moveLine');
+ moveLine.forEach(line => {
+ line.addEventListener('click',async (event) => {
+ const moveId = event.target.getAttribute('data-moveId');
+ await this.ShowMoveForm(moveId);
+ });
+ });
+ }
+ this.updateResIdList();
+ }
+ async removeRecord(resId){
+ const mainKanbanDiv = this.__owl__.bdom.parentEl.ownerDocument.querySelector('#base_accounting_reconcile');
+ const rowToRemove = this.__owl__.bdom.parentEl.ownerDocument.querySelector(`tr[data-resId="${resId}"]`);
+ if (rowToRemove) {
+ mainKanbanDiv.removeChild(rowToRemove);
+ this.updateResIdList();
+ }
+ }
+ async ShowMoveForm(moveId) {
+ // Convert moveId from string to integer
+ const moveIdInt = parseInt(moveId, 10);
+ // Check if the conversion is successful
+ if (!isNaN(moveIdInt)) {
+ this.action.doAction({
+ type: 'ir.actions.act_window',
+ res_model: 'account.move',
+ res_id: moveIdInt,
+ views: [[false, "form"]],
+ target: 'current',
+ });
+ }
+ }
+ updateResIdList() {
+ // Get all resId values from the current rows and update the resIdList array
+ const rows = this.__owl__.bdom.parentEl.ownerDocument.querySelectorAll('tr[data-resId]');
+ this.resIdList = Array.from(rows).map(row => parseInt(row.getAttribute('data-resId'), 10));
+ }
+
+}
+AccountMoveLineListController.template = 'base_accounting_kit.AccountMoveLineListController';
+export const AccountMoveListView = {
+ ...listView,
+ Controller: AccountMoveLineListController,
+};
+registry.category('views').add('account_move_line_list_controller', AccountMoveListView);
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/static/src/js/action_manager.js b/third_party_addons/base_accounting_kit/static/src/js/action_manager.js
new file mode 100644
index 000000000..1561907b8
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/src/js/action_manager.js
@@ -0,0 +1,16 @@
+/** @odoo-module*/
+import {registry} from "@web/core/registry";
+import {download} from "@web/core/network/download";
+import { BlockUI, unblockUI } from "@web/core/ui/block_ui";
+// Action manager for xlsx report
+registry.category('ir.actions.report handlers').add('xlsx', async (action) => {
+ if (action.report_type === 'xlsx'){
+ BlockUI;
+ await download({
+ url : '/xlsx_report',
+ data : action.data,
+ error : (error) => self.call('crash_manager', 'rpc_error', error),
+ complete: () => unblockUI,
+ });
+ }
+})
diff --git a/third_party_addons/base_accounting_kit/static/src/js/bank_reconcile_form_lines_widget.js b/third_party_addons/base_accounting_kit/static/src/js/bank_reconcile_form_lines_widget.js
new file mode 100644
index 000000000..48054237e
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/src/js/bank_reconcile_form_lines_widget.js
@@ -0,0 +1,79 @@
+/** @odoo-module **/
+import { registry } from '@web/core/registry';
+import { useService } from "@web/core/utils/hooks";
+import { _t } from "@web/core/l10n/translation";
+const { Component, useState, useExternalListener } = owl;
+export class BankReconcileFormLinesWidget extends Component {
+ setup(){
+ super.setup();
+ this.state = useState({statementLineResult: null,
+ MoveLineResult:null});
+ this.action = useService("action")
+ this.orm = useService("orm")
+ }
+ range(n){
+ return[...Array(Math.max(n,0)).keys()];
+ }
+ get record(){
+ return this.props.record;
+ }
+ async mountStatementLine(ev){
+ const manualOpsTab = document.querySelector('[name="manual_operations_tab"]');
+ if (manualOpsTab) {
+ manualOpsTab.click();
+ }
+ }
+ async onclickLink(ev){
+ const id = ev.currentTarget.dataset.id;
+ if (id) {
+ this.action.doAction({
+ type: 'ir.actions.act_window',
+ res_model: 'account.move',
+ res_id: parseInt(id),
+ views: [[false, "form"]],
+ target: 'current',
+ });
+ }
+ }
+ async removeRecord(ev){
+ ev.preventDefault();
+ var button = ev.currentTarget;
+ var row = button.closest('tr');
+ var firstRow = document.querySelector('.o_data_row:first-child');
+ var data_id = firstRow.dataset.id;
+ try {
+ await this.orm.call('account.bank.statement.line', 'write', [[parseInt(data_id)], {'lines_widget_json': null}]);
+ // Update the UI or perform any other actions as needed
+ } catch (error) {
+ console.error('Error removing lines_widget_json:', error);
+ // Handle the error as needed
+ }
+ row.remove();
+ }
+ getRenderValues(){
+ var self=this;
+ let data = this.props.record.context
+ this.orm.call('account.bank.statement.line', 'update_rowdata', [this.props.record.data.id])
+ let columns=[
+ ["account",_t("Account")],
+ ["partner",_t("Partner")],
+ ["date",_t("Date")],
+ ];
+ if(data.display_analytic_account_column){
+ columns.push(["analytic_account", _t("Analytic Account")]);
+ }
+ if(data.display_multi_currency_column){
+ columns.push(["amount_currency", _t("Amount in Currency")], ["currency", _t("Currency")]);
+ }
+ if(data.display_taxes_column){
+ columns.push(["taxes", _t("Taxes")]);
+ }
+ columns.push(["debit", _t("Debit")], ["credit", _t("Credit")], ["__trash", ""]);
+ return {...data,columns:columns}
+ }
+}
+BankReconcileFormLinesWidget.template = 'base_accounting_kit.bank_reconcile_widget_lines_widget';
+export const FormLines = {
+ component: BankReconcileFormLinesWidget
+}
+registry.category("fields").add('bank_reconcile_widget_lines_widget', FormLines)
diff --git a/third_party_addons/base_accounting_kit/static/src/js/bank_reconcile_form_list_widget.js b/third_party_addons/base_accounting_kit/static/src/js/bank_reconcile_form_list_widget.js
new file mode 100644
index 000000000..63d527ae6
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/src/js/bank_reconcile_form_list_widget.js
@@ -0,0 +1,124 @@
+/** @odoo-module **/
+import { registry } from '@web/core/registry';
+import { standardWidgetProps } from "@web/views/widgets/standard_widget_props";
+import { View } from "@web/views/view";
+const { Component, useSubEnv } = owl;
+
+class FormListView extends Component {
+ setup(){
+ useSubEnv({
+ config:{},
+ });
+ }
+
+ get bankReconcileListViewProps(){
+ return{
+ type:'list',
+ display:{
+ controlPanel:{
+ "top-left":false,
+ "bottom-left":false,
+ }
+ },
+ resModel:this.props.resModel,
+ searchMenuTypes:["filter"],
+ allowSelectors:false,
+ searchViewId:false,
+ searchViewArch: `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ searchViewFields: {
+ name: {
+ name:"name",
+ string:"Journal Item",
+ type:"char",
+ store: true,
+ sortable: true,
+ searchable: true,
+ },
+ date: {
+ name: "date",
+ string: "Date",
+ type: "date",
+ store: true,
+ sortable: true,
+ searchable: true,
+ },
+ journal_id: {
+ name: "journal_id",
+ string: "Journal",
+ type: "many2one",
+ store: true,
+ sortable: true,
+ searchable: true,
+ },
+ account_id: {
+ name: "account_id",
+ string: "Account",
+ type: "many2one",
+ store: true,
+ sortable: true,
+ searchable: true,
+ },
+ partner_id: {
+ name: "partner_id",
+ string: "Partner",
+ type: "many2one",
+ store: true,
+ sortable: true,
+ searchable: true,
+ group_by:"partner_id",
+ },
+ currency_id: {
+ name: "currency_id",
+ string: "Currency",
+ type: "many2one",
+ store: true,
+ sortable: true,
+ searchable: true,
+ },
+ move_id: {
+ name:"move_id",
+ string:"Journal Entry",
+ type:"many2one",
+ store:true,
+ sortable:true,
+ searchable:true,
+ filter_domain:"['|',('move_id.name','ilike',self),('move_id.ref','ilike',self)]",
+ },
+ },
+ context:{
+ list_view_ref:"base_accounting_kit.account_move_line_view_tree",
+ }
+ }
+ }
+
+}
+FormListView.template = "base_accounting_kit.FormListView";
+FormListView.components = { View };
+FormListView.props = {
+ ...standardWidgetProps,
+ resModel: { type: String },
+};
+export const formListView = {
+ component: FormListView,
+ extractProps: ({ attrs }) => ({
+ resModel: attrs.resModel,
+ }),
+};
+registry.category("view_widgets").add("form_list_view", formListView);
diff --git a/third_party_addons/base_accounting_kit/static/src/scss/bank_rec_widget.css b/third_party_addons/base_accounting_kit/static/src/scss/bank_rec_widget.css
new file mode 100644
index 000000000..7c451545c
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/src/scss/bank_rec_widget.css
@@ -0,0 +1,7 @@
+.kanbanwidth{
+ width:100px !important;
+}
+
+.o_custom_kanban_view .o_content{
+ display:flex;
+}
diff --git a/third_party_addons/base_accounting_kit/static/src/scss/style.scss b/third_party_addons/base_accounting_kit/static/src/scss/style.scss
new file mode 100644
index 000000000..66d797bc2
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/src/scss/style.scss
@@ -0,0 +1,1277 @@
+.accounts-dashboard-wrap svg.ct-chart-bar,
+.accounts-dashboard-wrap svg.ct-chart-line {
+ overflow: visible;
+}
+
+.accounts-dashboard-wrap .ct-label.ct-vertical.ct-start {
+ color: black !important;
+}
+
+.accounts-dashboard-wrap .ct-label.ct-label.ct-horizontal.ct-end {
+ position: relative;
+ justify-content: flex-end;
+ text-align: right;
+ transform-origin: 100%;
+ color: black;
+ transform: translate(-100%) rotate(-45deg);
+ white-space: nowrap;
+}
+.bold_date {
+ font-weight: bold;
+}
+
+
+
+.accounts-dashboard-wrap .ct-series-e .ct-slice-pie {
+ fill: #7b2138 !important;
+}
+
+.accounts-dashboard-wrap .ct-series-a .ct-bar,
+.accounts-dashboard-wrap .ct-series-a .ct-line,
+.accounts-dashboard-wrap .ct-series-a .ct-point,
+.accounts-dashboard-wrap .ct-series-a .ct-slice-donut,
+.accounts-dashboard-wrap .ct-series-a .ct-slice-pie {
+ stroke: #009f9d !important;
+}
+
+
+.accounts-dashboard-wrap h4 {
+ padding-left: 20px !important;
+ padding-top: 10px !important;
+}
+
+
+
+
+.accounts-dashboard-wrap .users-list>li img {
+ border-radius: 50%;
+ height: auto;
+ max-width: 100%;
+}
+
+.accounts-dashboard-wrap .badge-danger {
+ width: 50px;
+ height: 20px;
+ color: #fff;
+ background-color: #dc3545;
+}
+
+.accounts-dashboard-wrap .card-header>.card-tools {
+ float: right;
+ margin-right: -.625rem;
+}
+
+
+.accounts-dashboard-wrap .card {
+ box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);
+ margin-bottom: 1rem;
+}
+
+.accounts-dashboard-wrap .card-title {
+ float: left;
+ font-size: 1.1rem;
+ font-weight: 400;
+ margin: 0;
+ text-transform: uppercase;
+}
+
+.accounts-dashboard-wrap .col,
+.accounts-dashboard-wrap .col-1,
+.accounts-dashboard-wrap .col-10,
+.accounts-dashboard-wrap .col-11,
+.accounts-dashboard-wrap .col-12,
+.accounts-dashboard-wrap .col-2,
+.accounts-dashboard-wrap .col-3,
+.accounts-dashboard-wrap .col-4,
+.accounts-dashboard-wrap .col-5,
+.accounts-dashboard-wrap .col-6,
+.accounts-dashboard-wrap .col-7,
+.accounts-dashboard-wrap .col-8,
+.accounts-dashboard-wrap .col-9,
+.accounts-dashboard-wrap .col-auto,
+.accounts-dashboard-wrap .col-lg,
+.accounts-dashboard-wrap .col-lg-1,
+.accounts-dashboard-wrap .col-lg-10,
+.accounts-dashboard-wrap .col-lg-11,
+.accounts-dashboard-wrap .col-lg-12,
+.accounts-dashboard-wrap .col-lg-2,
+.accounts-dashboard-wrap .col-lg-3,
+.accounts-dashboard-wrap .col-lg-4,
+.accounts-dashboard-wrap .col-lg-5,
+.accounts-dashboard-wrap .col-lg-6,
+.col-lg-7,
+.col-lg-8,
+.col-lg-9,
+.col-lg-auto,
+.col-md,
+.col-md-1,
+.col-md-10,
+.col-md-11,
+.col-md-2,
+.col-md-3,
+.col-md-4,
+.col-md-5,
+.col-md-6,
+.col-md-7,
+.col-md-8,
+.col-md-9,
+.col-md-auto,
+.col-sm,
+.col-sm-1,
+.col-sm-10,
+.col-sm-11,
+.col-sm-12,
+.col-sm-2,
+.col-sm-3,
+.col-sm-4,
+.col-sm-5,
+.col-sm-6,
+.col-sm-7,
+.col-sm-8,
+.col-sm-9,
+.col-sm-auto,
+.col-xl,
+.col-xl-1,
+.col-xl-10,
+.col-xl-11,
+.col-xl-12,
+.col-xl-2,
+.col-xl-3,
+.col-xl-4,
+.col-xl-5,
+.col-xl-6,
+.col-xl-7,
+.col-xl-8,
+.col-xl-9,
+.col-xl-auto {
+ position: relative;
+ padding-right: 7.5px;
+ padding-left: 7.5px;
+}
+
+
+.accounts-dashboard-wrap .card-header {
+ background-color:
+ transparent;
+ border-bottom: 1px solid rgba(0, 0, 0, .125);
+ padding: .75rem 1.25rem;
+ position: relative;
+ border-top-left-radius: .25rem;
+ border-top-right-radius: .25rem;
+}
+
+
+.accounts-dashboard-wrap .fa:hover {
+ -ms-transform: scale(1.5);
+ /* IE 9 */
+ -webkit-transform: scale(1.5);
+ /* Safari 3-8 */
+ transform: scale(1.5);
+}
+
+.accounts-dashboard-wrap .card-header>.card-tools {
+ float: right;
+ margin-right: -.625rem;
+}
+
+.accounts-dashboard-wrap .right {
+ float: left;
+}
+
+.accounts-dashboard-wrap .tooltip:hover .tooltiptext {
+ visibility: visible;
+}
+
+
+.accounts-dashboard-wrap .col-6 {
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ max-width: 50%;
+}
+
+.accounts-dashboard-wrap .fa-cog {
+ content: "\f013"
+}
+
+.accounts-dashboard-wrap .fa,
+.fas {
+ font-weight: 900;
+}
+
+.accounts-dashboard-wrap .fa,
+.accounts-dashboard-wrap .fab,
+.accounts-dashboard-wrap .fad,
+.accounts-dashboard-wrap .fal,
+.accounts-dashboard-wrap .far,
+.accounts-dashboard-wrap .fas {
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ display: inline-block;
+ font-style: normal;
+ font-variant: normal;
+ text-rendering: auto;
+ line-height: 1;
+}
+
+.accounts-dashboard-wrap .info-box .info-box-icon {
+ border-radius: .25rem;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 1.875rem;
+ -ms-flex-pack: center;
+ justify-content: center;
+ text-align: center;
+ width: 70px;
+}
+
+.accounts-dashboard-wrap .info-box {
+
+
+ box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);
+ border-radius: .25rem;
+ background: #fff;
+ display: -ms-flexbox;
+ display: flex;
+ margin-bottom: 1rem;
+ min-height: 80px;
+ padding: .5rem;
+ position: relative;
+}
+
+.accounts-dashboard-wrap .o_datepicker .o_datepicker_input {
+ width: 100%;
+ cursor: pointer;
+}
+
+.accounts-dashboard-wrap #overdue {
+ width: 100%;
+ cursor: pointer;
+}
+
+.accounts-dashboard-wrap .o_input {
+ border: 1px solid #cfcfcf;
+ border-top-style: none;
+ border-right-style: none;
+ border-left-style: none;
+}
+
+
+.accounts-dashboard-wrap .in_graph {
+ padding-left: 90px;
+ height: auto;
+ padding-bottom: 65px;
+ text-align: center !important;
+}
+
+
+.accounts-dashboard-wrap .oh_dashboards {
+ padding-top: 15px;
+ background-color: #f8faff !important;
+}
+
+.accounts-dashboard-wrap .container-fluid.o_in_dashboard {
+ padding: 0px !important;
+}
+
+.accounts-dashboard-wrap .o_action_manager {
+ overflow-y: scroll !important;
+ max-width: 100%;
+}
+
+// new tile
+
+body {
+ background-color: #ececec;
+}
+
+.accounts-dashboard-wrap .container {
+ margin: 50px 0 0 100px;
+}
+
+.accounts-dashboard-wrap .o_dashboards {
+ color: #2a2a2a;
+ background-color: #f2f2f2 !important;
+}
+
+.accounts-dashboard-wrap .dash-header {
+
+ margin: 15px 0px 12px 0 !important;
+ display: block;
+ padding: 7px 25px 7px 0;
+ color: #0e1319;
+ font-size: 2rem;
+ font-weight: 400;
+ background-color:
+ rgba(255, 255, 255, 0.9) !important;
+ color: #212529;
+ padding: 1.5rem;
+ border-radius: 3px;
+ box-shadow: 0 0px 10px 0px rgba(0, 0, 0, 0.05) !important;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+}
+
+.accounts-dashboard-wrap .dashboard-h1 {
+
+ display: block;
+ padding: 7px 25px 7px 0;
+ color: #0e1319;
+ font-size: 2rem;
+ font-weight: 400;
+ color:
+
+ #212529;
+ float: left;
+ margin-bottom: 0;
+
+}
+
+.accounts-dashboard-wrap .card {
+ position: relative !important;
+ border-top: 0 !important;
+ margin-bottom: 30px !important;
+ width: 100% !important;
+ background-color: #ffffff !important;
+ border-radius: 0.25rem !important;
+ padding: 0px !important;
+ -webkit-transition: .5s !important;
+ transition: .5s !important;
+ display: -ms-flexbox !important;
+ display: flex !important;
+ -ms-flex-direction: column !important;
+ flex-direction: column !important;
+ box-shadow: 0 0px 10px 0px rgba(0, 0, 0, 0.05) !important;
+ border-radius: 0.25rem;
+}
+
+.accounts-dashboard-wrap .card-header {
+ border: 0;
+ padding: 0;
+}
+
+.accounts-dashboard-wrap .card-header>.card-tools {
+ float: right;
+ margin-right: 0.375rem;
+ margin-top: 5px;
+ margin-bottom: 10px;
+}
+
+.accounts-dashboard-wrap .card-header i.fa {
+ font-size: 1.3rem;
+ display: inline-block;
+ padding: 0 0px;
+ margin: 0 0px;
+ color: #57769c;
+ opacity: .8;
+ -webkit-transition: 0.3s linear;
+ transition: 0.3s linear;
+}
+
+.accounts-dashboard-wrap .dropdown-toggle::after {
+ display: inline-block;
+ margin-left: 0.255em;
+ vertical-align: 0.255em;
+ content: "";
+ border-top: 0.3em solid;
+ border-right: 0.3em solid transparent;
+ border-bottom: 0;
+ border-left: 0.3em solid transparent;
+ color: #7891af;
+}
+
+.accounts-dashboard-wrap .account-details {
+ display: flex;
+ justify-content: space-evenly;
+}
+
+.main-title {
+ color: #a3a3a3;
+ display: block;
+ margin-bottom: 5px;
+ font-size: 20px;
+ font-weight: 400;
+}
+
+.accounts-dashboard-wrap .main-title {
+ display: block;
+ margin-bottom: 5px;
+ font-size: 13px;
+ font-weight: 600;
+ color: #fff !important;
+ text-transform: uppercase;
+ padding: 1rem;
+ border-radius: 5px;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.accounts-dashboard-wrap .card-body {
+ background-color: rgba(255, 255, 255, 0.9) !important;
+ color: #212529;
+ padding-top: 0;
+}
+
+.accounts-dashboard-wrap .tile.wide.invoice {
+ margin-bottom: 27px;
+ -webkit-box-shadow: 1px 5px 24px 0 rgba(68, 102, 242, 0.05);
+ box-shadow: 1px 5px 24px 0 rgba(68, 102, 242, 0);
+ background-color: #ffffff;
+ border-radius: 5px;
+ position: relative;
+ width: 100%;
+ padding: 0rem 0rem;
+ border: 1px solid rgba(0, 0, 0, 0.07);
+}
+
+.accounts-dashboard-wrap .box-1 .main-title {
+ background: #67b7dc;
+ color: #fff;
+}
+
+.accounts-dashboard-wrap .box-2 .main-title {
+ background: #6794dc !important;
+ color: #fff;
+}
+
+.accounts-dashboard-wrap .box-3 .main-title {
+ background: #8067dc;
+ color: #fff;
+}
+
+.accounts-dashboard-wrap .box-4 .main-title {
+ background: #c767dc;
+ color: #fff;
+}
+
+.accounts-dashboard-wrap .count {
+ margin-bottom: 1rem;
+}
+
+.accounts-dashboard-wrap span#total_invoices_ span,
+.accounts-dashboard-wrap span#total_invoices_last span,
+.accounts-dashboard-wrap span#total_incomes_ span,
+.accounts-dashboard-wrap span#total_incomes_last span,
+.accounts-dashboard-wrap span#total_expenses_ span,
+.accounts-dashboard-wrap span#total_expense_last span,
+.accounts-dashboard-wrap span#unreconciled_items_ span,
+.accounts-dashboard-wrap span#unreconciled_items_last span,
+.accounts-dashboard-wrap span#unreconciled_counts_last_year span,
+.accounts-dashboard-wrap span#unreconciled_counts_this_year span,
+.accounts-dashboard-wrap span#total_expense_last_year span,
+.accounts-dashboard-wrap span#total_expense_this_year span,
+.accounts-dashboard-wrap span#total_incomes_last_year span,
+.accounts-dashboard-wrap span#total_incomes_this_year span,
+.accounts-dashboard-wrap span#total_invoices_last_year span,
+.accounts-dashboard-wrap span#total_invoices_this_year span,
+.accounts-dashboard-wrap span#net_profit_current_months span,
+.accounts-dashboard-wrap span#net_profit_current_year span {
+ padding-right: 8px;
+ font-size: 16px;
+ font-weight: 600;
+}
+
+.accounts-dashboard-wrap span#total_invoices_,
+.accounts-dashboard-wrap span#total_invoices_last,
+.accounts-dashboard-wrap span#total_incomes_,
+.accounts-dashboard-wrap span#total_incomes_last,
+.accounts-dashboard-wrap span#total_expenses_,
+.accounts-dashboard-wrap span#total_expense_last,
+.accounts-dashboard-wrap span#unreconciled_items_,
+.accounts-dashboard-wrap span#unreconciled_items_last,
+.accounts-dashboard-wrap span#unreconciled_counts_last_year,
+.accounts-dashboard-wrap span#unreconciled_counts_this_year,
+.accounts-dashboard-wrap span#total_expense_last_year,
+.accounts-dashboard-wrap span#total_expense_this_year,
+.accounts-dashboard-wrap span#total_incomes_last_year,
+.accounts-dashboard-wrap span#total_incomes_this_year,
+.accounts-dashboard-wrap span#total_invoices_last_year,
+.accounts-dashboard-wrap span#total_invoices_this_year,
+.accounts-dashboard-wrap span#net_profit_current_months,
+.accounts-dashboard-wrap span#net_profit_current_year {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ flex-direction: column;
+ color: #455e7b !important;
+}
+
+.accounts-dashboard-wrap .main-title~div {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 1rem;
+ padding: 1rem;
+ background: #fff;
+}
+
+.accounts-dashboard-wrap .card-header {
+ color: #0e1319 !important;
+ display: block !important;
+ padding: 1.5rem 1.5rem !important;
+ position: relative !important;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.07) !important;
+ border-top-left-radius: 0.25rem !important;
+ border-top-right-radius: 0.25rem !important;
+}
+
+.accounts-dashboard-wrap .card-header i.fa {
+ font-size: 1rem;
+ display: inline-block;
+ padding: 0 0px;
+ margin: 0 0px;
+ color: #57769c;
+ opacity: .8;
+ -webkit-transition: 0.3s linear;
+ transition: 0.3s linear;
+}
+
+.accounts-dashboard-wrap .card-header>.card-tools {
+ float: right;
+ margin-right: 0;
+ margin-top: 0px !important;
+ margin-bottom: 0;
+}
+
+.accounts-dashboard-wrap .card-tools .btn {
+ padding: 2px 10px;
+ margin: 0;
+ line-height: normal !important;
+}
+
+.accounts-dashboard-wrap .ct-series-a .ct-bar,
+.accounts-dashboard-wrap .ct-series-a .ct-line,
+.accounts-dashboard-wrap .ct-series-a .ct-point,
+.accounts-dashboard-wrap .ct-series-a .ct-slice-donut,
+.accounts-dashboard-wrap .ct-series-a .ct-slice-pie {
+ stroke: rgb(132, 60, 247) !important;
+}
+
+.accounts-dashboard-wrap canvas#salesChart,
+.accounts-dashboard-wrap canvas#exChart {
+ display: none;
+}
+
+.accounts-dashboard-wrap ul#overdues li,
+.accounts-dashboard-wrap ul#latebills li {
+ list-style: none;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ font-size: 13px;
+ color: #455e7b !important;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.07) !important;
+}
+
+.accounts-dashboard-wrap ul#overdues,
+.accounts-dashboard-wrap ul#latebills {
+ padding: 0;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+
+.accounts-dashboard-wrap ul#overdues li a,
+.accounts-dashboard-wrap ul#latebills li a {
+ color: #455e7b !important;
+}
+
+.accounts-dashboard-wrap .badge-danger {
+ width: auto;
+ height: 20px;
+ color: #fff;
+ background-color: #843cf7 !important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.accounts-dashboard-wrap .ct-label {
+ fill: rgba(0, 0, 0, .4);
+ color: rgba(0, 0, 0, .4);
+ font-size: 1.1rem !important;
+ line-height: 1;
+ font-weight: 600;
+}
+
+.accounts-dashboard-wrap .ct-label {
+ fill: rgb(255, 255, 255) !important;
+ color: rgb(255, 255, 255) !important;
+}
+
+.accounts-dashboard-wrap .chart {
+ .ct-legend {
+ position: relative;
+ z-index: 10;
+
+ li {
+ position: relative;
+ padding-left: 23px;
+ margin-bottom: 3px;
+ }
+
+ li:before {
+ width: 12px;
+ height: 12px;
+ position: absolute;
+ left: 0;
+ content: '';
+ border: 3px solid transparent;
+ border-radius: 2px;
+ }
+
+ li.inactive:before {
+ background: transparent;
+ }
+
+ &.ct-legend-inside {
+ position: absolute;
+ top: 0;
+ right: 0;
+ }
+
+ // @for $i from 0 to length($ct-series) {
+ // .ct-series-#{$i}:before {
+ // background-color: nth($ct-series, $i + 1);
+ // border-color: nth($ct-series, $i + 1);
+ // }
+ // }
+ }
+}
+
+.accounts-dashboard-wrap #chartdiv {
+ width: 100%;
+ height: 400px;
+}
+
+.accounts-dashboard-wrap #chartdiv_ex {
+ width: 100%;
+ height: 500px;
+}
+
+.accounts-dashboard-wrap #barChart {
+ display: block;
+ width: 595px;
+ height: 396px;
+ // pointer-events: none;
+
+}
+
+.accounts-dashboard-wrap .canvas-con {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 365px;
+ position: relative;
+}
+
+/*p {
+ position: relative;
+ left: 194px;
+ margin-top: 64px;
+}*/
+
+.accounts-dashboard-wrap .canvas-con-inner {
+ height: 100%;
+}
+
+.accounts-dashboard-wrap .canvas-con-inner,
+.legend-con {
+ display: inline-block;
+}
+
+.accounts-dashboard-wrap .legend-con {
+ font-family: Roboto;
+ display: inline-block;
+
+ ul {
+ list-style: none;
+ }
+
+ li {
+ display: flex;
+ align-items: center;
+ margin-bottom: 4px;
+
+ span {
+ display: inline-block;
+ }
+
+ span.chart-legend {
+ width: 25px;
+ height: 25px;
+ margin-right: 10px;
+ }
+ }
+}
+
+html,
+body {
+ margin: 0;
+}
+
+.accounts-dashboard-wrap #canvas {
+ height: 277px !important;
+ width: 100% !important;
+}
+
+.accounts-dashboard-wrap #net_profit_this_year .title {
+ float: left;
+}
+
+.accounts-dashboard-wrap #net_profit_this_year {
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ padding: .3rem;
+ background: #843cf7;
+ color: #fff;
+ border-radius: 10px;
+ width: auto !important;
+ font-weight: 600;
+ margin-bottom: 2rem;
+ margin-top: 1rem;
+ display: none !important;
+}
+
+.accounts-dashboard-wrap #net_profit_last_year .title {
+ float: left;
+}
+
+.accounts-dashboard-wrap #net_profit_last_year {
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ padding: .3rem;
+ background:
+ #843cf7;
+ color:
+ #fff;
+ border-radius: 10px;
+ width: auto !important;
+ font-weight: 600;
+ margin-bottom: 2rem;
+ margin-top: 1rem;
+}
+
+.accounts-dashboard-wrap #net_profit_last_month .title {
+ float: left;
+}
+
+.accounts-dashboard-wrap #net_profit_last_month {
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ padding: .3rem;
+ background:
+ #843cf7;
+ color:
+ #fff;
+ border-radius: 10px;
+ width: auto !important;
+ font-weight: 600;
+ margin-bottom: 2rem;
+ margin-top: 1rem;
+}
+
+
+.accounts-dashboard-wrap #net_profit_this_months .title {
+ float: left;
+}
+
+.accounts-dashboard-wrap #net_profit_this_months {
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ padding: .3rem;
+ background:
+ #843cf7;
+ color:
+ #fff;
+ border-radius: 10px;
+ width: auto !important;
+ font-weight: 600;
+ margin-bottom: 2rem;
+ margin-top: 1rem;
+}
+
+
+
+.accounts-dashboard-wrap #col-graph .card {
+ height: 366px;
+}
+
+.accounts-dashboard-wrap #top_10_customers {
+ padding: 0;
+}
+
+.accounts-dashboard-wrap #top_10_customers li {
+ list-style: none;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ font-size: 13px;
+ color: #455e7b !important;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.07) !important;
+ padding-left: 2rem;
+ display: flex;
+ justify-content: space-between;
+ padding-right: 2rem;
+}
+
+.accounts-dashboard-wrap #top_10_customers li a {
+ color:
+ #455e7b !important;
+}
+
+.accounts-dashboard-wrap #top_10_customers_this_month {
+ padding: 0;
+}
+
+.accounts-dashboard-wrap #top_10_customers_this_month li {
+ list-style: none;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ font-size: 13px;
+ color: #455e7b !important;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.07) !important;
+ padding-left: 2rem;
+ display: flex;
+ justify-content: space-between;
+ padding-right: 2rem;
+}
+
+.accounts-dashboard-wrap #top_10_customers_this_month li a {
+ color:
+ #455e7b !important;
+}
+
+.accounts-dashboard-wrap #top_10_customers_last_month {
+ padding: 0;
+}
+
+.accounts-dashboard-wrap #top_10_customers_last_month li {
+ list-style: none;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ font-size: 13px;
+ color: #455e7b !important;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.07) !important;
+ padding-left: 2rem;
+ display: flex;
+ justify-content: space-between;
+ padding-right: 2rem;
+}
+
+.accounts-dashboard-wrap #top_10_customers_last_month li a {
+ color:
+ #455e7b !important;
+}
+
+.accounts-dashboard-wrap #current_bank_balance {
+ padding: 0;
+}
+
+.accounts-dashboard-wrap #current_bank_balance li {
+
+ list-style: none;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ font-size: 13px;
+ color: #455e7b !important;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.07) !important;
+ padding-left: 2rem;
+ display: flex;
+ justify-content: space-between;
+ padding-right: 2rem;
+
+}
+
+.accounts-dashboard-wrap #current_bank_balance li a {
+ color:
+ #455e7b !important;
+}
+
+.accounts-dashboard-wrap #current_cash_balance {
+ padding: 0;
+}
+
+.accounts-dashboard-wrap #current_cash_balance li {
+ list-style: none;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ font-size: 13px;
+ color: #455e7b !important;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.07) !important;
+ padding-left: 2rem;
+ display: flex;
+ justify-content: space-between;
+ padding-right: 2rem;
+}
+
+.accounts-dashboard-wrap #current_cash_balance li a {
+ color: #455e7b !important;
+
+}
+
+
+.accounts-dashboard-wrap .custom-h1 {
+ font-size: 1em;
+ margin-bottom: 0rem;
+}
+
+.accounts-dashboard-wrap .custom-h3 {
+ font-size: 1em;
+ margin: 0;
+}
+
+// Progress Bars
+.accounts-dashboard-wrap progress,
+.accounts-dashboard-wrap progress[role] {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ border: none;
+ background-size: auto;
+ height: 20px;
+ width: 100%;
+ background-color: #8067dc;
+}
+
+// The unordered list
+.accounts-dashboard-wrap .skill-list {
+ list-style: none;
+ margin: 0;
+ padding: 1em;
+}
+
+// The list item
+.accounts-dashboard-wrap .skill {
+ margin-bottom: 1em;
+ position: relative;
+
+ h3 {
+ color: #000;
+ left: 1em;
+ line-height: 1;
+ position: absolute;
+ top: 1em;
+ }
+
+ ::-webkit-progress-value {
+ -webkit-animation: bar-fill 2s;
+ width: 0px;
+ }
+}
+
+// Style the bar colors
+.accounts-dashboard-wrap .skill-1::-webkit-progress-value {
+ background: #c767dc;
+}
+
+.accounts-dashboard-wrap .skill-1::-moz-progress-bar {
+ background: #c767dc;
+}
+
+// Animation Keyframes
+@-webkit-keyframes bar-fill {
+ 0% {
+ width: 0;
+ }
+}
+
+@keyframes bar-fill {
+ 0% {
+ width: 0;
+ }
+}
+
+.accounts-dashboard-wrap #total_supplier_invoice {
+ color: #696969;
+}
+
+.accounts-dashboard-wrap #total_customer_invoice_names {
+ color: #696969;
+}
+
+.accounts-dashboard-wrap #total_customer_invoice {
+ color: #696969;
+}
+
+.accounts-dashboard-wrap #total_invoice_difference,
+.accounts-dashboard-wrap #total_supplier_difference {
+ color: #4ecdc4;
+}
+
+progress {
+ border: 0;
+ border-radius: 20px;
+}
+
+progress::-webkit-progress-bar {
+ border: 0;
+ border-radius: 20px;
+}
+
+progress::-webkit-progress-value {
+ border: 0;
+ border-radius: 20px;
+}
+
+progress::-moz-progress-bar {
+ border: 0;
+ border-radius: 20px;
+}
+
+.accounts-dashboard-wrap #total_customer_invoice_paid .logo,
+.accounts-dashboard-wrap #total_customer_invoice .logo,
+.accounts-dashboard-wrap #total_supplier_invoice_paid .logo,
+.accounts-dashboard-wrap #total_supplier_invoice .logo,
+.accounts-dashboard-wrap #total_customer_invoice_paid_current_year .logo,
+.accounts-dashboard-wrap #total_customer_invoice_current_year .logo,
+.accounts-dashboard-wrap #total_supplier_invoice_paid_current_year .logo,
+.accounts-dashboard-wrap #total_supplier_invoice_current_year .logo,
+.accounts-dashboard-wrap #total_customer_invoice_paid_current_month .logo,
+.accounts-dashboard-wrap #total_customer_invoice_current_month .logo,
+.accounts-dashboard-wrap #total_supplier_invoice_paid_current_month .logo,
+.accounts-dashboard-wrap #total_supplier_invoice_current_month .logo {
+
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ justify-content: left;
+ flex-direction: column-reverse;
+ color: #455e7b !important;
+
+}
+
+.accounts-dashboard-wrap #total_customer_invoice_paid .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_customer_invoice .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_supplier_invoice_paid .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_supplier_invoice .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_customer_invoice_paid_current_year .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_customer_invoice_current_year .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_supplier_invoice_paid_current_year .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_supplier_invoice_current_year .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_customer_invoice_paid_current_month .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_customer_invoice_current_month .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_supplier_invoice_paid_current_month .logo span:nth-child(2),
+.accounts-dashboard-wrap #total_supplier_invoice_current_month .logo span:nth-child(2) {
+
+ font-weight: 600;
+
+}
+
+.accounts-dashboard-wrap .switch {
+ position: relative;
+ display: inline-block;
+ width: 60px;
+ height: 34px;
+}
+
+.accounts-dashboard-wrap .switch input {
+ opacity: 0;
+ width: 0;
+ height: 0;
+}
+
+.accounts-dashboard-wrap .slider {
+ position: absolute;
+ cursor: pointer;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: #ccc;
+ -webkit-transition: .4s;
+ transition: .4s;
+}
+
+.accounts-dashboard-wrap .slider:before {
+ position: absolute;
+ content: "";
+ height: 26px;
+ width: 26px;
+ left: 4px;
+ bottom: 4px;
+ background-color: white;
+ -webkit-transition: .4s;
+ transition: .4s;
+}
+
+.accounts-dashboard-wrap input:checked+.slider {
+ background-color: #2196F3;
+}
+
+.accounts-dashboard-wrap input:focus+.slider {
+ box-shadow: 0 0 1px #2196F3;
+}
+
+.accounts-dashboard-wrap input:checked+.slider:before {
+ -webkit-transform: translateX(26px);
+ -ms-transform: translateX(26px);
+ transform: translateX(26px);
+}
+
+/* Rounded sliders */
+.accounts-dashboard-wrap .slider.round {
+ border-radius: 34px;
+}
+
+.accounts-dashboard-wrap .slider.round:before {
+ border-radius: 50%;
+}
+
+.accounts-dashboard-wrap .btn-primary {
+
+ color: #FFFFFF;
+ background-color: #7C7BAD;
+ border-color: #7C7BAD;
+
+}
+
+.accounts-dashboard-wrap .toggle-on.btn {
+
+ padding-right: 18px !important;
+ right: 50%;
+
+
+}
+
+.accounts-dashboard-wrap .toggle.btn.btn-default.off {
+
+ border: 1px solid #aaa;
+
+ background: #fff;
+ font-weight: 600 !important;
+
+}
+
+.accounts-dashboard-wrap .toggle-off.btn {
+
+ padding-left: 9px !important;
+
+}
+
+.accounts-dashboard-wrap .toggle {
+
+ width: 160px !important;
+ height: auto !important;
+
+}
+
+html .o_web_client>.o_action_manager {
+ overflow: auto !important;
+}
+/*@media (min-width: 992px) {
+.col-lg-12 {
+width: 100%;
+width: 100% !important;
+}
+}
+@media (min-width: 768px) {
+.col-md-3 {
+width: 25%;
+width: 25% !important;
+}
+.col-md-4 {
+width: 33.33333333%;
+width: 33.33333333% !important;
+}
+}*/
+.selected-row {
+ background-color: whitesmoke;
+}
+.row-clicked {
+ background-color: whitesmoke;
+}
+
+.o_bank_reconcile_stats_buttons{
+ display: flex;
+ flex-flow: row nowrap;
+ margin-bottom: 5px;
+ margin-top: -$o-sheet-vpadding;
+ white-space: nowrap;
+ border-bottom: 1px solid $border-color;
+ height: fit-content;
+ min-height: $o-statbutton-height;
+ .o_bank_reconcile_status_buttons_aside_left{
+ flex-grow: 0;
+ display: flex !important;
+ flex-flow: row nowrap;
+ border-right: 1px solid $border-color;
+
+ .btn {
+ margin-right: $o-statbutton-spacing;
+ }
+ }
+}
+.form_view_class{
+ width: 83% !important;
+}
+.form_bank{
+ width: 1500px !important;
+}
+.statement_button {
+ margin-left: 180px !important;
+ position: absolute;
+ height: 4px;
+ margin: 0;
+ padding: 2px 0 0 0;
+ border: 0;
+ z-index: 2;
+ background-color: transparent;
+}
+
+.statement_button .btn-sm {
+ position: relative;
+ padding-top: 0;
+ padding-bottom: 0;
+ top: -13px;
+ visibility: hidden;
+}
+
+.statement_button:hover .btn-sm {
+ display: inline-block;
+ visibility: visible;
+}
+#kanban_date{
+ width:20%;
+ overflow-wrap: break-word;
+}
+#partner{
+ flex:1 60%;
+ width:60%;
+ margin-top: -20px;
+}
+.o_custom_class.o_kanban_ungrouped .o_kanban_record{
+ width:500px;
+}
+
+#row1_statement{
+ margin-left: 196px;
+ margin-top: -18px;
+}
+#kanban_amount{
+ margin-top:-15px;
+ margin-left: 80px;
+}
+#payment_ref{
+ margin-bottom: 20px;
+}
+.bank_reconcile_model_dropdown .dropdown-toggle{
+ border: none;
+ box-shadow: none;
+ background-color: white;
+ margin-left: 195px;
+}
+.new-div{
+ background-color: #71639e;
+ height: 70px;
+ width: 7px;
+ margin-left: 500px;
+ margin-top: -71px;
+}
+.to_check{
+ margin-right: 10px !important;
+ margin-bottom: 10px !important;
+}
diff --git a/third_party_addons/base_accounting_kit/static/src/xml/bank_rec_widget.xml b/third_party_addons/base_accounting_kit/static/src/xml/bank_rec_widget.xml
new file mode 100644
index 000000000..fa9caebda
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/src/xml/bank_rec_widget.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ o_kanban_renderer o_custom_class
+
+
+ width:30%;
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/static/src/xml/bank_reconcile_widget.xml b/third_party_addons/base_accounting_kit/static/src/xml/bank_reconcile_widget.xml
new file mode 100644
index 000000000..682e2813a
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/static/src/xml/bank_reconcile_widget.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_asset_asset_views.xml b/third_party_addons/base_accounting_kit/views/account_asset_asset_views.xml
new file mode 100644
index 000000000..07c759af1
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_asset_asset_views.xml
@@ -0,0 +1,231 @@
+
+
+
+
+ account.asset.asset.view.form
+ account.asset.asset
+
+
+
+
+
+
+ account.asset.asset.view.kanban
+ account.asset.asset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.asset.asset.view.tree
+ account.asset.asset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.asset.asset.view.search
+ account.asset.asset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Assets
+ account.asset.asset
+ list,kanban,form
+
+ [('category_id.type', '=', 'purchase')]
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_asset_category_views.xml b/third_party_addons/base_accounting_kit/views/account_asset_category_views.xml
new file mode 100644
index 000000000..eb902f60c
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_asset_category_views.xml
@@ -0,0 +1,146 @@
+
+
+
+
+ account.asset.category.view.form
+ account.asset.category
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ months
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.asset.category.view.kanban
+ account.asset.category
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.asset.category.view.tree
+ account.asset.category
+
+
+
+
+
+
+
+
+
+
+
+ account.asset.category.view.search
+ account.asset.category
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Asset Types
+ account.asset.category
+ [('type', '=', 'purchase')]
+ list,kanban,form
+ {'default_type': 'purchase'}
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_bank_statement_line_views.xml b/third_party_addons/base_accounting_kit/views/account_bank_statement_line_views.xml
new file mode 100644
index 000000000..5a70088a6
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_bank_statement_line_views.xml
@@ -0,0 +1,290 @@
+
+
+
+
+ account.bank.statement.line.view.search
+ account.bank.statement.line
+ 999
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.bank.statement.line.view.kanban
+ account.bank.statement.line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.bank.statement.line.view.tree
+ account.bank.statement.line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.bank.statement.line.view.form
+ account.bank.statement.line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add a Transaction
+ account.bank.statement.line
+ form
+
+ new
+
+
+
+ account.bank.statement.line.view.form
+ account.bank.statement.line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ in
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_bank_statement_views.xml b/third_party_addons/base_accounting_kit/views/account_bank_statement_views.xml
new file mode 100644
index 000000000..73da42e8c
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_bank_statement_views.xml
@@ -0,0 +1,34 @@
+
+
+
+
+ account.bank.statement.view.form
+ account.bank.statement
+ 100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create Statement
+ account.bank.statement
+ form
+
+ new
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_configuration.xml b/third_party_addons/base_accounting_kit/views/account_configuration.xml
new file mode 100644
index 000000000..9af958a89
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_configuration.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ account.account.view.form.inherit.base.accounting.kit
+ account.account
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_followup.xml b/third_party_addons/base_accounting_kit/views/account_followup.xml
new file mode 100644
index 000000000..ccaf90baf
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_followup.xml
@@ -0,0 +1,88 @@
+
+
+
+
+ account.followup.view.form
+ account.followup
+
+
+
+
+
+
+ To remind customers of paying their invoices, you can
+ define different actions depending on how severely
+ overdue the customer is. These actions are bundled
+ into follow-up levels that are triggered when the due
+ date of an invoice has passed a certain
+ number of days. If there are other overdue invoices for the
+ same customer, the actions of the most
+ overdue invoice will be executed.
+
+
+
+
+
+
+
+ account.followup.view.tree
+ account.followup
+
+
+
+
+
+
+
+
+ account.followup.view.search
+ account.followup
+
+
+
+
+
+
+
+
+ account.followup.view.kanban
+ account.followup
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Payment Follow-ups
+ ir.actions.act_window
+ account.followup
+
+ list,kanban,form
+
+
+ Define follow-up levels and their related actions
+
+
+ For each step, specify the actions to be taken and delay in days. It is
+ possible to use print and e-mail templates to send specific messages to
+ the customer.
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_group.xml b/third_party_addons/base_accounting_kit/views/account_group.xml
new file mode 100644
index 000000000..4d2643582
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_group.xml
@@ -0,0 +1,51 @@
+
+
+
+
+ account.group.view.form
+ account.group
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.group.view.tree
+ account.group
+
+
+
+
+
+
+
+
+
+
+
+ Account Groups
+ account.group
+ list,form
+
+
+
+
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/views/account_journal_views.xml b/third_party_addons/base_accounting_kit/views/account_journal_views.xml
new file mode 100644
index 000000000..a0ffc7fcc
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_journal_views.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ account.journal.view.kanban.inherit.base.accounting.kit
+ account.journal
+
+
+
+
+
+ to Reconcile
+
+
+
+ Import
+
+
+
+
+ action_open_reconcile
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_move_line_views.xml b/third_party_addons/base_accounting_kit/views/account_move_line_views.xml
new file mode 100644
index 000000000..f317d7959
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_move_line_views.xml
@@ -0,0 +1,43 @@
+
+
+
+
+ account.move.line.view.tree
+ account.move.line
+ 999
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_move_views.xml b/third_party_addons/base_accounting_kit/views/account_move_views.xml
new file mode 100644
index 000000000..c67b80473
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_move_views.xml
@@ -0,0 +1,34 @@
+
+
+
+
+ account.move.view.form.inherit.base.accounting.kit
+ account.move
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This Customer's due amount is .
+
+
+
+
+ This customer's warning limit has been crossed.
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_payment_view.xml b/third_party_addons/base_accounting_kit/views/account_payment_view.xml
new file mode 100644
index 000000000..b17f84385
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_payment_view.xml
@@ -0,0 +1,87 @@
+
+
+
+
+ account.payment.view.form.inherit.base.accounting.kit
+ account.payment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.bank.statement.line.view.tree
+ account.bank.statement.line
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.payment.register.view.form.base.accounting.kit
+ account.payment.register
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/account_recurring_payments_view.xml b/third_party_addons/base_accounting_kit/views/account_recurring_payments_view.xml
new file mode 100644
index 000000000..9c16b1fc8
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/account_recurring_payments_view.xml
@@ -0,0 +1,95 @@
+
+
+
+
+ account.recurring.payments.view.form
+ account.recurring.payments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.recurring.payments.view.tree
+ account.recurring.payments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Recurring Templates
+ account.recurring.payments
+ ir.actions.act_window
+ list,form
+
+ current
+
+ Click to create new recurring payment template
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/accounting_menu.xml b/third_party_addons/base_accounting_kit/views/accounting_menu.xml
new file mode 100644
index 000000000..4e429bbaf
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/accounting_menu.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/credit_limit_view.xml b/third_party_addons/base_accounting_kit/views/credit_limit_view.xml
new file mode 100644
index 000000000..1d265823a
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/credit_limit_view.xml
@@ -0,0 +1,45 @@
+
+
+
+
+ res.partner.view.form.inherit.base.accounting.kit
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sale.order.view.form.inherit.base.accounting.kit
+ sale.order
+
+
+
+
+
+
+
+
+ This Customer's due amount is .
+
+
+
+
+ This customer's warning limit has been crossed.
+
+
+
+
+
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/views/followup_line_views.xml b/third_party_addons/base_accounting_kit/views/followup_line_views.xml
new file mode 100644
index 000000000..92c8ec868
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/followup_line_views.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ followup.line.view.tree
+ followup.line
+
+
+
+
+
+
+
+
+
+ followup.line.view.form
+ followup.line
+
+
+
+
+
+ After days overdue, do the following actions:
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/followup_report.xml b/third_party_addons/base_accounting_kit/views/followup_report.xml
new file mode 100644
index 000000000..5ca873f66
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/followup_report.xml
@@ -0,0 +1,120 @@
+
+
+
+
+ res.partner.followup.view.form
+ res.partner
+
+
+
+
+
Wonder how to Send Followup mails and Print Followup Reports ? Download our
+
+ Customer Followup
+
+ Module !
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ has no due amount.
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.statements.view.tree
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.view.search.inherit.base.accounting.kit
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Follow-up Reports
+ res.partner
+ list,form
+
+ {'search_default_filter_in_need_of_action':1}
+
+
+ No follow-up to send!
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/multiple_invoice_form.xml b/third_party_addons/base_accounting_kit/views/multiple_invoice_form.xml
new file mode 100644
index 000000000..a6126b2a3
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/multiple_invoice_form.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ account.journal.view.form.inherit.base.accounting.kit
+ account.journal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/multiple_invoice_layout_view.xml b/third_party_addons/base_accounting_kit/views/multiple_invoice_layout_view.xml
new file mode 100644
index 000000000..3d14997bb
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/multiple_invoice_layout_view.xml
@@ -0,0 +1,42 @@
+
+
+
+
+ multiple.invoice.layout.view.form
+ multiple.invoice.layout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ir.actions.act_window
+ Configure Copy layout
+ form
+ new
+ multiple.invoice.layout
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/product_template_views.xml b/third_party_addons/base_accounting_kit/views/product_template_views.xml
new file mode 100644
index 000000000..02a862f68
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/product_template_views.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ product.template.view.form.inherit.base.accounting.kit
+ product.template
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/product_views.xml b/third_party_addons/base_accounting_kit/views/product_views.xml
new file mode 100644
index 000000000..7bccaad49
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/product_views.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ product.template.view.form.inherit.base.accounting.kit
+ product.template
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/views/reports_config_view.xml b/third_party_addons/base_accounting_kit/views/reports_config_view.xml
new file mode 100644
index 000000000..c8af2a015
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/reports_config_view.xml
@@ -0,0 +1,82 @@
+
+
+
+
+ account.financial.report.view.form
+ account.financial.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.financial.report.view.tree
+ account.financial.report
+
+
+
+
+
+
+
+
+
+
+
+ account.financial.report.view.search
+ account.financial.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Financial Reports
+ ir.actions.act_window
+ account.financial.report
+ list,form
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/res_config_settings_views.xml b/third_party_addons/base_accounting_kit/views/res_config_settings_views.xml
new file mode 100644
index 000000000..aee861a02
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/res_config_settings_views.xml
@@ -0,0 +1,23 @@
+
+
+
+ res.config.view.inherited.base.accounting.kit
+ res.config.settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/views/res_partner_views.xml b/third_party_addons/base_accounting_kit/views/res_partner_views.xml
new file mode 100644
index 000000000..4252329f4
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/views/res_partner_views.xml
@@ -0,0 +1,93 @@
+
+
+
+
+ res.partner.view.form.inherit.base.account.report
+
+ res.partner
+
+
+
+
+
+ Print PDF
+
+
+ Print Excel
+
+
+ Sent PDF By Email
+
+
+ Sent Excel By Email
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/third_party_addons/base_accounting_kit/wizard/__init__.py b/third_party_addons/base_accounting_kit/wizard/__init__.py
new file mode 100644
index 000000000..7a9b9133e
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/__init__.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies(
)
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import account_common_partner_report
+from . import account_aged_trial_balance
+from . import account_balance_report
+from . import account_bank_book_report
+from . import account_cash_book_report
+from . import account_day_book_report
+from . import account_lock_date
+from . import account_print_journal
+from . import account_report_general_ledger
+from . import account_report_partner_ledger
+from . import asset_depreciation_confirmation
+from . import asset_modify
+from . import cash_flow_report
+from . import financial_report
+from . import import_bank_statement
+from . import kit_account_tax_report
diff --git a/third_party_addons/base_accounting_kit/wizard/account_aged_trial_balance.py b/third_party_addons/base_accounting_kit/wizard/account_aged_trial_balance.py
new file mode 100644
index 000000000..3ff21f58f
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_aged_trial_balance.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import time
+from dateutil.relativedelta import relativedelta
+from odoo import fields, models, _
+from odoo.exceptions import UserError
+
+
+class AccountAgedTrialBalance(models.TransientModel):
+ _name = 'account.aged.trial.balance'
+ _inherit = 'account.common.partner.report'
+ _description = 'Account Aged Trial balance Report'
+
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_aged_trail_report_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_aged_trail_report_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ name = fields.Char(string="Account Aged Trial balance Report", default="Account Aged Trial balance Report", required=True, translate=True)
+
+ journal_ids = fields.Many2many('account.journal', string='Journals',
+ required=True)
+ period_length = fields.Integer(string='Period Length (days)',
+ required=True, default=30)
+ date_from = fields.Date(default=lambda *a: time.strftime('%Y-%m-%d'))
+
+ def _print_report(self, data):
+ res = {}
+ data = self.pre_print_report(data)
+ data['form'].update(self.read(['period_length'])[0])
+ period_length = data['form']['period_length']
+ if period_length <= 0:
+ raise UserError(_('You must set a period length greater than 0.'))
+ if not data['form']['date_from']:
+ raise UserError(_('You must set a start date.'))
+
+ start = data['form']['date_from']
+
+ for i in range(5)[::-1]:
+ stop = start - relativedelta(days=period_length - 1)
+ res[str(i)] = {
+ 'name': (i != 0 and (
+ str((5 - (i + 1)) * period_length) + '-' + str(
+ (5 - i) * period_length)) or (
+ '+' + str(4 * period_length))),
+ 'stop': start.strftime('%Y-%m-%d'),
+ 'start': (i != 0 and stop.strftime('%Y-%m-%d') or False),
+ }
+ start = stop - relativedelta(days=1)
+ data['form'].update(res)
+ return self.env.ref(
+ 'base_accounting_kit.action_report_aged_partner_balance').with_context(
+ landscape=True).report_action(self, data=data)
diff --git a/third_party_addons/base_accounting_kit/wizard/account_aged_trial_balance_views.xml b/third_party_addons/base_accounting_kit/wizard/account_aged_trial_balance_views.xml
new file mode 100644
index 000000000..5c776abba
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_aged_trial_balance_views.xml
@@ -0,0 +1,39 @@
+
+
+
+
+ account.aged.trial.balance.view.form
+ account.aged.trial.balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Partner Balance
+ account.aged.trial.balance
+ ir.actions.act_window
+ list,form
+
+ {}
+ new
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/account_balance_report.py b/third_party_addons/base_accounting_kit/wizard/account_balance_report.py
new file mode 100644
index 000000000..4aa7171fc
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_balance_report.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, fields, models, _
+
+
+class AccountBalanceReport(models.TransientModel):
+ _name = 'account.balance.report'
+ _inherit = "account.common.account.report"
+ _description = 'Trial Balance Report'
+
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_balance_report_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_balance_report_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ name = fields.Char(string="Trial Balance", default="Trial Balance", required=True, translate=True)
+ journal_ids = fields.Many2many('account.journal',
+ 'account_balance_report_journal_rel',
+ 'account_id', 'journal_id',
+ string='Journals', required=True,
+ default=[])
+
+ @api.model
+ def _get_report_name(self):
+ period_id = self._get_selected_period_id()
+ return self.env['consolidation.period'].browse(period_id)['display_name'] or _("Trial Balance")
+
+ def _print_report(self, data):
+ data = self.pre_print_report(data)
+ records = self.env[data['model']].browse(data.get('ids', []))
+ return self.env.ref(
+ 'base_accounting_kit.action_report_trial_balance').report_action(
+ records, data=data)
diff --git a/third_party_addons/base_accounting_kit/wizard/account_balance_report_views.xml b/third_party_addons/base_accounting_kit/wizard/account_balance_report_views.xml
new file mode 100644
index 000000000..8c36e07aa
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_balance_report_views.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ account.balance.report.view.form.inherit.base.accounting.kit
+ account.balance.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/account_bank_book_report.py b/third_party_addons/base_accounting_kit/wizard/account_bank_book_report.py
new file mode 100644
index 000000000..baf77a77a
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_bank_book_report.py
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from datetime import date
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError
+
+
+class BankBookWizard(models.TransientModel):
+ _name = 'account.bank.book.report'
+ _description = 'Account Bank Book Report'
+
+ company_id = fields.Many2one('res.company', string='Company',
+ readonly=True,
+ default=lambda self: self.env.company)
+ target_move = fields.Selection([('posted', 'All Posted Entries'),
+ ('all', 'All Entries')],
+ string='Target Moves', required=True,
+ default='posted')
+ date_from = fields.Date(string='Start Date', default=date.today(),
+ required=True)
+ date_to = fields.Date(string='End Date', default=date.today(),
+ required=True)
+ display_account = fields.Selection(
+ [('all', 'All'), ('movement', 'With movements'),
+ ('not_zero', 'With balance is not equal to 0')],
+ string='Display Accounts', required=True, default='movement')
+ sortby = fields.Selection(
+ [('sort_date', 'Date'), ('sort_journal_partner', 'Journal & Partner')],
+ string='Sort by', required=True, default='sort_date')
+ initial_balance = fields.Boolean(string='Include Initial Balances',
+ help='If you selected date, this field allow you to add a '
+ 'row to display the amount of debit/credit/balance that '
+ 'precedes the filter you\'ve set.')
+
+ def _get_default_account_ids(self):
+ journals = self.env['account.journal'].search([('type', '=', 'bank')])
+ accounts = []
+ for journal in journals:
+ accounts.append(journal.default_account_id.id)
+ return accounts
+
+ account_ids = fields.Many2many('account.account',
+ 'account_report_bankbook_account_rel',
+ 'report_id', 'account_id',
+ 'Accounts',
+ default=_get_default_account_ids)
+ journal_ids = fields.Many2many('account.journal',
+ 'account_report_bankbook_journal_rel',
+ 'account_id', 'journal_id',
+ string='Journals', required=True,
+ default=lambda self: self.env[
+ 'account.journal'].search([]))
+
+ @api.onchange('account_ids')
+ def onchange_account_ids(self):
+ if self.account_ids:
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'bank')])
+ accounts = []
+ for journal in journals:
+ accounts.append(journal.default_account_id.id)
+ domain = {'account_ids': [('id', 'in', accounts)]}
+ return {'domain': domain}
+
+ def _build_contexts(self, data):
+ result = {}
+ result['journal_ids'] = 'journal_ids' in data['form'] and data['form'][
+ 'journal_ids'] or False
+ result['state'] = 'target_move' in data['form'] and data['form'][
+ 'target_move'] or ''
+ result['date_from'] = data['form']['date_from'] or False
+ result['date_to'] = data['form']['date_to'] or False
+ result['strict_range'] = True if result['date_from'] else False
+ return result
+
+ def check_report(self):
+ self.ensure_one()
+ if self.initial_balance and not self.date_from:
+ raise UserError(_("You must choose a Start Date"))
+ data = {}
+ data['ids'] = self.env.context.get('active_ids', [])
+ data['model'] = self.env.context.get('active_model', 'ir.ui.menu')
+ data['form'] = self.read(
+ ['date_from', 'date_to', 'journal_ids', 'target_move',
+ 'display_account',
+ 'account_ids', 'sortby', 'initial_balance'])[0]
+ used_context = self._build_contexts(data)
+ data['form']['used_context'] = dict(used_context,
+ lang=self.env.context.get(
+ 'lang') or 'en_US')
+ return self.env.ref(
+ 'base_accounting_kit.action_report_bank_book').report_action(self,
+ data=data)
diff --git a/third_party_addons/base_accounting_kit/wizard/account_bank_book_report_views.xml b/third_party_addons/base_accounting_kit/wizard/account_bank_book_report_views.xml
new file mode 100644
index 000000000..876c5eeb3
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_bank_book_report_views.xml
@@ -0,0 +1,42 @@
+
+
+
+
+ account.bank.book.report.view.form
+ account.bank.book.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bank Book Report
+ ir.actions.act_window
+ account.bank.book.report
+
+ form
+ new
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/account_cash_book_report.py b/third_party_addons/base_accounting_kit/wizard/account_cash_book_report.py
new file mode 100644
index 000000000..38a3a9598
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_cash_book_report.py
@@ -0,0 +1,110 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from datetime import date
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError
+
+
+class CashBookWizard(models.TransientModel):
+ _name = 'account.cash.book.report'
+ _description = 'Account Cash Book Report'
+
+ company_id = fields.Many2one('res.company', string='Company',
+ readonly=True,
+ default=lambda self: self.env.company)
+ target_move = fields.Selection([('posted', 'All Posted Entries'),
+ ('all', 'All Entries')], string='Target Moves', required=True,
+ default='posted')
+ date_from = fields.Date(string='Start Date', default=date.today(),
+ required=True)
+ date_to = fields.Date(string='End Date', default=date.today(),
+ required=True)
+ display_account = fields.Selection(
+ [('all', 'All'), ('movement', 'With movements'),
+ ('not_zero', 'With balance is not equal to 0')],
+ string='Display Accounts', required=True, default='movement')
+ sortby = fields.Selection(
+ [('sort_date', 'Date'), ('sort_journal_partner', 'Journal & Partner')],
+ string='Sort by',
+ required=True, default='sort_date')
+ initial_balance = fields.Boolean(string='Include Initial Balances',
+ help='If you selected date, this field allow you to add a row to display the amount of debit/credit/balance that precedes the filter you\'ve set.')
+
+ def _get_default_account_ids(self):
+ journals = self.env['account.journal'].search([('type', '=', 'cash')])
+ accounts = []
+ for journal in journals:
+ accounts.append(journal.default_account_id.id)
+ return accounts
+
+ account_ids = fields.Many2many('account.account',
+ 'account_report_cashbook_account_rel',
+ 'report_id', 'account_id',
+ 'Accounts',
+ default=_get_default_account_ids)
+ journal_ids = fields.Many2many('account.journal',
+ 'account_report_cashbook_journal_rel',
+ 'account_id', 'journal_id',
+ string='Journals', required=True,
+ default=lambda self: self.env[
+ 'account.journal'].search([]))
+
+ @api.onchange('account_ids')
+ def onchange_account_ids(self):
+ if self.account_ids:
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'cash')])
+ accounts = []
+ for journal in journals:
+ accounts.append(journal.default_account_id.id)
+ domain = {'account_ids': [('id', 'in', accounts)]}
+ return {'domain': domain}
+
+ def _build_contexts(self, data):
+ result = {}
+ result['journal_ids'] = 'journal_ids' in data['form'] and data['form'][
+ 'journal_ids'] or False
+ result['state'] = 'target_move' in data['form'] and data['form'][
+ 'target_move'] or ''
+ result['date_from'] = data['form']['date_from'] or False
+ result['date_to'] = data['form']['date_to'] or False
+ result['strict_range'] = True if result['date_from'] else False
+ return result
+
+ def check_report(self):
+ self.ensure_one()
+ if self.initial_balance and not self.date_from:
+ raise UserError(_("You must choose a Start Date"))
+ data = {}
+ data['ids'] = self.env.context.get('active_ids', [])
+ data['model'] = self.env.context.get('active_model', 'ir.ui.menu')
+ data['form'] = self.read(
+ ['date_from', 'date_to', 'journal_ids', 'target_move',
+ 'display_account',
+ 'account_ids', 'sortby', 'initial_balance'])[0]
+ used_context = self._build_contexts(data)
+ data['form']['used_context'] = dict(used_context,
+ lang=self.env.context.get(
+ 'lang') or 'en_US')
+ return self.env.ref(
+ 'base_accounting_kit.action_report_cash_book').report_action(self,
+ data=data)
diff --git a/third_party_addons/base_accounting_kit/wizard/account_cash_book_report_views.xml b/third_party_addons/base_accounting_kit/wizard/account_cash_book_report_views.xml
new file mode 100644
index 000000000..0f1b481e4
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_cash_book_report_views.xml
@@ -0,0 +1,42 @@
+
+
+
+
+ account.cash.book.report.view.form
+ account.cash.book.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cash Book Report
+ ir.actions.act_window
+ account.cash.book.report
+
+ form
+ new
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/account_common_partner_report.py b/third_party_addons/base_accounting_kit/wizard/account_common_partner_report.py
new file mode 100644
index 000000000..d892736a3
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_common_partner_report.py
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+from odoo.tools.misc import get_lang
+
+
+class AccountingCommonPartnerReport(models.TransientModel):
+ _name = 'account.common.partner.report'
+ _inherit = "account.report"
+ _description = 'Account Common Partner Report'
+
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_common_parnter_report_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_common_parnter_report_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ company_id = fields.Many2one('res.company', string='Company', required=True, readonly=True,
+ default=lambda self: self.env.company)
+ journal_ids = fields.Many2many(
+ comodel_name='account.journal',
+ string='Journals',
+ required=True,
+ default=lambda self: self.env['account.journal'].search([('company_id', '=', self.company_id.id)]),
+ domain="[('company_id', '=', company_id)]",
+ )
+ date_from = fields.Date(string='Start Date')
+ date_to = fields.Date(string='End Date')
+ target_move = fields.Selection([('posted', 'All Posted Entries'),
+ ('all', 'All Entries'),
+ ], string='Target Moves', required=True, default='posted')
+
+ result_selection = fields.Selection([('customer', 'Receivable Accounts'),
+ ('supplier', 'Payable Accounts'),
+ ('customer_supplier',
+ 'Receivable and Payable Accounts')
+ ], string="Partner's", required=True,
+ default='customer')
+
+ def _build_contexts(self, data):
+ result = {}
+ result['journal_ids'] = 'journal_ids' in data['form'] and data['form'][
+ 'journal_ids'] or False
+ result['state'] = 'target_move' in data['form'] and data['form'][
+ 'target_move'] or ''
+ result['date_from'] = data['form']['date_from'] or False
+ result['date_to'] = data['form']['date_to'] or False
+ result['strict_range'] = True if result['date_from'] else False
+ return result
+
+ def check_report(self):
+ self.ensure_one()
+ data = {}
+ data['ids'] = self.env.context.get('active_ids', [])
+ data['model'] = self.env.context.get('active_model', 'ir.ui.menu')
+ data['form'] = self.read(['date_from', 'date_to', 'journal_ids', 'target_move', 'company_id'])[0]
+ used_context = self._build_contexts(data)
+ data['form']['used_context'] = dict(used_context, lang=get_lang(self.env).code)
+ return self.with_context(discard_logo_check=True)._print_report(data)
+
+ def _print_report(self, data):
+ data['form'].update(self.read(
+ ['date_from_cmp', 'debit_credit', 'date_to_cmp', 'filter_cmp',
+ 'account_report_id', 'enable_filter', 'label_filter',
+ 'target_move'])[0])
+ return self.env.ref(
+ 'base_accounting_kit.action_report_cash_flow').report_action(self,
+ data=data,
+ config=False)
+
+ def pre_print_report(self, data):
+ data['form'].update(self.read(['result_selection'])[0])
+ return data
diff --git a/third_party_addons/base_accounting_kit/wizard/account_day_book_report.py b/third_party_addons/base_accounting_kit/wizard/account_day_book_report.py
new file mode 100644
index 000000000..ae0cf8c74
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_day_book_report.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from datetime import date
+from odoo import fields, models
+
+
+class DayBookWizard(models.TransientModel):
+ _name = 'account.day.book.report'
+ _description = 'Account Day Book Report'
+
+ company_id = fields.Many2one('res.company', string='Company',
+ readonly=True,
+ default=lambda self: self.env.company)
+ journal_ids = fields.Many2many('account.journal', string='Journals',
+ required=True,
+ default=lambda self: self.env[
+ 'account.journal'].search([]))
+ target_move = fields.Selection([('posted', 'All Posted Entries'),
+ ('all', 'All Entries')], string='Target Moves', required=True,
+ default='posted')
+
+ account_ids = fields.Many2many('account.account',
+ 'account_report_daybook_account_rel',
+ 'report_id', 'account_id',
+ 'Accounts')
+
+ date_from = fields.Date(string='Start Date', default=date.today(),
+ required=True)
+ date_to = fields.Date(string='End Date', default=date.today(),
+ required=True)
+
+ def _build_contexts(self, data):
+ result = {}
+ result['journal_ids'] = 'journal_ids' in data['form'] and data['form'][
+ 'journal_ids'] or False
+ result['state'] = 'target_move' in data['form'] and data['form'][
+ 'target_move'] or ''
+ result['date_from'] = data['form']['date_from'] or False
+ result['date_to'] = data['form']['date_to'] or False
+ result['strict_range'] = True if result['date_from'] else False
+ return result
+
+ def check_report(self):
+ self.ensure_one()
+ data = {}
+ data['ids'] = self.env.context.get('active_ids', [])
+ data['model'] = self.env.context.get('active_model', 'ir.ui.menu')
+ data['form'] = \
+ self.read(['date_from', 'date_to', 'journal_ids', 'target_move',
+ 'account_ids'])[0]
+ used_context = self._build_contexts(data)
+ data['form']['used_context'] = dict(used_context,
+ lang=self.env.context.get(
+ 'lang') or 'en_US')
+ return self.env.ref(
+ 'base_accounting_kit.day_book_pdf_report').report_action(self,
+ data=data)
diff --git a/third_party_addons/base_accounting_kit/wizard/account_day_book_report_views.xml b/third_party_addons/base_accounting_kit/wizard/account_day_book_report_views.xml
new file mode 100644
index 000000000..a4ff10b88
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_day_book_report_views.xml
@@ -0,0 +1,39 @@
+
+
+
+
+ account.day.book.report.view.form
+ account.day.book.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Day Book Report
+ ir.actions.act_window
+ account.day.book.report
+
+ form
+ new
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/account_lock_date.py b/third_party_addons/base_accounting_kit/wizard/account_lock_date.py
new file mode 100644
index 000000000..18546336b
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_lock_date.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, fields, models, SUPERUSER_ID, _
+from odoo.exceptions import UserError
+
+
+class AccountUpdateLockDate(models.TransientModel):
+ _name = 'account.lock.date'
+ _description = 'Lock date for accounting'
+
+ company_id = fields.Many2one(comodel_name='res.company', string="Company",
+ required=True)
+ sale_lock_date = fields.Date(string="Sales Lock Date", help='Prevents creating and modifying invoices up to the date.')
+ purchase_lock_date = fields.Date(string="Purchase Lock date", help='Prevents creating and modifying bills up to the date.')
+ hard_lock_date = fields.Date(string="Lock Everyone",
+ help="No users, including Advisers, can edit accounts prior to and "
+ "inclusive of this date. Use it for fiscal year locking for "
+ "example.")
+ @api.model
+ def default_get(self, field_list):
+ res = super(AccountUpdateLockDate, self).default_get(field_list)
+ company = self.env.company
+ res.update({
+ 'company_id': company.id,
+ 'sale_lock_date': company.sale_lock_date,
+ 'purchase_lock_date': company.purchase_lock_date,
+ 'hard_lock_date': company.hard_lock_date,
+ })
+ return res
+
+ def _check_execute_allowed(self):
+ self.ensure_one()
+ has_adviser_group = self.env.user.has_group(
+ 'account.group_account_manager')
+ if not (has_adviser_group or self.env.uid == SUPERUSER_ID):
+ raise UserError(_("You are not allowed to execute this action."))
+
+ def execute(self):
+ self.ensure_one()
+ self._check_execute_allowed()
+ self.company_id.sudo().write({
+ 'sale_lock_date': self.sale_lock_date,
+ 'purchase_lock_date': self.purchase_lock_date,
+ 'hard_lock_date': self.hard_lock_date,
+ })
diff --git a/third_party_addons/base_accounting_kit/wizard/account_lock_date_views.xml b/third_party_addons/base_accounting_kit/wizard/account_lock_date_views.xml
new file mode 100644
index 000000000..33c6efa14
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_lock_date_views.xml
@@ -0,0 +1,46 @@
+
+
+
+
+ account.lock.date.view.form
+ account.lock.date
+
+
+
+
+
+
+ to lock invoices
+
+
+
+ to lock bills
+
+
+
+
+
+
+
+
+
+ Lock your Fiscal Period
+ account.lock.date
+ form
+ new
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/account_print_journal.py b/third_party_addons/base_accounting_kit/wizard/account_print_journal.py
new file mode 100644
index 000000000..68a305485
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_print_journal.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class AccountPrintJournal(models.TransientModel):
+ _name = "account.print.journal"
+ _inherit = "account.common.journal.report"
+ _description = "Account Print Journal"
+
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_common_print_report_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_common_print_report_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ name = fields.Char(string="Journal Audit", default="Journal Audit", required=True, translate=True)
+ sort_selection = fields.Selection(
+ [('date', 'Date'), ('move_name', 'Journal Entry Number')],
+ 'Entries Sorted by', required=True, default='move_name')
+ journal_ids = fields.Many2many('account.journal', string='Journals',
+ required=True,
+ default=lambda self: self.env[
+ 'account.journal'].search(
+ [('type', 'in', ['sale', 'purchase'])]))
+
+ def _print_report(self, data):
+ data = self.pre_print_report(data)
+ data['form'].update({'sort_selection': self.sort_selection})
+ return self.env.ref(
+ 'base_accounting_kit.action_report_journal').with_context(
+ landscape=True).report_action(self, data=data)
diff --git a/third_party_addons/base_accounting_kit/wizard/account_print_journal_views.xml b/third_party_addons/base_accounting_kit/wizard/account_print_journal_views.xml
new file mode 100644
index 000000000..24f945712
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_print_journal_views.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ account.print.journal.view.form.inherit.base.accounting.kit
+ account.print.journal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/account_report_general_ledger.py b/third_party_addons/base_accounting_kit/wizard/account_report_general_ledger.py
new file mode 100644
index 000000000..40441e1a1
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_report_general_ledger.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models, _
+from odoo.exceptions import UserError
+
+
+class AccountReportGeneralLedger(models.TransientModel):
+ _name = "account.report.general.ledger"
+ _inherit = "account.common.account.report"
+ _description = "General Ledger Report"
+
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_report_general_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_report_general_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ name = fields.Char(string="General Ledger", default="General Ledger", required=True, translate=True)
+ initial_balance = fields.Boolean(string='Include Initial Balances',
+ help='If you selected date, this field '
+ 'allow you to add a row to display '
+ 'the amount of debit/credit/balance '
+ 'that precedes the filter you\'ve '
+ 'set.')
+ sortby = fields.Selection(
+ [('sort_date', 'Date'), ('sort_journal_partner', 'Journal & Partner')],
+ string='Sort by', required=True, default='sort_date')
+ journal_ids = fields.Many2many('account.journal',
+ 'account_report_general_ledger_journal_rel',
+ 'account_id', 'journal_id',
+ string='Journals', required=True)
+
+ def _print_report(self, data):
+ data = self.pre_print_report(data)
+ data['form'].update(self.read(['initial_balance', 'sortby'])[0])
+ if data['form'].get('initial_balance') and not data['form'].get(
+ 'date_from'):
+ raise UserError(_("You must define a Start Date"))
+ records = self.env[data['model']].browse(data.get('ids', []))
+ return self.env.ref(
+ 'base_accounting_kit.action_report_general_ledger').with_context(
+ landscape=True).report_action(records, data=data)
diff --git a/third_party_addons/base_accounting_kit/wizard/account_report_general_ledger_views.xml b/third_party_addons/base_accounting_kit/wizard/account_report_general_ledger_views.xml
new file mode 100644
index 000000000..02685eb84
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_report_general_ledger_views.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ account.report.general.ledger.view.form.inherit.base.accounting.kit
+ account.report.general.ledger
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/account_report_partner_ledger.py b/third_party_addons/base_accounting_kit/wizard/account_report_partner_ledger.py
new file mode 100644
index 000000000..96077abbb
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_report_partner_ledger.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class AccountPartnerLedger(models.TransientModel):
+ _name = "account.report.partner.ledger"
+ _inherit = "account.common.partner.report"
+ _description = "Account Partner Ledger"
+
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_report_partner_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_report_partner_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ name = fields.Char(string="Partner Ledger Report", default="Partner Ledger Report", required=True, translate=True)
+ amount_currency = fields.Boolean("With Currency",
+ help="It adds the currency column on report if the "
+ "currency differs from the company currency.")
+ reconciled = fields.Boolean('Reconciled Entries')
+
+ def _print_report(self, data):
+ data = self.pre_print_report(data)
+ data['form'].update({'reconciled': self.reconciled,
+ 'amount_currency': self.amount_currency})
+ return self.env.ref(
+ 'base_accounting_kit.action_report_partnerledger').report_action(
+ self, data=data)
diff --git a/third_party_addons/base_accounting_kit/wizard/account_report_partner_ledger_views.xml b/third_party_addons/base_accounting_kit/wizard/account_report_partner_ledger_views.xml
new file mode 100644
index 000000000..42a8ca547
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/account_report_partner_ledger_views.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ account.report.partner.ledger.view.form.inherit.base.accounting.kit
+ account.report.partner.ledger
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Partner Ledger
+ account.report.partner.ledger
+ ir.actions.act_window
+ form
+
+ new
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/asset_depreciation_confirmation.py b/third_party_addons/base_accounting_kit/wizard/asset_depreciation_confirmation.py
new file mode 100644
index 000000000..f800d4c68
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/asset_depreciation_confirmation.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models, _
+
+
+class AssetDepreciationConfirmationWizard(models.TransientModel):
+ _name = "asset.depreciation.confirmation"
+ _description = "Asset Depreciation Confirmation"
+
+ date = fields.Date('Account Date', required=True,
+ help="Choose the period for which you want to automatically "
+ "post the depreciation lines of running assets",
+ default=fields.Date.context_today)
+
+ def asset_compute(self):
+ self.ensure_one()
+ context = self._context
+ created_move_ids = self.env['account.asset.asset'].sudo().compute_generated_entries(self.date, asset_type=context.get('asset_type'))
+ moves = self.env['account.move'].browse(created_move_ids)
+ auto_post_draft_moves = moves.filtered(lambda move: move.state == 'draft' and move.auto_post)
+ auto_post_draft_moves.write({'auto_post': 'at_date'})
+ return {
+ 'name': _('Created Asset Moves') if context.get('asset_type') == 'purchase' else _('Created Revenue Moves'),
+ 'view_mode': 'list,form',
+ 'res_model': 'account.move',
+ 'view_id': False,
+ 'domain': "[('id','in',[" + ','.join(str(id) for id in created_move_ids) + "])]",
+ 'type': 'ir.actions.act_window',
+ }
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/asset_depreciation_confirmation_views.xml b/third_party_addons/base_accounting_kit/wizard/asset_depreciation_confirmation_views.xml
new file mode 100644
index 000000000..7cdb6715c
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/asset_depreciation_confirmation_views.xml
@@ -0,0 +1,44 @@
+
+
+
+
+ asset.depreciation.confirmation.view.form
+ asset.depreciation.confirmation
+
+
+
+
+ This wizard will post installment/depreciation lines for the selected month.
+ This will generate journal entries for all related installment lines on this period of asset/revenue recognition as well.
+
+
+
+
+
+
+
+
+
+
+
+ Post Depreciation Lines
+ asset.depreciation.confirmation
+ list,form
+
+ new
+ {'asset_type': 'purchase'}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/asset_modify.py b/third_party_addons/base_accounting_kit/wizard/asset_modify.py
new file mode 100644
index 000000000..5a36f56f1
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/asset_modify.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from lxml import etree
+from odoo import api, fields, models, _
+
+
+class AssetModify(models.TransientModel):
+ _name = 'asset.modify'
+ _description = 'Modify Asset'
+
+ name = fields.Text(string='Reason', required=True)
+ method_number = fields.Integer(string='Number of Depreciations', required=True)
+ method_period = fields.Integer(string='Period Length')
+ method_end = fields.Date(string='Ending date')
+ asset_method_time = fields.Char(compute='_get_asset_method_time',
+ string='Asset Method Time', readonly=True)
+
+ def _get_asset_method_time(self):
+ if self.env.context.get('active_id'):
+ asset = self.env['account.asset.asset'].browse(self.env.context.get('active_id'))
+ self.asset_method_time = asset.method_time
+
+ @api.model
+ def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
+ result = super(AssetModify, self).fields_view_get(view_id, view_type, toolbar=toolbar, submenu=submenu)
+ asset_id = self.env.context.get('active_id')
+ active_model = self.env.context.get('active_model')
+ if active_model == 'account.asset.asset' and asset_id:
+ asset = self.env['account.asset.asset'].browse(asset_id)
+ doc = etree.XML(result['arch'])
+ if asset.method_time == 'number' and doc.xpath("//field[@name='method_end']"):
+ node = doc.xpath("//field[@name='method_end']")[0]
+ node.set('invisible', '1')
+ # setup_modifiers(node, result['fields']['method_end'])
+ elif asset.method_time == 'end' and doc.xpath("//field[@name='method_number']"):
+ node = doc.xpath("//field[@name='method_number']")[0]
+ node.set('invisible', '1')
+ # setup_modifiers(node, result['fields']['method_number'])
+ result['arch'] = etree.tostring(doc, encoding='unicode')
+ return result
+
+ @api.model
+ def default_get(self, fields):
+ res = super(AssetModify, self).default_get(fields)
+ asset_id = self.env.context.get('active_id')
+ asset = self.env['account.asset.asset'].browse(asset_id)
+ if 'name' in fields:
+ res.update({'name': asset.name})
+ if 'method_number' in fields and asset.method_time == 'number':
+ res.update({'method_number': asset.method_number})
+ if 'method_period' in fields:
+ res.update({'method_period': asset.method_period})
+ if 'method_end' in fields and asset.method_time == 'end':
+ res.update({'method_end': asset.method_end})
+ if self.env.context.get('active_id'):
+ active_asset = self.env['account.asset.asset'].browse(self.env.context.get('active_id'))
+ res['asset_method_time'] = active_asset.method_time
+ return res
+
+ def modify(self):
+ """ Modifies the duration of asset for calculating depreciation
+ and maintains the history of old values, in the chatter.
+ """
+ asset_id = self.env.context.get('active_id', False)
+ asset = self.env['account.asset.asset'].browse(asset_id)
+ old_values = {
+ 'method_number': asset.method_number,
+ 'method_period': asset.method_period,
+ 'method_end': asset.method_end,
+ }
+ asset_vals = {
+ 'method_number': self.method_number,
+ 'method_period': self.method_period,
+ 'method_end': self.method_end,
+ }
+ asset.write(asset_vals)
+ asset.compute_depreciation_board()
+ tracked_fields = self.env['account.asset.asset'].fields_get(['method_number', 'method_period', 'method_end'])
+ changes, tracking_value_ids = asset._mail_track(tracked_fields, old_values)
+ if changes:
+ asset.message_post(subject=_('Depreciation board modified'), body=self.name, tracking_value_ids=tracking_value_ids)
+ return {'type': 'ir.actions.act_window_close'}
diff --git a/third_party_addons/base_accounting_kit/wizard/asset_modify_views.xml b/third_party_addons/base_accounting_kit/wizard/asset_modify_views.xml
new file mode 100644
index 000000000..250c21f6e
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/asset_modify_views.xml
@@ -0,0 +1,39 @@
+
+
+
+
+ asset.modify.view.form
+ asset.modify
+
+
+
+
+
+
+
+
+
+
+
+
+ months
+
+
+
+
+
+
+
+
+
+ Modify Asset
+ asset.modify
+ ir.actions.act_window
+ list,form
+
+ new
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/cash_flow_report.py b/third_party_addons/base_accounting_kit/wizard/cash_flow_report.py
new file mode 100644
index 000000000..6fbf2f6d0
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/cash_flow_report.py
@@ -0,0 +1,128 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, fields, models
+
+
+class AccountingReport(models.TransientModel):
+ _name = "cash.flow.report"
+ _inherit = "account.report"
+ _description = "Cash Flow Report"
+
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_cash_flow_report_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_cash_flow_report_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ name = fields.Char(string="Cash Flow Report", default="Cash Flow Report", required=True, translate=True)
+ date_from = fields.Date(string='Start Date')
+ date_to = fields.Date(string='End Date')
+ company_id = fields.Many2one('res.company', string='Company', required=True, readonly=True, default=lambda self: self.env.company)
+ target_move = fields.Selection([('posted', 'All Posted Entries'),
+ ('all', 'All Entries'),
+ ], string='Target Moves', required=True, default='posted')
+ journal_ids = fields.Many2many(
+ comodel_name='account.journal',
+ string='Journals',
+ required=True,
+ default=lambda self: self.env['account.journal'].search([('company_id', '=', self.company_id.id)]),
+ domain="[('company_id', '=', company_id)]",
+ )
+
+ @api.model
+ def _get_account_report(self):
+ reports = []
+ if self._context.get('active_id'):
+ menu = self.env['ir.ui.menu'].browse(
+ self._context.get('active_id')).name
+ reports = self.env['account.financial.report'].search(
+ [('name', 'ilike', menu)])
+ return reports and reports[0] or False
+
+ enable_filter = fields.Boolean(string='Enable Comparison')
+ account_report_id = fields.Many2one('account.financial.report',
+ string='Account Reports',
+ required=True,
+ default=_get_account_report)
+ label_filter = fields.Char(string='Column Label',
+ help="This label will be displayed on report to show the balance"
+ " computed for the given comparison filter.")
+ filter_cmp = fields.Selection(
+ [('filter_no', 'No Filters'), ('filter_date', 'Date')],
+ string='Filter by', required=True, default='filter_no')
+ date_from_cmp = fields.Date(string='Date Start')
+ date_to_cmp = fields.Date(string='Date End')
+ debit_credit = fields.Boolean(string='Display Debit/Credit Columns',
+ help="This option allows you to get more details about the way your balances are computed. Because it is space consuming, we do not allow to use it while doing a comparison.")
+
+ def _build_comparison_context(self, data):
+ result = {}
+ result['journal_ids'] = 'journal_ids' in data['form'] and data['form'][
+ 'journal_ids'] or False
+ result['state'] = 'target_move' in data['form'] and data['form'][
+ 'target_move'] or ''
+ if data['form']['filter_cmp'] == 'filter_date':
+ result['date_from'] = data['form']['date_from_cmp']
+ result['date_to'] = data['form']['date_to_cmp']
+ result['strict_range'] = True
+ return result
+
+ def _build_contexts(self, data):
+ result = {}
+ result['journal_ids'] = 'journal_ids' in data['form'] and data['form']['journal_ids'] or False
+ result['state'] = 'target_move' in data['form'] and data['form']['target_move'] or ''
+ result['date_from'] = data['form']['date_from'] or False
+ result['date_to'] = data['form']['date_to'] or False
+ result['strict_range'] = True if result['date_from'] else False
+ result['company_id'] = data['form']['company_id'][0] or False
+ return result
+
+ # @api.multi
+ def check_report(self):
+ res = super(AccountingReport, self).check_report()
+ data = {}
+ data['form'] = self.read(
+ ['account_report_id', 'date_from_cmp', 'date_to_cmp',
+ 'journal_ids', 'filter_cmp', 'target_move'])[0]
+ for field in ['account_report_id']:
+ if isinstance(data['form'][field], tuple):
+ data['form'][field] = data['form'][field][0]
+ comparison_context = self._build_comparison_context(data)
+ res['data']['form']['comparison_context'] = comparison_context
+ return res
+
+ def _print_report(self, data):
+ raise NotImplementedError()
+
+ def _print_report(self, data):
+ data['form'].update(self.read(
+ ['date_from_cmp', 'debit_credit', 'date_to_cmp', 'filter_cmp',
+ 'account_report_id', 'enable_filter', 'label_filter',
+ 'target_move'])[0])
+ return self.env.ref(
+ 'base_accounting_kit.action_report_cash_flow').report_action(self,
+ data=data,
+ config=False)
diff --git a/third_party_addons/base_accounting_kit/wizard/cash_flow_report_views.xml b/third_party_addons/base_accounting_kit/wizard/cash_flow_report_views.xml
new file mode 100644
index 000000000..671cbd52d
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/cash_flow_report_views.xml
@@ -0,0 +1,54 @@
+
+
+
+
+ cash.flow.report.view.form.inherit.base.accounting.kit
+ cash.flow.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cash Flow Statement
+ cash.flow.report
+ ir.actions.act_window
+ form
+
+ new
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/financial_report.py b/third_party_addons/base_accounting_kit/wizard/financial_report.py
new file mode 100644
index 000000000..4a5ee4986
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/financial_report.py
@@ -0,0 +1,438 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import re
+from odoo import api, models, fields
+
+
+class FinancialReport(models.TransientModel):
+ _name = "financial.report"
+ _inherit = "account.report"
+ _description = "Financial Reports"
+
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_financial_report_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_financial_report_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ name = fields.Char(string="Financial Report", default="Financial Report", required=True, translate=True)
+
+ target_move = fields.Selection([('posted', 'All Posted Entries'),
+ ('all', 'All Entries'),
+ ], string='Target Moves', required=True, default='posted')
+
+ view_format = fields.Selection([
+ ('vertical', 'Vertical'),
+ ('horizontal', 'Horizontal')],
+ default='vertical',
+ string="Format")
+
+
+ def _build_contexts(self, data):
+ result = {}
+ result['journal_ids'] = 'journal_ids' in data['form'] and data['form'][
+ 'journal_ids'] or False
+ result['state'] = 'target_move' in data['form'] and data['form'][
+ 'target_move'] or ''
+ result['date_from'] = data['form']['date_from'] or False
+ result['date_to'] = data['form']['date_to'] or False
+ result['strict_range'] = True if result['date_from'] else False
+ return result
+
+ @api.model
+ def _get_account_report(self):
+ reports = []
+ if self._context.get('active_id'):
+ menu = self.env['ir.ui.menu'].browse(
+ self._context.get('active_id')).name
+ reports = self.env['account.financial.report'].search([
+ ('name', 'ilike', menu)])
+ return reports and reports[0] or False
+
+ enable_filter = fields.Boolean(
+ string='Enable Comparison',
+ default=False)
+ account_report_id = fields.Many2one(
+ 'account.financial.report',
+ string='Account Reports',
+ required=True)
+
+ date_from = fields.Date(string='Start Date')
+ date_to = fields.Date(string='End Date')
+ debit_credit = fields.Boolean(
+ string='Display Debit/Credit Columns',
+ default=True,
+ help="This option allows you to"
+ " get more details about the "
+ "way your balances are computed."
+ " Because it is space consuming,"
+ " we do not allow to use it "
+ "while doing a comparison.")
+ company_id = fields.Many2one(
+ 'res.company',
+ string='Company',
+ index=True,
+ default=lambda self: self.env.company.id)
+
+ def view_report_pdf(self):
+ """This function will be executed when we click the view button
+ from the wizard. Based on the values provided in the wizard, this
+ function will print pdf report"""
+ self.ensure_one()
+ data = dict()
+ data['ids'] = self.env.context.get('active_ids', [])
+ data['model'] = self.env.context.get('active_model', 'ir.ui.menu')
+ data['form'] = self.read(
+ ['date_from', 'enable_filter', 'debit_credit', 'date_to',
+ 'account_report_id', 'target_move', 'view_format',
+ 'company_id'])[0]
+ used_context = self._build_contexts(data)
+ data['form']['used_context'] = dict(
+ used_context,
+ lang=self.env.context.get('lang') or 'en_US')
+
+ report_lines = self.get_account_lines(data['form'])
+ # find the journal items of these accounts
+ journal_items = self.find_journal_items(report_lines, data['form'])
+
+ def set_report_level(rec):
+ """This function is used to set the level of each item.
+ This level will be used to set the alignment in the dynamic reports."""
+ level = 1
+ if not rec['parent']:
+ return level
+ else:
+ for line in report_lines:
+ key = 'a_id' if line['type'] == 'account' else 'id'
+ if line[key] == rec['parent']:
+ return level + set_report_level(line)
+
+ # finding the root
+ for item in report_lines:
+ item['balance'] = round(item['balance'], 2)
+ if not item['parent']:
+ item['level'] = 1
+ parent = item
+ report_name = item['name']
+ id = item['id']
+ report_id = item['r_id']
+ else:
+ item['level'] = set_report_level(item)
+ currency = self._get_currency()
+ data['currency'] = currency
+ data['journal_items'] = journal_items
+ data['report_lines'] = report_lines
+ # checking view type
+ return self.env.ref(
+ 'base_accounting_kit.financial_report_pdf').report_action(self,
+ data)
+
+ def _compute_account_balance(self, accounts):
+ """ compute the balance, debit
+ and credit for the provided accounts
+ """
+ mapping = {
+ 'balance':
+ "COALESCE(SUM(debit),0) - COALESCE(SUM(credit), 0)"
+ " as balance",
+ 'debit': "COALESCE(SUM(debit), 0) as debit",
+ 'credit': "COALESCE(SUM(credit), 0) as credit",
+ }
+
+ res = {}
+ for account in accounts:
+ res[account.id] = dict((fn, 0.0)
+ for fn in mapping.keys())
+ if accounts:
+ tables, where_clause, where_params = (
+ self.env['account.move.line']._query_get())
+ tables = tables.replace(
+ '"', '') if tables else "account_move_line"
+ wheres = [""]
+ if where_clause.strip():
+ wheres.append(where_clause.strip())
+ filters = " AND ".join(wheres)
+ request = ("SELECT account_id as id, " +
+ ', '.join(mapping.values()) +
+ " FROM " + tables +
+ " WHERE account_id IN %s " +
+ filters +
+ " GROUP BY account_id")
+ params = (tuple(accounts._ids),) + tuple(where_params)
+ self.env.cr.execute(request, params)
+ for row in self.env.cr.dictfetchall():
+ res[row['id']] = row
+ return res
+
+ def _compute_report_balance(self, reports):
+ """returns a dictionary with key=the ID of a record and
+ value=the credit, debit and balance amount
+ computed for this record. If the record is of type :
+ 'accounts' : it's the sum of the linked accounts
+ 'account_type' : it's the sum of leaf accounts with
+ such an account_type
+ 'account_report' : it's the amount of the related report
+ 'sum' : it's the sum of the children of this record
+ (aka a 'view' record)"""
+ res = {}
+ fields = ['credit', 'debit', 'balance']
+ for report in reports:
+ if report.id in res:
+ continue
+ res[report.id] = dict((fn, 0.0) for fn in fields)
+ if report.type == 'accounts':
+ # it's the sum of the linked accounts
+ res[report.id]['account'] = self._compute_account_balance(
+ report.account_ids
+ )
+ for value in \
+ res[report.id]['account'].values():
+ for field in fields:
+ res[report.id][field] += value.get(field)
+ elif report.type == 'account_type':
+ # it's the sum the leaf accounts
+ # with such an account type
+ accounts = self.env['account.account'].search([
+ ('account_type', '=', report.account_type_ids)
+ ])
+ if report.name == "Expenses":
+ accounts = self.env['account.account'].search([
+ ('account_type', 'in', ["expense","expense_depreciation","expense_direct_cost"])
+ ])
+ if report.name == "Liability":
+ accounts = self.env['account.account'].search([
+ ('account_type', 'in', ["liability_payable","equity","liability_current","liability_non_current"])
+ ])
+ if report.name == "Assets":
+ accounts = self.env['account.account'].search([
+ ('account_type', 'in', ["asset_receivable","asset_cash","asset_current","asset_non_current","asset_prepayments","asset_fixed"])
+ ])
+
+ res[report.id]['account'] = self._compute_account_balance(
+ accounts)
+
+ for value in res[report.id]['account'].values():
+ for field in fields:
+ res[report.id][field] += value.get(field)
+ elif report.type == 'account_report' and report.account_report_id:
+ # it's the amount of the linked report
+ res2 = self._compute_report_balance(report.account_report_id)
+ for key, value in res2.items():
+ for field in fields:
+ res[report.id][field] += value[field]
+ elif report.type == 'sum':
+ # it's the sum of the children of this account.report
+ res2 = self._compute_report_balance(report.children_ids)
+ for key, value in res2.items():
+ for field in fields:
+ res[report.id][field] += value[field]
+ return res
+
+ def get_account_lines(self, data):
+ lines = []
+ account_report = self.env['account.financial.report'].search([
+ ('id', '=', data['account_report_id'][0])
+ ])
+ child_reports = account_report._get_children_by_order()
+ res = self.with_context(
+ data.get('used_context'))._compute_report_balance(child_reports)
+ if data['enable_filter']:
+ comparison_res = self._compute_report_balance(child_reports)
+ for report_id, value in comparison_res.items():
+ res[report_id]['comp_bal'] = value['balance']
+ report_acc = res[report_id].get('account')
+ if report_acc:
+ for account_id, val in \
+ comparison_res[report_id].get('account').items():
+ report_acc[account_id]['comp_bal'] = val['balance']
+
+ for report in child_reports:
+ r_name = str(report.name)
+ r_name = re.sub('[^0-9a-zA-Z]+', '', r_name)
+ if report.parent_id:
+ p_name = str(report.parent_id.name)
+ p_name = re.sub('[^0-9a-zA-Z]+', '', p_name) + str(
+ report.parent_id.id)
+ else:
+ p_name = False
+ vals = {
+ 'r_id': report.id,
+ 'id': r_name + str(report.id),
+ 'sequence': report.sequence,
+ 'parent': p_name,
+ 'name': report.name,
+ 'balance': res[report.id]['balance'] * int(report.sign),
+ 'type': 'report',
+ 'level': bool(
+ report.style_overwrite) and report.style_overwrite or
+ report.level,
+ 'account_type': report.type or False,
+ # used to underline the financial report balances
+ }
+ if data['debit_credit']:
+ vals['debit'] = res[report.id]['debit']
+ vals['credit'] = res[report.id]['credit']
+
+ if data['enable_filter']:
+ vals['balance_cmp'] = res[report.id]['comp_bal'] * int(
+ report.sign)
+
+ lines.append(vals)
+ if report.display_detail == 'no_detail':
+ # the rest of the loop is
+ # used to display the details of the
+ # financial report, so it's not needed here.
+ continue
+
+ if res[report.id].get('account'):
+ sub_lines = []
+ for account_id, value \
+ in res[report.id]['account'].items():
+ # if there are accounts to display,
+ # we add them to the lines with a level equals
+ # to their level in
+ # the COA + 1 (to avoid having them with a too low level
+ # that would conflicts with the level of data
+ # financial reports for Assets, liabilities...)
+ flag = False
+ account = self.env['account.account'].browse(account_id)
+ # new_r_name = str(report.name)
+ # new_r_name = new_r_name.replace(" ", "-") + "-"
+ vals = {
+ 'account': account.id,
+ 'a_id': account.code + re.sub('[^0-9a-zA-Z]+', 'acnt',
+ account.name) + str(
+ account.id),
+ 'name': account.code + '-' + account.name,
+ 'balance': value['balance'] * int(report.sign) or 0.0,
+ 'type': 'account',
+ 'parent': r_name + str(report.id),
+ 'level': (
+ report.display_detail == 'detail_with_hierarchy' and
+ 4),
+ 'account_type': account.account_type,
+ }
+ if data['debit_credit']:
+ vals['debit'] = value['debit']
+ vals['credit'] = value['credit']
+ for company in account.company_ids:
+ if not company.currency_id.is_zero(
+ vals['debit']) or \
+ not company.currency_id.is_zero(
+ vals['credit']):
+ flag = True
+ for company in account.company_ids:
+ if not company.currency_id.is_zero(
+ vals['balance']):
+ flag = True
+ if data['enable_filter']:
+ vals['balance_cmp'] = value['comp_bal'] * int(
+ report.sign)
+ for company in account.company_ids:
+ if not company.currency_id.is_zero(
+ vals['balance_cmp']):
+ flag = True
+ if flag:
+ sub_lines.append(vals)
+ lines += sorted(sub_lines,
+ key=lambda sub_line: sub_line['name'])
+ return lines
+
+ def find_journal_items(self, report_lines, form):
+ cr = self.env.cr
+ journal_items = []
+ for i in report_lines:
+ if i['type'] == 'account':
+ account = i['account']
+ if form['target_move'] == 'posted':
+ search_query = ("select aml.id, am.id as j_id, "
+ "aml.account_id, aml.date, aml.name as "
+ "label, am.name, (aml.debit-aml.credit) as "
+ "balance, aml.debit, aml.credit, "
+ "aml.partner_id from "
+ "account_move_line aml "
+ "join account_move am on (aml.move_id=am.id"
+ " and am.state=%s) where aml.account_id=%s")
+ vals = [form['target_move']]
+ else:
+ search_query = ("select aml.id, am.id as j_id, "
+ "aml.account_id, aml.date, aml.name as "
+ "label, am.name, (aml.debit-aml.credit) as "
+ "balance, aml.debit, aml.credit, "
+ "aml.partner_id from account_move_line aml"
+ " join account_move am on "
+ "(aml.move_id=am.id) where "
+ "aml.account_id=%s")
+ vals = []
+ if form['date_from'] and form['date_to']:
+ search_query += " and aml.date>=%s and aml.date<=%s"
+ vals += [account, form['date_from'], form['date_to']]
+ elif form['date_from']:
+ search_query += " and aml.date>=%s"
+ vals += [account, form['date_from']]
+ elif form['date_to']:
+ search_query += " and aml.date<=%s"
+ vals += [account, form['date_to']]
+ else:
+ vals += [account]
+ cr.execute(search_query, tuple(vals))
+ items = cr.dictfetchall()
+
+ for j in items:
+ temp = j['id']
+ j['id'] = re.sub('[^0-9a-zA-Z]+', '', i['name']) + str(
+ temp)
+ j['p_id'] = str(i['a_id'])
+ j['type'] = 'journal_item'
+ journal_items.append(j)
+ return journal_items
+
+ @api.model
+ def _get_currency(self):
+ journal = self.env['account.journal'].browse(
+ self.env.context.get('default_journal_id', False))
+ if journal.currency_id:
+ return journal.currency_id.id
+ return self.env.company.currency_id.symbol
+
+
+class ProfitLossPdf(models.AbstractModel):
+ """ Abstract model for generating PDF report value and send to template """
+
+ _name = 'report.base_accounting_kit.report_financial'
+ _description = 'Financial Report'
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ """ Provide report values to template """
+ ctx = {
+ 'data': data,
+ 'journal_items': data['journal_items'],
+ 'report_lines': data['report_lines'],
+ 'account_report': data['form']['account_report_id'][1],
+ 'currency': data['currency'],
+ }
+ return ctx
diff --git a/third_party_addons/base_accounting_kit/wizard/financial_report_views.xml b/third_party_addons/base_accounting_kit/wizard/financial_report_views.xml
new file mode 100644
index 000000000..4c104048f
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/financial_report_views.xml
@@ -0,0 +1,60 @@
+
+
+
+
+ financial.report.view.form
+ financial.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Profit and Loss
+ financial.report
+ ir.actions.act_window
+ form
+
+ new
+
+
+
+
+ Balance Sheet
+ financial.report
+ ir.actions.act_window
+ form
+
+ new
+
+
+
+
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/import_bank_statement.py b/third_party_addons/base_accounting_kit/wizard/import_bank_statement.py
new file mode 100644
index 000000000..4b6e1fd22
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/import_bank_statement.py
@@ -0,0 +1,442 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Akhil Ashok (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+import base64
+import csv
+import mimetypes
+import os
+import re
+from collections import defaultdict
+from datetime import date, datetime
+from io import BytesIO, StringIO
+
+import openpyxl
+from ofxparse import OfxParser
+from pypdf import PdfReader
+from qifparse.parser import QifParser
+
+from odoo import _, fields, models
+from odoo.exceptions import ValidationError
+
+
+class ImportBankStatement(models.TransientModel):
+ """Import supported bank statement formats or store other uploads safely."""
+
+ _name = "import.bank.statement"
+ _description = "Import button"
+ _rec_name = "file_name"
+
+ SUPPORTED_IMPORT_EXTENSIONS = {'.csv', '.xlsx', '.ofx', '.qif', '.pdf'}
+
+ attachment = fields.Binary(
+ string="File",
+ required=True,
+ help="Choose the file to import or store with the journal.",
+ )
+ file_name = fields.Char(string="File Name", help="Name of the file")
+ journal_id = fields.Many2one(
+ 'account.journal',
+ string="Journal ID",
+ required=True,
+ help="Journal in which the file importing",
+ )
+
+ def _get_file_extension(self):
+ self.ensure_one()
+ return os.path.splitext(self.file_name or '')[1].lower()
+
+ def _get_file_content(self):
+ self.ensure_one()
+ try:
+ return base64.b64decode(self.attachment or b'')
+ except Exception as exc:
+ raise ValidationError(_("The uploaded file could not be decoded.")) from exc
+
+ def _get_statement_reference(self):
+ self.ensure_one()
+ return os.path.splitext(self.file_name or '')[0] or _("Imported Statement")
+
+ def _parse_amount(self, value, label):
+ if value in (None, ''):
+ raise ValidationError(_("%s is not set") % label)
+ try:
+ return float(str(value).strip())
+ except (TypeError, ValueError) as exc:
+ raise ValidationError(_("%s is invalid: %s") % (label, value)) from exc
+
+ def _parse_date(self, value, date_format="%Y-%m-%d"):
+ if not value:
+ return fields.Date.today()
+ if isinstance(value, datetime):
+ return value.date()
+ if isinstance(value, date):
+ return value
+ value_str = str(value).strip()
+ date_formats = []
+ if date_format:
+ date_formats.append(date_format)
+ date_formats.extend(["%d-%m-%Y", "%d/%m/%Y", "%d.%m.%Y", "%Y-%m-%d"])
+ for fmt in dict.fromkeys(date_formats):
+ try:
+ return datetime.strptime(value_str, fmt).date()
+ except ValueError:
+ continue
+ raise ValidationError(_("Invalid date value: %s") % value)
+
+ def _find_partner(self, partner_name):
+ if not partner_name:
+ return False
+ partner = self.env['res.partner'].search(
+ [('name', '=', str(partner_name).strip())],
+ limit=1,
+ )
+ if not partner:
+ raise ValidationError(_("Partner does not exist: %s") % partner_name)
+ return partner
+
+ def _build_statement_line_vals(self, amount, transaction_date, payment_ref, partner=False, amount_currency=None):
+ line_vals = {
+ 'date': transaction_date,
+ 'payment_ref': payment_ref or self.file_name or _("Imported file"),
+ 'journal_id': self.journal_id.id,
+ 'amount': amount,
+ }
+ if partner:
+ line_vals['partner_id'] = partner.id
+ if amount_currency not in (None, ''):
+ line_vals['amount_currency'] = amount_currency
+ return line_vals
+
+ def _normalize_header(self, value):
+ return re.sub(r'[^a-z0-9]+', ' ', str(value or '').strip().lower()).strip()
+
+ def _find_header_index(self, headers, keywords):
+ for index, header in enumerate(headers):
+ header_tokens = set(header.split()) if header else set()
+ if header and any(
+ keyword == header or keyword in header_tokens or f"{keyword} " in f"{header} "
+ for keyword in keywords
+ ):
+ return index
+ return None
+
+ def _create_statement(self, line_vals_list):
+ if not line_vals_list:
+ raise ValidationError(_("There is no data to import."))
+ statement = self.env['account.bank.statement'].create({
+ 'journal_id': self.journal_id.id,
+ 'reference': self.file_name or self._get_statement_reference(),
+ 'line_ids': [(0, 0, line_vals) for line_vals in line_vals_list],
+ })
+ self._attach_file_to_record(statement)
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': _('Statement'),
+ 'view_mode': 'form',
+ 'res_model': 'account.bank.statement',
+ 'res_id': statement.id,
+ }
+
+ def _attach_file_to_record(self, record):
+ self.ensure_one()
+ attachment = self.env['ir.attachment'].create({
+ 'name': self.file_name or _("Uploaded file"),
+ 'datas': self.attachment,
+ 'type': 'binary',
+ 'mimetype': mimetypes.guess_type(self.file_name or '')[0] or 'application/octet-stream',
+ 'res_model': record._name,
+ 'res_id': record.id,
+ })
+ if 'attachment_ids' in record._fields:
+ record.write({'attachment_ids': [(4, attachment.id)]})
+ return attachment
+
+ def _attach_file_to_journal(self, message=None):
+ self.ensure_one()
+ self._attach_file_to_record(self.journal_id)
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'display_notification',
+ 'params': {
+ 'title': _('File Uploaded'),
+ 'message': message or _(
+ "The file '%s' was uploaded and attached to journal '%s'. "
+ "Only supported bank statement formats are imported into bank statement lines."
+ ) % ((self.file_name or _("Uploaded file")), self.journal_id.display_name),
+ 'type': 'success',
+ 'sticky': False,
+ },
+ 'next': {'type': 'ir.actions.act_window_close'},
+ }
+
+ def _parse_csv_lines(self):
+ try:
+ csv_text = self._get_file_content().decode('utf-8-sig')
+ except UnicodeDecodeError as exc:
+ raise ValidationError(_("Choose a valid CSV file encoded in UTF-8.")) from exc
+
+ reader = csv.reader(StringIO(csv_text))
+ line_vals_list = []
+ for row_number, row in enumerate(reader, start=1):
+ if row_number == 1:
+ continue
+ if not any(str(value).strip() for value in row):
+ continue
+ if len(row) < 5:
+ raise ValidationError(
+ _("Invalid row format in CSV file at line %s.") % row_number
+ )
+
+ payment_ref = str(row[0]).strip()
+ if not payment_ref:
+ raise ValidationError(_("Account name is not set at line %s.") % row_number)
+
+ amount = self._parse_amount(row[1], _("Amount"))
+ amount_currency = False
+ if str(row[2]).strip():
+ amount_currency = self._parse_amount(row[2], _("Amount Currency"))
+ transaction_date = self._parse_date(row[3])
+ partner = self._find_partner(row[4]) if str(row[4]).strip() else False
+
+ line_vals_list.append(
+ self._build_statement_line_vals(
+ amount=amount,
+ transaction_date=transaction_date,
+ payment_ref=payment_ref,
+ partner=partner,
+ amount_currency=amount_currency,
+ )
+ )
+ return line_vals_list
+
+ def _parse_xlsx_lines(self):
+ try:
+ workbook = openpyxl.load_workbook(
+ filename=BytesIO(self._get_file_content()),
+ data_only=True,
+ )
+ except Exception as exc:
+ raise ValidationError(_("Choose a valid XLSX file.")) from exc
+
+ worksheet = workbook.active
+ header_row = next(
+ worksheet.iter_rows(min_row=1, max_row=1, values_only=True),
+ (),
+ )
+ headers = [self._normalize_header(value) for value in header_row]
+
+ date_index = self._find_header_index(headers, ['date'])
+ description_index = self._find_header_index(headers, ['description', 'remarks', 'narration', 'particular', 'transaction'])
+ withdrawal_index = self._find_header_index(headers, ['withdrawal', 'debit', 'dr'])
+ deposit_index = self._find_header_index(headers, ['deposit', 'credit', 'cr'])
+ amount_index = self._find_header_index(headers, ['amount'])
+ partner_index = self._find_header_index(headers, ['partner', 'payee'])
+
+ line_vals_list = []
+ for row_number, row in enumerate(
+ worksheet.iter_rows(min_row=2, values_only=True),
+ start=2,
+ ):
+ if not row or not any(value not in (None, '') for value in row):
+ continue
+
+ transaction_date = row[date_index] if date_index is not None and date_index < len(row) else False
+ payment_ref = row[description_index] if description_index is not None and description_index < len(row) else False
+ partner_name = row[partner_index] if partner_index is not None and partner_index < len(row) else False
+
+ withdrawal_value = row[withdrawal_index] if withdrawal_index is not None and withdrawal_index < len(row) else None
+ deposit_value = row[deposit_index] if deposit_index is not None and deposit_index < len(row) else None
+ amount_value = row[amount_index] if amount_index is not None and amount_index < len(row) else None
+
+ if not payment_ref:
+ payment_ref = self.file_name or _("Imported file")
+
+ if withdrawal_value not in (None, '') or deposit_value not in (None, ''):
+ withdrawal_amount = abs(self._parse_amount(withdrawal_value, _("Withdrawal"))) if withdrawal_value not in (None, '') else 0.0
+ deposit_amount = abs(self._parse_amount(deposit_value, _("Deposit"))) if deposit_value not in (None, '') else 0.0
+ amount = deposit_amount - withdrawal_amount
+ else:
+ amount = self._parse_amount(amount_value, _("Amount"))
+
+ line_vals_list.append(
+ self._build_statement_line_vals(
+ amount=amount,
+ transaction_date=self._parse_date(transaction_date),
+ payment_ref=str(payment_ref).strip(),
+ partner=self._find_partner(partner_name) if partner_name else False,
+ )
+ )
+ return line_vals_list
+
+ def _parse_ofx_lines(self):
+ try:
+ ofx_file = OfxParser.parse(BytesIO(self._get_file_content()))
+ except Exception as exc:
+ raise ValidationError(_("Wrong OFX file format.")) from exc
+
+ if not ofx_file.account:
+ raise ValidationError(_("No account information found in OFX file."))
+ if not ofx_file.account.statement:
+ raise ValidationError(_("No statement information found in OFX file."))
+
+ line_vals_list = []
+ for transaction in ofx_file.account.statement.transactions:
+ if transaction.amount == 0:
+ continue
+ partner = self._find_partner(transaction.payee) if transaction.payee else False
+ line_vals_list.append(
+ self._build_statement_line_vals(
+ amount=transaction.amount,
+ transaction_date=self._parse_date(transaction.date),
+ payment_ref=transaction.memo or transaction.payee or _("OFX Import"),
+ partner=partner,
+ )
+ )
+ return line_vals_list
+
+ def _parse_qif_lines(self):
+ try:
+ qif = QifParser().parse(
+ StringIO(self._get_file_content().decode('utf-8-sig', errors='ignore'))
+ )
+ except Exception as exc:
+ raise ValidationError(_("Wrong QIF file format.")) from exc
+
+ line_vals_list = []
+ for transaction in qif.get_transactions():
+ payee = transaction.payee or transaction.memo or _("QIF Import")
+ line_vals_list.append(
+ self._build_statement_line_vals(
+ amount=self._parse_amount(transaction.amount, _("Amount")),
+ transaction_date=self._parse_date(transaction.date),
+ payment_ref=payee,
+ partner=self._find_partner(transaction.payee) if transaction.payee else False,
+ )
+ )
+ return line_vals_list
+
+ def _parse_pdf_lines(self):
+ try:
+ reader = PdfReader(BytesIO(self._get_file_content()))
+ except Exception as exc:
+ raise ValidationError(_("Choose a valid PDF file.")) from exc
+
+ line_vals_list = []
+ date_pattern = re.compile(r'^\d{2}\.\d{2}\.\d{4}$')
+
+ for page in reader.pages:
+ text_items = []
+
+ def visitor(text, cm, tm, font_dict, font_size):
+ value = (text or '').strip()
+ if value:
+ text_items.append((round(tm[5], 2), round(tm[4], 2), value))
+
+ page.extract_text(visitor_text=visitor)
+ if not text_items:
+ continue
+
+ deposit_header_x = next((x for y, x, text in text_items if text == 'Deposit Amount'), 520.0)
+ rows_by_y = defaultdict(list)
+ for y, x, text in text_items:
+ rows_by_y[y].append((x, text))
+
+ parsed_rows = []
+ for y in sorted(rows_by_y.keys(), reverse=True):
+ row = sorted(rows_by_y[y], key=lambda item: item[0])
+ if len(row) < 4:
+ continue
+ date_text = next((text for x, text in row if date_pattern.match(text)), False)
+ if not date_text:
+ continue
+
+ amount_cell = row[-1]
+ amount_x, amount_text = amount_cell
+ try:
+ amount = self._parse_amount(amount_text.replace(',', ''), _("Amount"))
+ except ValidationError:
+ continue
+
+ remark_parts = [
+ text for x, text in row
+ if x > 120 and x < amount_x - 10 and not date_pattern.match(text)
+ ]
+ payment_ref = " ".join(remark_parts).strip() or _("PDF Import")
+ parsed_rows.append({
+ 'amount': amount,
+ 'amount_x': amount_x,
+ 'payment_ref': payment_ref,
+ 'transaction_date': self._parse_date(date_text, "%d.%m.%Y"),
+ })
+
+ if not parsed_rows:
+ continue
+
+ amount_positions = sorted({row['amount_x'] for row in parsed_rows})
+ amount_split_x = None
+ if len(amount_positions) > 1:
+ gaps = [
+ (amount_positions[index + 1] - amount_positions[index], index)
+ for index in range(len(amount_positions) - 1)
+ ]
+ largest_gap, gap_index = max(gaps, key=lambda item: item[0])
+ if largest_gap >= 20:
+ amount_split_x = (
+ amount_positions[gap_index] + amount_positions[gap_index + 1]
+ ) / 2.0
+
+ if amount_split_x is None:
+ amount_split_x = deposit_header_x + 20.0
+
+ for row in parsed_rows:
+ signed_amount = row['amount'] if row['amount_x'] >= amount_split_x else -row['amount']
+ line_vals_list.append(
+ self._build_statement_line_vals(
+ amount=signed_amount,
+ transaction_date=row['transaction_date'],
+ payment_ref=row['payment_ref'],
+ )
+ )
+
+ return line_vals_list
+
+ def action_statement_import(self):
+ """Import supported bank files or store unsupported files as attachments."""
+ self.ensure_one()
+ extension = self._get_file_extension()
+
+ if extension not in self.SUPPORTED_IMPORT_EXTENSIONS:
+ return self._attach_file_to_journal()
+ if extension == '.csv':
+ return self._create_statement(self._parse_csv_lines())
+ if extension == '.xlsx':
+ return self._create_statement(self._parse_xlsx_lines())
+ if extension == '.ofx':
+ return self._create_statement(self._parse_ofx_lines())
+ if extension == '.pdf':
+ line_vals_list = self._parse_pdf_lines()
+ if line_vals_list:
+ return self._create_statement(line_vals_list)
+ return self._attach_file_to_journal(_(
+ "The file '%s' was uploaded and attached to journal '%s', "
+ "but no bank transactions could be detected from this PDF layout."
+ ) % ((self.file_name or _("Uploaded file")), self.journal_id.display_name))
+ return self._create_statement(self._parse_qif_lines())
diff --git a/third_party_addons/base_accounting_kit/wizard/import_bank_statement_views.xml b/third_party_addons/base_accounting_kit/wizard/import_bank_statement_views.xml
new file mode 100644
index 000000000..46177b600
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/import_bank_statement_views.xml
@@ -0,0 +1,41 @@
+
+
+
+
+ import.bank.statement.view.form
+ import.bank.statement
+
+
+
+
+
+ Upload any file. CSV, XLSX, OFX, QIF, and supported text-based PDF bank statements are imported; other files are attached to the selected journal.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ import.bank.statement.view.action
+ ir.actions.act_window
+ import.bank.statement
+ list,form
+
+ new
+
+
diff --git a/third_party_addons/base_accounting_kit/wizard/kit_account_tax_report.py b/third_party_addons/base_accounting_kit/wizard/kit_account_tax_report.py
new file mode 100644
index 000000000..a7a5992cb
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/kit_account_tax_report.py
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+from odoo.tools.misc import get_lang
+
+
+class AccountTaxReport(models.TransientModel):
+ _name = 'kit.account.tax.report'
+ _inherit = "account.report"
+ _description = 'Tax Report'
+
+ section_main_report_ids = fields.Many2many(string="Section Of",
+ comodel_name='account.report',
+ relation="account_tax_report_section_rel",
+ column1="sub_report_id",
+ column2="main_report_id")
+ section_report_ids = fields.Many2many(string="Sections",
+ comodel_name='account.report',
+ relation="account_tax_report_section_rel",
+ column1="main_report_id",
+ column2="sub_report_id")
+ company_id = fields.Many2one('res.company', string='Company', required=True, readonly=True, default=lambda self: self.env.company)
+ name = fields.Char(string="Tax Report", default="Tax Report",
+ required=True, translate=True)
+ date_from = fields.Date(string='Start Date')
+ date_to = fields.Date(string='End Date')
+ journal_ids = fields.Many2many(
+ comodel_name='account.journal',
+ string='Journals',
+ required=True,
+ default=lambda self: self.env['account.journal'].search([('company_id', '=', self.company_id.id)]),
+ domain="[('company_id', '=', company_id)]",
+ )
+ target_move = fields.Selection([('posted', 'All Posted Entries'),
+ ('all', 'All Entries'),
+ ], string='Target Moves', required=True, default='posted')
+
+ def _build_contexts(self, data):
+ result = {}
+ result['journal_ids'] = 'journal_ids' in data['form'] and data['form']['journal_ids'] or False
+ result['state'] = 'target_move' in data['form'] and data['form']['target_move'] or ''
+ result['date_from'] = data['form']['date_from'] or False
+ result['date_to'] = data['form']['date_to'] or False
+ result['strict_range'] = True if result['date_from'] else False
+ result['company_id'] = data['form']['company_id'][0] or False
+ return result
+
+ def check_report(self):
+ self.ensure_one()
+ data = {}
+ data['ids'] = self.env.context.get('active_ids', [])
+ data['model'] = self.env.context.get('active_model', 'ir.ui.menu')
+ data['form'] = self.read(['date_from', 'date_to', 'journal_ids', 'target_move', 'company_id'])[0]
+ used_context = self._build_contexts(data)
+ data['form']['used_context'] = dict(used_context, lang=get_lang(self.env).code)
+ return self.with_context(discard_logo_check=True)._print_report(data)
+
+ def pre_print_report(self, data):
+ data['form'].update(self.read(['display_account'])[0])
+ return data
+
+ def _print_report(self, data):
+ return self.env.ref(
+ 'base_accounting_kit.action_report_account_tax').report_action(
+ self, data=data)
diff --git a/third_party_addons/base_accounting_kit/wizard/kit_account_tax_report_views.xml b/third_party_addons/base_accounting_kit/wizard/kit_account_tax_report_views.xml
new file mode 100644
index 000000000..b81cc06ea
--- /dev/null
+++ b/third_party_addons/base_accounting_kit/wizard/kit_account_tax_report_views.xml
@@ -0,0 +1,30 @@
+
+
+
+
+ kit.account.tax.report.view.form.inherit.base.accounting.kit
+ kit.account.tax.report
+
+
+
+
+
+
+
+
+ Tax Reports
+ kit.account.tax.report
+ ir.actions.act_window
+ form
+
+ {}
+ new
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/README.rst b/third_party_addons/dynamic_accounts_report/README.rst
new file mode 100644
index 000000000..41d1a217a
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/README.rst
@@ -0,0 +1,51 @@
+.. image:: https://img.shields.io/badge/licence-LGPL--3-green.svg
+ :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
+ :alt: License: LGPL-3
+
+Dynamic Financial Reports
+=========================
+* Dynamic financial reports for Odoo 18 community editions
+
+Configuration
+=============
+* No need of additional configuration.
+
+License
+-------
+Lesser General Public License, Version 3 (LGPL-3).
+(https://www.gnu.org/licenses/lgpl-3.0.en.html)
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+=======
+* Developer: (v15) Jibin @ Cybrosys,
+ (v15) Mehjabin @ Cybrosys,
+ (v15) Mily @ Cybrosys,
+ (v16) Aneesh @ Cybrosys,
+ (v17) Ammu Raj @ Cybrosys,
+ (v18) Bhagyadev @ Cybrosys, Contact: odoo@cybrosys.com
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/third_party_addons/dynamic_accounts_report/__init__.py b/third_party_addons/dynamic_accounts_report/__init__.py
new file mode 100644
index 000000000..7a4467bb9
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import models
diff --git a/third_party_addons/dynamic_accounts_report/__manifest__.py b/third_party_addons/dynamic_accounts_report/__manifest__.py
new file mode 100644
index 000000000..188916135
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/__manifest__.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+{
+ 'name': 'Odoo18 Dynamic Accounting Reports',
+ 'version': '18.0.1.3.4',
+ 'category': 'Accounting',
+ 'summary': "Odoo 18 Accounting Financial Reports,Dynamic Accounting Reports, Dynamic Financial Reports,Dynamic Report Odoo18, Odoo18,Financial Reports, Odoo18 Accounting,Accounting, Odoo Apps",
+ 'description': "This module creates dynamic Accounting General Ledger, Trial"
+ "Balance, Balance Sheet, Profit and Loss, Cash Book, Partner"
+ "Ledger, Aged Payable, Aged Receivable, Bank book and Tax"
+ "Reports in Odoo 18 community edition, Reporting, Odoo18 Accounting, odoo18 reporting, odoo18, odoo18 accounts reports",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['base_accounting_kit'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'views/accounting_report_views.xml',
+ 'report/trial_balance.xml',
+ 'report/general_ledger_templates.xml',
+ 'report/financial_report_template.xml',
+ 'report/partner_ledger_templates.xml',
+ 'report/financial_reports_views.xml',
+ 'report/balance_sheet_report_templates.xml',
+ 'report/bank_book_templates.xml',
+ 'report/aged_payable_templates.xml',
+ 'report/aged_receivable_templates.xml',
+ 'report/tax_report_templates.xml',
+ ],
+ 'assets': {
+ 'web.assets_backend': [
+ 'dynamic_accounts_report/static/src/xml/general_ledger_view.xml',
+ 'dynamic_accounts_report/static/src/xml/trial_balance_view.xml',
+ 'dynamic_accounts_report/static/src/xml/cash_flow_templates.xml',
+ 'dynamic_accounts_report/static/src/xml/bank_flow_templates.xml',
+ 'dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml',
+ 'dynamic_accounts_report/static/src/xml/balance_sheet_template.xml',
+ 'dynamic_accounts_report/static/src/xml/partner_ledger_view.xml',
+ 'dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml',
+ 'dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml',
+ 'dynamic_accounts_report/static/src/xml/tax_report_views.xml',
+ 'dynamic_accounts_report/static/src/css/accounts_report.css',
+ 'dynamic_accounts_report/static/src/js/general_ledger.js',
+ 'dynamic_accounts_report/static/src/js/trial_balance.js',
+ 'dynamic_accounts_report/static/src/js/cash_flow.js',
+ 'dynamic_accounts_report/static/src/js/bank_flow.js',
+ 'dynamic_accounts_report/static/src/js/profit_and_loss.js',
+ 'dynamic_accounts_report/static/src/js/balance_sheet.js',
+ 'dynamic_accounts_report/static/src/js/partner_ledger.js',
+ 'dynamic_accounts_report/static/src/js/aged_payable_report.js',
+ 'dynamic_accounts_report/static/src/js/aged_receivable_report.js',
+ 'dynamic_accounts_report/static/src/js/tax_report.js',
+ # 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js' #FIX Not need as this version has a
+ # conflict with the version of jquery used by the odoo
+ ],
+ },
+ 'images': ['static/description/banner.png'],
+ 'license': 'LGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/third_party_addons/dynamic_accounts_report/doc/RELEASE_NOTES.md b/third_party_addons/dynamic_accounts_report/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..2248868d9
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/doc/RELEASE_NOTES.md
@@ -0,0 +1,56 @@
+## Module
+
+#### 21.11.2024
+#### Version 18.0.1.0.1
+#### ADD
+- Initial commit for Dynamic Accounts Reports
+
+#### 13.12.2024
+#### Version 18.0.1.1.1
+#### UPDT
+- Fixed the errors in the filters.
+
+#### 27.01.2025
+#### Version 18.0.1.1.2
+#### UPDT
+- Fixed the errors in the filters.
+
+#### 16.05.2025
+#### Version 18.0.1.2.3
+#### UPDT
+- Bug Fixing and added thousand separators
+
+#### 28.07.2025
+#### Version 18.0.1.2.4
+#### UPDT
+- Bug Fixing in the accounting report (Trial Balance).
+
+#### 15.10.2025
+#### Version 18.0.1.2.5
+#### UPDT
+- Bug Fixing in the accounting report (Trial Balance).
+
+#### 03.12.2025
+#### Version 18.0.1.2.6
+#### BUG FIX
+- Removed the controller for xlsx report generation which was already present in the dependent module base_accounting_kit.
+
+#### 12.12.2025
+#### Version 18.0.1.3.0
+#### UPDT
+- Commit for adding partner, partner tag, and account filter in the Partner Ledger report.
+
+#### 22.12.2025
+#### Version 18.0.1.3.1
+#### UPDT
+- Added Total to the Trial Balance and report. Fixed the filter issue and the date range RPC error.
+
+#### 30.12.2025
+#### Version 18.0.1.3.2
+#### UPDT
+- Fixed an issue where the Trial Balance initial balance was showing the total debit and credit amounts, even when the accounts were balanced.
+
+#### 08.01.2026
+#### Version 18.0.1.3.3
+#### UPDT
+- Fixed an issue where records were disappearing after applying date filters.
\ No newline at end of file
diff --git a/third_party_addons/dynamic_accounts_report/i18n/ar_001.po b/third_party_addons/dynamic_accounts_report/i18n/ar_001.po
new file mode 100644
index 000000000..050d995d1
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/i18n/ar_001.po
@@ -0,0 +1,2312 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * dynamic_accounts_report
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-28 11:11+0000\n"
+"PO-Revision-Date: 2023-11-28 11:11+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "1-30"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "31-60"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "61-90"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "91-120"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Expenses\n"
+" "
+msgstr "نفقات"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Income\n"
+" "
+msgstr "دخل"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Total Income\n"
+" "
+msgstr "إجمالي الدخل"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Total Expenses\n"
+" "
+msgstr "المصروفات الكلية"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Gross Profit\n"
+" "
+msgstr "اجمالي الربح"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Net Profit\n"
+" "
+msgstr "صافي الربح"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Cost of\n"
+" Revenue\n"
+" "
+msgstr "ربح"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Depreciation\n"
+" "
+msgstr "الاستهلاك"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Expenses "
+msgstr "نفقات"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Operating Income "
+msgstr "الدخل التشغيلي"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Other Income\n"
+" "
+msgstr "مصدر دخل آخر"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Purchase "
+msgstr "شراء"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Sales "
+msgstr "مبيعات"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" ASSETS\n"
+" "
+msgstr "أصول"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" EQUITY\n"
+" "
+msgstr "عدالة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES\n"
+" "
+msgstr "الإلتزامات"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Assets\n"
+" "
+msgstr "الاصول المتداولة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Liabilities\n"
+" "
+msgstr "المطلوبات المتداولة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES + EQUITY\n"
+" "
+msgstr "المطلوبات + حقوق الملكية"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Assets\n"
+" "
+msgstr "إجمالي الأصول"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Assets\n"
+" "
+msgstr "إجمالي الممتلكات الحالية"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Liabilities\n"
+" "
+msgstr "إجمالي الطلبات الحالية"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total EQUITY\n"
+" "
+msgstr "مجموع الاسهم"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total LIABILITIES\n"
+" "
+msgstr "اجمالي المطلوبات"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Unallocated Earnings\n"
+" "
+msgstr "إجمالي الأرباح غير المخصصة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Unallocated Earnings\n"
+" "
+msgstr "الأرباح غير المخصصة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Bank and Cash Accounts\n"
+" "
+msgstr "الحسابات المصرفية والنقدية"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Allocated Earnings\n"
+" "
+msgstr "الأرباح المخصصة الحالية"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Assets\n"
+" "
+msgstr "الاصول المتداولة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Earnings\n"
+" "
+msgstr "المكاسب الحاليه"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Liabilities\n"
+" "
+msgstr "المطلوبات المتداولة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Payables\n"
+" "
+msgstr "الذمم الدائنة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Fixed Assets\n"
+" "
+msgstr "بالإضافة إلى الأصول الثابتة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Assets\n"
+" "
+msgstr "بالإضافة إلى الأصول غير المتداولة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Liabilities\n"
+" "
+msgstr "بالإضافة إلى الالتزامات غير المتداولة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Prepayments\n"
+" "
+msgstr "المدفوعات المسبقة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Receivables\n"
+" "
+msgstr "المستحقات"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Retained Earnings\n"
+" "
+msgstr "الأرباح المحتجزة"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid ""
+"Unknown\n"
+" Account\n"
+" "
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+msgid ""
+"Unknown\n"
+" Partner\n"
+" "
+msgstr ""
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "ASSETS"
+msgstr "أصول"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Account"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_bank_book_report
+msgid "Account Bank Book Report"
+msgstr "تقرير كتاب حساب البنك"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_cash_book_report
+msgid "Account Cash Book Report"
+msgstr "تقرير دفتر الحساب النقدي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+#, python-format
+msgid "Accounts"
+msgstr "حسابات"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Accounts:"
+msgstr "حسابات"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_payable
+msgid "Age Payable"
+msgstr "العمر المستحق"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_receivable
+msgid "Age Receivable"
+msgstr "العمر المستحق"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_payable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_payable_menu
+msgid "Aged Payable"
+msgstr "العمر المستحق"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_payable_report
+msgid "Aged Payable Report"
+msgstr "تقرير المسنين المستحق الدفع"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_receivable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_receivable_menu
+msgid "Aged Receivable"
+msgstr "العمر المستحق"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_receivable_report
+msgid "Aged Receivable Report"
+msgstr "تقرير المستحقات القديمة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Amount Currency"
+msgstr "العملة كمية"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Analytic Account"
+msgstr "الحساب التحليلي"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic Accounts"
+msgstr "الحسابات التحليلية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Analytic Accounts:"
+msgstr "الحسابات التحليلية:"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic accounts associated with the current record."
+msgstr "الحسابات التحليلية المرتبطة بالسجل الحالي."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Apply"
+msgstr "يتقدم"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "At Date"
+msgstr "في التاريخ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#, python-format
+msgid "Balance"
+msgstr "توازن"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_balance_sheet
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_balance_sheet
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_balance_sheet_report
+msgid "Balance Sheet"
+msgstr "ورقة التوازن"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_bank_book
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_bank_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_bank_book
+msgid "Bank Book"
+msgstr "كتاب البنك"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Bank and\n"
+" Cash Accounts"
+msgstr "الحسابات النقدية البنكية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Bank and Cash Accounts"
+msgstr "الحسابات المصرفية والنقدية"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_cash_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_cash_book
+msgid "Cash Book"
+msgstr "كتاب النقدية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Cash basis method"
+msgstr "طريقة الأساس النقدي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Communication"
+msgstr "تواصل"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Company"
+msgstr "شركة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Comparison"
+msgstr "مقارنة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost\n"
+" of\n"
+" Revenue"
+msgstr "إيرادات التكلفة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost of\n"
+" Revenue"
+msgstr "إيرادات التكلفة"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_uid
+msgid "Created by"
+msgstr "انشأ من قبل"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_date
+msgid "Created on"
+msgstr "تم إنشاؤها على"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Credit"
+msgstr "ائتمان"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Currency"
+msgstr "عملة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Allocated Earnings"
+msgstr "الأرباح المخصصة الحالية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Assets"
+msgstr "الاصول المتداولة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Earnings"
+msgstr "المكاسب الحاليه"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current Allocated\n"
+" Earnings"
+msgstr "الأرباح المخصصة الحالية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Assets"
+msgstr "الاصول المتداولة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Liabilities"
+msgstr "المطلوبات المتداولة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Date"
+msgstr "تاريخ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid ""
+"Date\n"
+" :"
+msgstr "تاريخ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Date Range"
+msgstr "نطاق الموعد"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Dates"
+msgstr "بلح"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Debit"
+msgstr "دَين"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Depreciation"
+msgstr "الاستهلاك"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__display_name
+msgid "Display Name"
+msgstr "اسم العرض"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__draft
+msgid "Draft"
+msgstr "مسودة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Due Date"
+msgstr "تاريخ الاستحقاق"
+
+#. module: dynamic_accounts_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.dynamic_report_accounting
+msgid "Dynamic Financial Reports"
+msgstr "التقارير المالية الديناميكية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "EQUITY"
+msgstr "عدالة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"End\n"
+" Date\n"
+" :"
+msgstr "تاريخ الانتهاء"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "End Balance"
+msgstr "الرصيد النهائي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"End Date\n"
+" :"
+msgstr "تاريخ الانتهاء"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "End date"
+msgstr "تاريخ الانتهاء"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Month"
+msgstr "نهاية الشهر الماضي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Quarter"
+msgstr "نهاية الربع الأخير"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last year"
+msgstr "نهاية العام الماضي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Entry label"
+msgstr "تسمية الإدخال"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Expected Date"
+msgstr "التاريخ المتوقع"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Expenses"
+msgstr "نفقات"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Export (XLSX)"
+msgstr "تصدير (XLSX)"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "دفتر الأستاذ العام"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "دفتر الأستاذ العام"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.actions.client,name:dynamic_accounts_report.action_general_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_general_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_general_ledger
+#, python-format
+msgid "General Ledger"
+msgstr "دفتر الأستاذ العام"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_general_ledger
+msgid "General Ledger Report"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Generic Tax Report"
+msgstr "التقرير الضريبي العام"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Gross Profit"
+msgstr "اجمالي الربح"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Account > Tax"
+msgstr "التجميع حسب: الحساب > الضريبة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Tax > Account"
+msgstr "التجميع حسب: الضريبة > الحساب"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__id
+msgid "ID"
+msgstr "بطاقة تعريف"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Include Draft Entries"
+msgstr "تضمين مسودة الإدخالات"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Income"
+msgstr "دخل"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Initial Balance"
+msgstr "الرصيد الافتتاحي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Invoice Date"
+msgstr "تاريخ الفاتورة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "JRNL"
+msgstr "JRNL"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Journal"
+msgstr "مجلة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Journal Items"
+msgstr "عناصر المجلة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+#, python-format
+msgid "Journals"
+msgstr "المجلات"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Journals:"
+msgstr "المجلات:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES"
+msgstr "الإلتزامات"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES + EQUITY"
+msgstr "المطلوبات + حقوق الملكية"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث بتاريخ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last month"
+msgstr "الشهر الماضي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last quarter"
+msgstr "الربع الأخير"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last year"
+msgstr "العام الماضي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Matching Number"
+msgstr "رقم المطابقة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Move"
+msgstr "يتحرك"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "NET"
+msgstr "شبكة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Net Profit"
+msgstr "صافي الربح"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "No Comparison"
+msgstr "لا مقارنة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Number of Periods:"
+msgstr "عدد الفترات:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Older"
+msgstr "اكبر سنا"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Open"
+msgstr "يفتح"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "الدخل التشغيلي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "الدخل التشغيلي"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Options"
+msgstr "خيارات"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Options : Posted Entries"
+msgstr "الخيارات: الإدخالات المنشورة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Options : Posted Entries ,"
+msgstr "الخيارات: الإدخالات المنشورة،"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid "Options :Posted Entries"
+msgstr "الخيارات: الإدخالات المنشورة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid "Options :Posted Entries ,"
+msgstr "الخيارات:الإدخالات المنشورة،"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Other\n"
+" Income"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Other Income"
+msgstr "مصدر دخل آخر"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Partner"
+msgstr "شريك"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_partner_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_partner_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_partner_ledger
+msgid "Partner Ledger"
+msgstr "دفتر الأستاذ الشريك"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_partner_ledger
+msgid "Partner Ledger Report"
+msgstr "تقرير دفتر الأستاذ الشريك"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Payable"
+msgstr "مستحق الدفع"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Payables"
+msgstr "الذمم الدائنة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Assets"
+msgstr "بالإضافة إلى الأصول غير المتداولة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Liabilities"
+msgstr "بالإضافة إلى الالتزامات غير المتداولة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus Fixed\n"
+" Assets"
+msgstr "بالإضافة إلى الأصول الثابتة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Fixed Assets"
+msgstr "بالإضافة إلى الأصول الثابتة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Assets"
+msgstr "بالإضافة إلى الأصول غير المتداولة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Liabilities"
+msgstr "بالإضافة إلى الالتزامات غير المتداولة"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__posted
+msgid "Posted"
+msgstr "نشر"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid "Posted ,"
+msgstr "تم النشر ,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Posted Entries"
+msgstr "المشاركات المنشورة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Prepayments"
+msgstr "المدفوعات المسبقة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Previous Period"
+msgstr "Previous Period"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Print (PDF)"
+msgstr "طباعة (بي دي إف)"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_profit_loss
+msgid "Profit And Loss"
+msgstr "الربح والخسارة"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_dynamic_balance_sheet_report
+msgid "Profit Loss Report"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_profit_and_loss
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_profit_and_loss_report
+msgid "Profit and Loss"
+msgstr "تقرير خسارة الربح"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Purchase"
+msgstr "شراء"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Receivable"
+msgstr "مستحق"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Receivables"
+msgstr "المستحقات"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Ref"
+msgstr "المرجع"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Reference"
+msgstr "مرجع"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Report"
+msgstr "تقرير"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Reports :"
+msgstr "التقارير"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Retained\n"
+" Earnings"
+msgstr "الأرباح المحتجزة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Retained Earnings"
+msgstr "الأرباح المحتجزة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Sales"
+msgstr "مبيعات"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Same Period Last Year"
+msgstr "نفس الفترة من العام الماضي"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+msgid "Select one or more accounts."
+msgstr "حدد حسابًا واحدًا أو أكثر."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+msgid "Select one or more journals."
+msgstr "اختر مجلة واحدة أو أكثر."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Select the company to which this record belongs."
+msgstr "حدد الشركة التي ينتمي إليها هذا السجل."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Select the target move status."
+msgstr "حدد حالة التحرك المستهدف."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "Specify the end date."
+msgstr "حدد تاريخ الانتهاء."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Specify the start date."
+msgstr "حدد تاريخ البدء."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "تاريخ البدء :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "تاريخ البدء :"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Start date"
+msgstr "تاريخ البدء"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "TAX"
+msgstr "ضريبة"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Target Move"
+msgstr "تحرك الهدف"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Target Move:"
+msgstr "تحرك الهدف:"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Target move"
+msgstr "تحرك الهدف"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_tax_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_tax_report
+#: model:ir.model,name:dynamic_accounts_report.model_tax_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.tax_report_menu
+msgid "Tax Report"
+msgstr "تقرير الضرائب"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Month"
+msgstr "هذا الشهر"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Quarter"
+msgstr "هذا الربع"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Year"
+msgstr "هذا العام"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "Today"
+msgstr "اليوم"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Total"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Total\n"
+" Expenses"
+msgstr "المصروفات الكلية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total ASSETS"
+msgstr "إجمالي الأصول"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Assets"
+msgstr "إجمالي الممتلكات الحالية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Liabilities"
+msgstr "إجمالي الطلبات الحالية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total EQUITY"
+msgstr "مجموع الاسهم"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Total Income"
+msgstr "إجمالي الدخل"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total LIABILITIES"
+msgstr "اجمالي المطلوبات"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Unallocated Earnings"
+msgstr "إجمالي الأرباح غير المخصصة"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_trial_balance
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_trial_balance
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_trial_balance
+msgid "Trial Balance"
+msgstr "ميزان المراجعة"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_trial_balance
+msgid "Trial Balance Report"
+msgstr "تقرير ميزان المراجعة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Unallocated Earnings"
+msgstr "الأرباح غير المخصصة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Unfold All"
+msgstr "تتكشف الكل"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid ""
+ "Unknown\n"
+" Accounts"
+msgstr "حسابات غير معروفة"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Partner"
+msgstr "شريك غير معروف"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "عرض إدخال دفتر اليومية"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "عرض إدخال دفتر اليومية"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+msgid "posted,"
+msgstr "نشر"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+msgid "to"
+msgstr "ل"
diff --git a/third_party_addons/dynamic_accounts_report/i18n/de_CH.po b/third_party_addons/dynamic_accounts_report/i18n/de_CH.po
new file mode 100644
index 000000000..142f54ed4
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/i18n/de_CH.po
@@ -0,0 +1,2324 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * dynamic_accounts_report
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-28 11:11+0000\n"
+"PO-Revision-Date: 2023-11-28 11:11+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "1-30"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "31-60"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "61-90"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "91-120"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Expenses\n"
+" "
+msgstr "Kosten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Income\n"
+" "
+msgstr "Einkommen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Total Income\n"
+" "
+msgstr "Gesamteinkommen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Total Expenses\n"
+" "
+msgstr "Gesamtausgaben"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Gross Profit\n"
+" "
+msgstr "Bruttogewinn"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Net Profit\n"
+" "
+msgstr "Reingewinn"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Cost of\n"
+" Revenue\n"
+" "
+msgstr "Umsatzkosten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Depreciation\n"
+" "
+msgstr "Abschreibung"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Expenses "
+msgstr "Kosten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Operating Income "
+msgstr "Betriebsergebnis"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Other Income\n"
+" "
+msgstr "Anderes Einkommen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Purchase "
+msgstr "Kaufen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Sales "
+msgstr "Verkäufe"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" ASSETS\n"
+" "
+msgstr "VERMÖGENSWERTE"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" EQUITY\n"
+" "
+msgstr "EIGENKAPITAL"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES\n"
+" "
+msgstr "VERBINDLICHKEITEN"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Assets\n"
+" "
+msgstr "Umlaufvermögen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Liabilities\n"
+" "
+msgstr "Kurzfristige Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES + EQUITY\n"
+" "
+msgstr "PASSIVA + EIGENKAPITAL"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Assets\n"
+" "
+msgstr "Gesamtvermögen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Assets\n"
+" "
+msgstr "Gesamten Umlaufvermögens"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Liabilities\n"
+" "
+msgstr "Summe kurzfristige Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total EQUITY\n"
+" "
+msgstr "Gesamtkapital"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total LIABILITIES\n"
+" "
+msgstr "Gesamtverbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Unallocated Earnings\n"
+" "
+msgstr "Gesamte nicht zugewiesene Einnahmen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Unallocated Earnings\n"
+" "
+msgstr "Nicht zugewiesene Einnahmen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Bank and Cash Accounts\n"
+" "
+msgstr "Bank- und Geldkonten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Allocated Earnings\n"
+" "
+msgstr "Aktuelle zugewiesene Einnahmen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Assets\n"
+" "
+msgstr "Aktuelle zugewiesene Einnahmen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Earnings\n"
+" "
+msgstr "Aktuelle Einnahmen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Liabilities\n"
+" "
+msgstr "Kurzfristige Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Payables\n"
+" "
+msgstr "Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Fixed Assets\n"
+" "
+msgstr "Plus Anlagevermögen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Assets\n"
+" "
+msgstr "Plus langfristige Vermögenswerte"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Liabilities\n"
+" "
+msgstr "Zuzüglich langfristige Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Prepayments\n"
+" "
+msgstr "Vorauszahlungen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Receivables\n"
+" "
+msgstr "Forderungen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Retained Earnings\n"
+" "
+msgstr "Gewinnrücklagen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid ""
+"Unknown\n"
+" Account\n"
+" "
+msgstr "Unbekanntes Konto"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+msgid ""
+"Unknown\n"
+" Partner\n"
+" "
+msgstr "Unbekannter Partner"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "ASSETS"
+msgstr "VERMÖGENSWERTE"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Account"
+msgstr "Konto"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_bank_book_report
+msgid "Account Bank Book Report"
+msgstr "Kontobuchbericht"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_cash_book_report
+msgid "Account Cash Book Report"
+msgstr "Kontokassenbuchbericht"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+#, python-format
+msgid "Accounts"
+msgstr "Konten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Accounts:"
+msgstr "Konten"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_payable
+msgid "Age Payable"
+msgstr "Alter zahlbar"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_receivable
+msgid "Age Receivable"
+msgstr "Alter fällig"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_payable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_payable_menu
+msgid "Aged Payable"
+msgstr "Im Alter zahlbar"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_payable_report
+msgid "Aged Payable Report"
+msgstr "Bericht über gealterte Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_receivable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_receivable_menu
+msgid "Aged Receivable"
+msgstr "Veraltete Forderung"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_receivable_report
+msgid "Aged Receivable Report"
+msgstr "Bericht über gealterte Forderungen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Amount Currency"
+msgstr "Betragswährung"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Analytic Account"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic Accounts"
+msgstr "Analytisches Konto"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Analytic Accounts:"
+msgstr "Analytische Konten:"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic accounts associated with the current record."
+msgstr "Mit dem aktuellen Datensatz verknüpfte Analysekonten."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Annotate"
+msgstr "Kommentieren"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Apply"
+msgstr "Anwenden"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "At Date"
+msgstr "Am Datum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#, python-format
+msgid "Balance"
+msgstr "Gleichgewicht"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_balance_sheet
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_balance_sheet
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_balance_sheet_report
+msgid "Balance Sheet"
+msgstr "Bilanz"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_bank_book
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_bank_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_bank_book
+msgid "Bank Book"
+msgstr "Bank Buch"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Bank and\n"
+" Cash Accounts"
+msgstr "Bank- und Geldkonten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Bank and Cash Accounts"
+msgstr "Bank- und Geldkonten"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_cash_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_cash_book
+msgid "Cash Book"
+msgstr "Kassenbuch"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Cash basis method"
+msgstr "Bargeldbasierte Methode"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Communication"
+msgstr "Kommunikation"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Company"
+msgstr "Unternehmen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Comparison"
+msgstr "Vergleich"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost\n"
+" of\n"
+" Revenue"
+msgstr "Umsatzkosten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost of\n"
+" Revenue"
+msgstr "Umsatzkosten"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_uid
+msgid "Created by"
+msgstr "Erstellt von"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_date
+msgid "Created on"
+msgstr "Erstellt am"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Credit"
+msgstr "Kredit"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Currency"
+msgstr "Währung"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Allocated Earnings"
+msgstr "Aktuelle zugewiesene Einnahmen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Assets"
+msgstr "Umlaufvermögen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Earnings"
+msgstr "Aktuelle Einnahmen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current Allocated\n"
+" Earnings"
+msgstr "Aktuelle zugewiesene Einnahmen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Assets"
+msgstr "Umlaufvermögen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Liabilities"
+msgstr "Kurzfristige Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Date"
+msgstr "Datum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid ""
+"Date\n"
+" :"
+msgstr "Datum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Date Range"
+msgstr "Datumsbereich"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Dates"
+msgstr "Termine"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Debit"
+msgstr "Lastschrift"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Depreciation"
+msgstr "Abschreibung"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__display_name
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__draft
+msgid "Draft"
+msgstr "Entwurf"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Due Date"
+msgstr "Fälligkeitsdatum"
+
+#. module: dynamic_accounts_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.dynamic_report_accounting
+msgid "Dynamic Financial Reports"
+msgstr "Dynamische Finanzberichte"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "EQUITY"
+msgstr "EIGENKAPITAL"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"End\n"
+" Date\n"
+" :"
+msgstr "Endtermin"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "End Balance"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"End Date\n"
+" :"
+msgstr "Endtermin:"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "End date"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Month"
+msgstr "Ende letzten Monats"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Quarter"
+msgstr "Ende des letzten Quartals"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last year"
+msgstr "Ende letzten Jahres"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Entry label"
+msgstr "Eintrittsetikett"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Expected Date"
+msgstr "Expected Date"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Expenses"
+msgstr "Kosten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Export (XLSX)"
+msgstr "Exportieren (XLSX)"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Hauptbuch"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Hauptbuch"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.actions.client,name:dynamic_accounts_report.action_general_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_general_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_general_ledger
+#, python-format
+msgid "General Ledger"
+msgstr "Hauptbuch"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_general_ledger
+msgid "General Ledger Report"
+msgstr "Hauptbuchbericht"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Generic Tax Report"
+msgstr "Allgemeiner Steuerbericht"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Gross Profit"
+msgstr "Bruttogewinn"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Account > Tax"
+msgstr "Gruppieren nach: Konto > Steuern"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Tax > Account"
+msgstr "Gruppieren nach: Steuer > Konto"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__id
+msgid "ID"
+msgstr "AUSWEIS"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Include Draft Entries"
+msgstr "Fügen Sie Entwurfseinträge hinzu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Income"
+msgstr "Einkommen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Initial Balance"
+msgstr "Anfangssaldo"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Invoice Date"
+msgstr "Rechnungsdatum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "JRNL"
+msgstr "JRNL"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Journal"
+msgstr "Tagebuch"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Journal Items"
+msgstr "Journalelemente"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+#, python-format
+msgid "Journals"
+msgstr "Zeitschriften"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Journals:"
+msgstr "Zeitschriften:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES"
+msgstr "VERBINDLICHKEITEN"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES + EQUITY"
+msgstr "PASSIVA + EIGENKAPITAL"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_uid
+msgid "Last Updated by"
+msgstr "Zuletzt aktualisiert von"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_date
+msgid "Last Updated on"
+msgstr "Zuletzt aktualisiert am"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last month"
+msgstr "Im vergangenen Monat"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last quarter"
+msgstr "Letztes Quartal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last year"
+msgstr "Letztes Jahr"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Matching Number"
+msgstr "Passende Nummer"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Move"
+msgstr "Bewegen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "NET"
+msgstr "NETZ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Net Profit"
+msgstr "Reingewinn"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "No Comparison"
+msgstr "Kein Vergleich"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Number of Periods:"
+msgstr "Anzahl der Perioden:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Older"
+msgstr "Älter"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Open"
+msgstr "Offen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "Betriebsergebnis"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "Betriebsergebnis"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Options"
+msgstr "Optionen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Options : Posted Entries"
+msgstr "Optionen: Gepostete Einträge"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Options : Posted Entries ,"
+msgstr "Optionen: Gepostete Einträge,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid "Options :Posted Entries"
+msgstr "Optionen: Gepostete Einträge"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid "Options :Posted Entries ,"
+msgstr "Optionen: Gepostete Einträge,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Other\n"
+" Income"
+msgstr "Anderes Einkommen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Other Income"
+msgstr "Anderes Einkommen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Partner"
+msgstr "Partner"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_partner_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_partner_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_partner_ledger
+msgid "Partner Ledger"
+msgstr "Partnerbuch"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_partner_ledger
+msgid "Partner Ledger Report"
+msgstr "Partner-Ledger-Bericht"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Payable"
+msgstr "Zahlbar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Payables"
+msgstr "Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Assets"
+msgstr "Plus langfristige Vermögenswerte"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Liabilities"
+msgstr "Zuzüglich langfristige Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus Fixed\n"
+" Assets"
+msgstr "Plus Anlagevermögen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Fixed Assets"
+msgstr "Plus Anlagevermögen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Assets"
+msgstr "Plus langfristige Vermögenswerte"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Liabilities"
+msgstr "Zuzüglich langfristige Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__posted
+msgid "Posted"
+msgstr "Gesendet"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid "Posted ,"
+msgstr "Gesendet ,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Posted Entries"
+msgstr "Gepostete Einträge"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Prepayments"
+msgstr "Vorauszahlungen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Previous Period"
+msgstr "Vorheriger Zeitraum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Print (PDF)"
+msgstr "Drucken (PDF)"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_profit_loss
+msgid "Profit And Loss"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_dynamic_balance_sheet_report
+msgid "Profit Loss Report"
+msgstr "Gewinn-und Verlust"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_profit_and_loss
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_profit_and_loss_report
+msgid "Profit and Loss"
+msgstr "Profit and Loss"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Purchase"
+msgstr "Kaufen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Receivable"
+msgstr "Forderungen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Receivables"
+msgstr "Forderungen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Ref"
+msgstr "Ref"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Reference"
+msgstr "Reference"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Report"
+msgstr "BerichtBericht"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Reports :"
+msgstr "Bericht :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Retained\n"
+" Earnings"
+msgstr "Gewinnrücklagen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Retained Earnings"
+msgstr "Gewinnrücklagen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Sales"
+msgstr "Verkäufe"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Same Period Last Year"
+msgstr "Gleicher Zeitraum letztes Jahr"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+msgid "Select one or more accounts."
+msgstr "Wählen Sie ein oder mehrere Konten aus."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+msgid "Select one or more journals."
+msgstr "Wählen Sie eine oder mehrere Zeitschriften aus."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Select the company to which this record belongs."
+msgstr "Wählen Sie das Unternehmen aus, zu dem dieser Datensatz gehört."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Select the target move status."
+msgstr "Wählen Sie den Zielbewegungsstatus aus."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "Specify the end date."
+msgstr "Geben Sie das Enddatum an."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Specify the start date."
+msgstr "Geben Sie das Startdatum an."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Startdatum :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Startdatum :"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Start date"
+msgstr "Startdatum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "TAX"
+msgstr "STEUER"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Target Move"
+msgstr "Zielbewegung"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Target Move:"
+msgstr "Zielbewegung:"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Target move"
+msgstr "Zielbewegung"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_tax_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_tax_report
+#: model:ir.model,name:dynamic_accounts_report.model_tax_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.tax_report_menu
+msgid "Tax Report"
+msgstr "Steuerbericht"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Month"
+msgstr "Diesen Monat"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Quarter"
+msgstr "Dieses Quartal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Year"
+msgstr "Dieses Jahr"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "Today"
+msgstr "Heute"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Total"
+msgstr "Gesamt"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Total\n"
+" Expenses"
+msgstr "Gesamtausgaben"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total ASSETS"
+msgstr "Gesamtvermögen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Assets"
+msgstr "Gesamten Umlaufvermögens"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Liabilities"
+msgstr "Summe kurzfristige Verbindlichkeiten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total EQUITY"
+msgstr "Gesamtkapital"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Total Income"
+msgstr "Gesamteinkommen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total LIABILITIES"
+msgstr "Total LIABILITIES"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Unallocated Earnings"
+msgstr "Gesamte nicht zugewiesene Einnahmen"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_trial_balance
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_trial_balance
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_trial_balance
+msgid "Trial Balance"
+msgstr "Probebilanz"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_trial_balance
+msgid "Trial Balance Report"
+msgstr "Testbilanzbericht"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Unallocated Earnings"
+msgstr "Nicht zugewiesene Einnahmen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Unfold All"
+msgstr "Alles entfalten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Accounts"
+msgstr "Unbekannte Konten"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Partner"
+msgstr "Unbekannter Partner"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Journaleintrag anzeigen"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Journaleintrag anzeigen"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+msgid "posted,"
+msgstr "Gesendet"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+msgid "to"
+msgstr "Zu"
diff --git a/third_party_addons/dynamic_accounts_report/i18n/es_AR.po b/third_party_addons/dynamic_accounts_report/i18n/es_AR.po
new file mode 100644
index 000000000..c4e804085
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/i18n/es_AR.po
@@ -0,0 +1,2312 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * dynamic_accounts_report
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-28 11:11+0000\n"
+"PO-Revision-Date: 2023-11-28 11:11+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "1-30"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "31-60"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "61-90"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "91-120"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Expenses\n"
+" "
+msgstr "Expenses"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Income\n"
+" "
+msgstr "Ingreso"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Total Income\n"
+" "
+msgstr "Ingresos totales"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Total Expenses\n"
+" "
+msgstr "Gastos totales"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Gross Profit\n"
+" "
+msgstr "Beneficio bruto"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Net Profit\n"
+" "
+msgstr "Beneficio neto"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Cost of\n"
+" Revenue\n"
+" "
+msgstr "Ingresos de beneficio neto"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Depreciation\n"
+" "
+msgstr "Depreciación"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Expenses "
+msgstr "Gastos"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Operating Income "
+msgstr "Ingresos de explotación"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Other Income\n"
+" "
+msgstr "Otros ingresos"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Purchase "
+msgstr "Compra"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Sales "
+msgstr "Ventas"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" ASSETS\n"
+" "
+msgstr "ACTIVOS"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" EQUITY\n"
+" "
+msgstr "EQUIDAD"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES\n"
+" "
+msgstr "PASIVO"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Assets\n"
+" "
+msgstr "Activos circulantes"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Liabilities\n"
+" "
+msgstr "Pasivo circulante"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES + EQUITY\n"
+" "
+msgstr "PASIVO + PATRIMONIO"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Assets\n"
+" "
+msgstr "Los activos totales"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Assets\n"
+" "
+msgstr "Total de activos corrientes"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Liabilities\n"
+" "
+msgstr "Total pasivos corrientes"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total EQUITY\n"
+" "
+msgstr "Equidad total"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total LIABILITIES\n"
+" "
+msgstr "Responsabilidad total"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Unallocated Earnings\n"
+" "
+msgstr "Ganancias totales no asignadas"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Unallocated Earnings\n"
+" "
+msgstr "Ganancias no asignadas"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Bank and Cash Accounts\n"
+" "
+msgstr "Cuentas bancarias y de efectivo"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Allocated Earnings\n"
+" "
+msgstr "Ganancias asignadas actuales"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Assets\n"
+" "
+msgstr "Activos circulantes"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Earnings\n"
+" "
+msgstr "Ganancias actuales"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Liabilities\n"
+" "
+msgstr "Pasivo circulante"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Payables\n"
+" "
+msgstr "Cuentas por pagar"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Fixed Assets\n"
+" "
+msgstr "Más activos fijos"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Assets\n"
+" "
+msgstr "Más Activos No Corrientes"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Liabilities\n"
+" "
+msgstr "Más Pasivos No Corrientes"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Prepayments\n"
+" "
+msgstr "Prepagos"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Receivables\n"
+" "
+msgstr "Cuentas por cobrar"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Retained Earnings\n"
+" "
+msgstr "Ganancias retenidas"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid ""
+"Unknown\n"
+" Account\n"
+" "
+msgstr "Cuenta desconocida"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+msgid ""
+"Unknown\n"
+" Partner\n"
+" "
+msgstr "Socio desconocido"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "ASSETS"
+msgstr "ACTIVOS"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Account"
+msgstr "Cuenta"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_bank_book_report
+msgid "Account Bank Book Report"
+msgstr "Informe del libro bancario de cuentas"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_cash_book_report
+msgid "Account Cash Book Report"
+msgstr "Informe del libro de caja de la cuenta"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+#, python-format
+msgid "Accounts"
+msgstr "Cuentas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Accounts:"
+msgstr "Cuentas"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_payable
+msgid "Age Payable"
+msgstr "Edad a pagar"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_receivable
+msgid "Age Receivable"
+msgstr "Edad por cobrar"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_payable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_payable_menu
+msgid "Aged Payable"
+msgstr "Pagadero envejecido"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_payable_report
+msgid "Aged Payable Report"
+msgstr "Informe de cuentas por pagar vencidas"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_receivable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_receivable_menu
+msgid "Aged Receivable"
+msgstr "Cuenta por cobrar envejecida"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_receivable_report
+msgid "Aged Receivable Report"
+msgstr "Informe de cuentas por cobrar vencidas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Amount Currency"
+msgstr "Monto de dinero"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Analytic Account"
+msgstr "Cuenta Analítica"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic Accounts"
+msgstr "Cuentas Analíticas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Analytic Accounts:"
+msgstr "Cuentas Analíticas:"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic accounts associated with the current record."
+msgstr "Cuentas analíticas asociadas al registro actual."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Apply"
+msgstr "Aplicar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "At Date"
+msgstr "En la fecha"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#, python-format
+msgid "Balance"
+msgstr "Balance"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_balance_sheet
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_balance_sheet
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_balance_sheet_report
+msgid "Balance Sheet"
+msgstr "Hoja de balance"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_bank_book
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_bank_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_bank_book
+msgid "Bank Book"
+msgstr "Banco de libros"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Bank and\n"
+" Cash Accounts"
+msgstr "Cuentas bancarias y de efectivo"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Bank and Cash Accounts"
+msgstr "Cuentas bancarias y de efectivo"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_cash_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_cash_book
+msgid "Cash Book"
+msgstr "Libro de pago"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Cash basis method"
+msgstr "Método de caja"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Communication"
+msgstr "Comunicación"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Company"
+msgstr "Compañía"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Comparison"
+msgstr "Comparación"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost\n"
+" of\n"
+" Revenue"
+msgstr "Costo de los ingresos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost of\n"
+" Revenue"
+msgstr "Costo de los ingresos"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_date
+msgid "Created on"
+msgstr "Creado en"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Credit"
+msgstr "Crédito"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Currency"
+msgstr "Divisa"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Allocated Earnings"
+msgstr "Ganancias asignadas actuales"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Assets"
+msgstr "Activos circulantes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Earnings"
+msgstr "Ganancias actuales"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current Allocated\n"
+" Earnings"
+msgstr "Ganancias asignadas actuales"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Assets"
+msgstr "Activos circulantes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Liabilities"
+msgstr "Pasivo circulante"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Date"
+msgstr "Fecha"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid ""
+"Date\n"
+" :"
+msgstr "Fecha:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Date Range"
+msgstr "Rango de fechas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Dates"
+msgstr "fechas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Debit"
+msgstr "Débito"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Depreciation"
+msgstr "Depreciación"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__display_name
+msgid "Display Name"
+msgstr "Nombre para mostrar"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__draft
+msgid "Draft"
+msgstr "Borrador"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Due Date"
+msgstr "Fecha de vencimiento"
+
+#. module: dynamic_accounts_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.dynamic_report_accounting
+msgid "Dynamic Financial Reports"
+msgstr "Informes financieros dinámicos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "EQUITY"
+msgstr "EQUIDAD"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"End\n"
+" Date\n"
+" :"
+msgstr "Fecha final:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "End Balance"
+msgstr "Saldo final"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"End Date\n"
+" :"
+msgstr "Fecha final:"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "End date"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Month"
+msgstr "Fin del mes pasado"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Quarter"
+msgstr "Fin del último trimestre"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last year"
+msgstr "Fin del año pasado"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Entry label"
+msgstr "Etiqueta de entrada"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Expected Date"
+msgstr "Fecha esperada"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Expenses"
+msgstr "Gastos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Export (XLSX)"
+msgstr "Exportar (XLSX)"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Libro mayor"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Libro mayor"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.actions.client,name:dynamic_accounts_report.action_general_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_general_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_general_ledger
+#, python-format
+msgid "General Ledger"
+msgstr "Libro mayor"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_general_ledger
+msgid "General Ledger Report"
+msgstr "Informe del libro mayor"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Generic Tax Report"
+msgstr "Informe de impuestos genérico"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Gross Profit"
+msgstr "Beneficio bruto"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Account > Tax"
+msgstr "Agrupar por: Cuenta > Impuestos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Tax > Account"
+msgstr "Agrupar por: Impuestos > Cuenta"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__id
+msgid "ID"
+msgstr "IDENTIFICACIÓN"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Include Draft Entries"
+msgstr "Incluir borradores de entradas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Income"
+msgstr "Ingreso"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Initial Balance"
+msgstr "Saldo inicial"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Invoice Date"
+msgstr "Fecha de la factura"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "JRNL"
+msgstr "JNL"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Journal"
+msgstr "Diario"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Journal Items"
+msgstr "Artículos del diario"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+#, python-format
+msgid "Journals"
+msgstr "Revistas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Journals:"
+msgstr "Revistas:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES"
+msgstr "PASIVO"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES + EQUITY"
+msgstr "PASIVO + PATRIMONIO"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_uid
+msgid "Last Updated by"
+msgstr "Actualizado por última vez por"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_date
+msgid "Last Updated on"
+msgstr "Ultima actualización en"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last month"
+msgstr "El mes pasado"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last quarter"
+msgstr "Último cuarto"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last year"
+msgstr "El año pasado"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Matching Number"
+msgstr "Número coincidente"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Move"
+msgstr "Mover"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "NET"
+msgstr "NETO"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Net Profit"
+msgstr "Beneficio neto"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "No Comparison"
+msgstr "Sin comparación"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Number of Periods:"
+msgstr "Número de períodos:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Older"
+msgstr "Más viejo"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Open"
+msgstr "Abierto"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "Ingresos de explotación"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "Ingresos de explotación"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Options"
+msgstr "Opciones"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Options : Posted Entries"
+msgstr "Opciones: Entradas publicadas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Options : Posted Entries ,"
+msgstr "Opciones: Entradas publicadas,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid "Options :Posted Entries"
+msgstr "Opciones: Entradas publicadas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid "Options :Posted Entries ,"
+msgstr "Opciones: Entradas publicadas,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Other\n"
+" Income"
+msgstr "Otros ingresos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Other Income"
+msgstr "Otros ingresos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Partner"
+msgstr "Pareja"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_partner_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_partner_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_partner_ledger
+msgid "Partner Ledger"
+msgstr "Libro mayor de socios"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_partner_ledger
+msgid "Partner Ledger Report"
+msgstr "Informe del libro mayor de socios"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Payable"
+msgstr "Pagadero"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Payables"
+msgstr "Pagadero"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Assets"
+msgstr "Más Activos No Corrientes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Liabilities"
+msgstr "Más Pasivos No Corrientes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus Fixed\n"
+" Assets"
+msgstr "Más activos fijos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Fixed Assets"
+msgstr "Más activos fijos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Assets"
+msgstr "Más Activos No Corrientes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Liabilities"
+msgstr "Más Pasivos No Corrientes"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__posted
+msgid "Posted"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid "Posted ,"
+msgstr "Al corriente"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Posted Entries"
+msgstr "Entradas publicadas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Prepayments"
+msgstr "Prepagos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Previous Period"
+msgstr "Periodo anterior"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Print (PDF)"
+msgstr "Imprimir (PDF)"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_profit_loss
+msgid "Profit And Loss"
+msgstr "Ganancia y perdida"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_dynamic_balance_sheet_report
+msgid "Profit Loss Report"
+msgstr "Informe de pérdidas y ganancias"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_profit_and_loss
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_profit_and_loss_report
+msgid "Profit and Loss"
+msgstr "Ganancia y perdida"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Purchase"
+msgstr "Compra"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Receivable"
+msgstr "Cuenta por cobrar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Receivables"
+msgstr "Cuentas por cobrar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Ref"
+msgstr "Árbitro"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Reference"
+msgstr "Referencia"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Report"
+msgstr "Informe"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Reports :"
+msgstr "Informe :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Retained\n"
+" Earnings"
+msgstr "Ganancias retenidas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Retained Earnings"
+msgstr "Ganancias retenidas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Sales"
+msgstr "Ventas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Same Period Last Year"
+msgstr "Mismo período el año pasado"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+msgid "Select one or more accounts."
+msgstr "Seleccione una o más cuentas."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+msgid "Select one or more journals."
+msgstr "Seleccione una o más revistas."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Select the company to which this record belongs."
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Select the target move status."
+msgstr "Seleccione la empresa a la que pertenece este registro."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "Specify the end date."
+msgstr "Especifique la fecha de finalización."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Specify the start date."
+msgstr "Especifique la fecha de inicio."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Fecha de inicio :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Fecha de inicio :"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Start date"
+msgstr "Start date"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "TAX"
+msgstr "IMPUESTO"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Target Move"
+msgstr "Movimiento objetivo"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Target Move:"
+msgstr "Movimiento objetivo"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Target move"
+msgstr "movimiento objetivo"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_tax_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_tax_report
+#: model:ir.model,name:dynamic_accounts_report.model_tax_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.tax_report_menu
+msgid "Tax Report"
+msgstr "Informe de impuestos"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Month"
+msgstr "Este mes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Quarter"
+msgstr "Este cuarto"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Year"
+msgstr "Este año"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "Today"
+msgstr "Hoy"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Total"
+msgstr "Total"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Total\n"
+" Expenses"
+msgstr "Gastos totales"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total ASSETS"
+msgstr "Los activos totales"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Assets"
+msgstr "Total de activos corrientes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Liabilities"
+msgstr "Total pasivos corrientes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total EQUITY"
+msgstr "Equidad total"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Total Income"
+msgstr "Ingresos totales"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total LIABILITIES"
+msgstr "Responsabilidad total"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Unallocated Earnings"
+msgstr "Ganancias totales no asignadas"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_trial_balance
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_trial_balance
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_trial_balance
+msgid "Trial Balance"
+msgstr "Saldo de prueba"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_trial_balance
+msgid "Trial Balance Report"
+msgstr "Informe de balance de prueba"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Unallocated Earnings"
+msgstr "Ganancias no asignadas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Unfold All"
+msgstr "Desplegar todo"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Accounts"
+msgstr "Cuentas desconocidas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Partner"
+msgstr "Socio desconocido"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Ver entrada de diario"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Ver entrada de diario"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+msgid "posted,"
+msgstr "al corriente"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+msgid "to"
+msgstr "a"
\ No newline at end of file
diff --git a/third_party_addons/dynamic_accounts_report/i18n/fr_BE.po b/third_party_addons/dynamic_accounts_report/i18n/fr_BE.po
new file mode 100644
index 000000000..6dd14d225
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/i18n/fr_BE.po
@@ -0,0 +1,2312 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * dynamic_accounts_report
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-28 11:11+0000\n"
+"PO-Revision-Date: 2023-11-28 11:11+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "1-30"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "31-60"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "61-90"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "91-120"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Expenses\n"
+" "
+msgstr "Dépenses"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Income\n"
+" "
+msgstr "Revenu"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Total Income\n"
+" "
+msgstr "Revenu total"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Total Expenses\n"
+" "
+msgstr "Dépenses totales"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Gross Profit\n"
+" "
+msgstr "Bénéfice brut"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Net Profit\n"
+" "
+msgstr "Bénéfice net"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Cost of\n"
+" Revenue\n"
+" "
+msgstr "Coût des revenus"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Depreciation\n"
+" "
+msgstr "Dépréciation"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Expenses "
+msgstr "Dépenses"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Operating Income "
+msgstr "Résultat d'exploitation"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Other Income\n"
+" "
+msgstr "Autre revenu"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Purchase "
+msgstr "Achat"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Sales "
+msgstr "Ventes"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" ASSETS\n"
+" "
+msgstr "ACTIFS"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" EQUITY\n"
+" "
+msgstr "ÉQUITÉ"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES\n"
+" "
+msgstr "PASSIFS"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Assets\n"
+" "
+msgstr "Actifs actuels"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Liabilities\n"
+" "
+msgstr "Passif actuel"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES + EQUITY\n"
+" "
+msgstr "PASSIF + CAPITAUX PROPRES"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Assets\n"
+" "
+msgstr "Actif total"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Assets\n"
+" "
+msgstr "Le total des actifs courants"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Liabilities\n"
+" "
+msgstr "Total du passif à court terme"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total EQUITY\n"
+" "
+msgstr "CAPITAUX PROPRES totaux"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total LIABILITIES\n"
+" "
+msgstr "Responsabilités totales"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Unallocated Earnings\n"
+" "
+msgstr "Gains totaux non répartis"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Unallocated Earnings\n"
+" "
+msgstr "Gains non alloués"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Bank and Cash Accounts\n"
+" "
+msgstr "Comptes bancaires et espèces"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Allocated Earnings\n"
+" "
+msgstr "Gains actuellement alloués"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Assets\n"
+" "
+msgstr "Actifs actuels"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Earnings\n"
+" "
+msgstr "Gains actuels"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Liabilities\n"
+" "
+msgstr "Passif actuel"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Payables\n"
+" "
+msgstr "Dettes"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Fixed Assets\n"
+" "
+msgstr "Plus les immobilisations"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Assets\n"
+" "
+msgstr "Plus actifs non courants"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Liabilities\n"
+" "
+msgstr "Plus passifs non courants"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Prepayments\n"
+" "
+msgstr "Paiements anticipés"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Receivables\n"
+" "
+msgstr "Créances"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Retained Earnings\n"
+" "
+msgstr "Retained Earnings"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid ""
+"Unknown\n"
+" Account\n"
+" "
+msgstr "Compte inconnu"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+msgid ""
+"Unknown\n"
+" Partner\n"
+" "
+msgstr "Partenaire inconnu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "ASSETS"
+msgstr "ACTIFS"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Account"
+msgstr "Compte"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_bank_book_report
+msgid "Account Bank Book Report"
+msgstr "Rapport du livret bancaire du compte"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_cash_book_report
+msgid "Account Cash Book Report"
+msgstr "Rapport du livre de caisse du compte"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+#, python-format
+msgid "Accounts"
+msgstr "Comptes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Accounts:"
+msgstr "Comptes"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_payable
+msgid "Age Payable"
+msgstr "Âge payable"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_receivable
+msgid "Age Receivable"
+msgstr "Âge recevable"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_payable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_payable_menu
+msgid "Aged Payable"
+msgstr "Âgé Payable"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_payable_report
+msgid "Aged Payable Report"
+msgstr "Etat des payables âgés"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_receivable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_receivable_menu
+msgid "Aged Receivable"
+msgstr "Ancienneté à recevoir"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_receivable_report
+msgid "Aged Receivable Report"
+msgstr "Etat des créances anciennes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Amount Currency"
+msgstr "Monnaie de montant"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Analytic Account"
+msgstr "Compte analytique"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic Accounts"
+msgstr "Comptes analytiques"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Analytic Accounts:"
+msgstr "Comptes analytiques :"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic accounts associated with the current record."
+msgstr "Comptes analytiques associés à l'enregistrement actuel."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Apply"
+msgstr "Appliquer"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "At Date"
+msgstr "À la date"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#, python-format
+msgid "Balance"
+msgstr "Équilibre"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_balance_sheet
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_balance_sheet
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_balance_sheet_report
+msgid "Balance Sheet"
+msgstr "Bilan"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_bank_book
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_bank_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_bank_book
+msgid "Bank Book"
+msgstr "Livret de banque"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Bank and\n"
+" Cash Accounts"
+msgstr "Comptes bancaires et espèces"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Bank and Cash Accounts"
+msgstr "Comptes bancaires et espèces"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_cash_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_cash_book
+msgid "Cash Book"
+msgstr "Livre de caisse"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Cash basis method"
+msgstr "Méthode de comptabilité de caisse"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Communication"
+msgstr "Communication"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Company"
+msgstr "Entreprise"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Comparison"
+msgstr "Comparaison"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost\n"
+" of\n"
+" Revenue"
+msgstr "Coût des revenus"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost of\n"
+" Revenue"
+msgstr "Coût des revenus"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_date
+msgid "Created on"
+msgstr "Créé sur"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Credit"
+msgstr "Crédit"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Currency"
+msgstr "Devise"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Allocated Earnings"
+msgstr "Gains actuellement alloués"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Assets"
+msgstr "Actifs actuels"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Earnings"
+msgstr "Gains actuels"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current Allocated\n"
+" Earnings"
+msgstr "Gains actuellement alloués"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Assets"
+msgstr "Actifs actuels"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Liabilities"
+msgstr "Passif actuel"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Date"
+msgstr "Date"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid ""
+"Date\n"
+" :"
+msgstr "Date"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Date Range"
+msgstr "Plage de dates"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Dates"
+msgstr "Rendez-vous"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Debit"
+msgstr "Débit"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Depreciation"
+msgstr "Dépréciation"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__display_name
+msgid "Display Name"
+msgstr "Afficher un nom"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__draft
+msgid "Draft"
+msgstr "Brouillon"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Due Date"
+msgstr "Date d'échéance"
+
+#. module: dynamic_accounts_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.dynamic_report_accounting
+msgid "Dynamic Financial Reports"
+msgstr "Rapports financiers dynamiques"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "EQUITY"
+msgstr "ÉQUITÉ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"End\n"
+" Date\n"
+" :"
+msgstr "Date de fin:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "End Balance"
+msgstr "Solde final"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"End Date\n"
+" :"
+msgstr "Date de fin:"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "End date"
+msgstr "Date de fin"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Month"
+msgstr "Fin du mois dernier"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Quarter"
+msgstr "Fin du dernier trimestre"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last year"
+msgstr "Fin de l'année dernière"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Entry label"
+msgstr "Etiquette d'entrée"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Expected Date"
+msgstr "Date prévue"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Expenses"
+msgstr "Dépenses"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Export (XLSX)"
+msgstr "Exporter (XLSX)"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Grand livre général"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Grand livre général"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.actions.client,name:dynamic_accounts_report.action_general_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_general_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_general_ledger
+#, python-format
+msgid "General Ledger"
+msgstr "Grand livre général"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_general_ledger
+msgid "General Ledger Report"
+msgstr "Rapport du grand livre général"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Generic Tax Report"
+msgstr "Rapport fiscal générique"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Gross Profit"
+msgstr "Bénéfice brut"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Account > Tax"
+msgstr "Regrouper par : Compte > Taxe"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Tax > Account"
+msgstr "Regrouper par : Taxe > Compte"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__id
+msgid "ID"
+msgstr "IDENTIFIANT"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Include Draft Entries"
+msgstr "Inclure les brouillons d'entrées"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Income"
+msgstr "Revenu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Initial Balance"
+msgstr "Balance initiale"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Invoice Date"
+msgstr "Date de facture"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "JRNL"
+msgstr "JRNL"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Journal"
+msgstr "Journal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Journal Items"
+msgstr "Éléments du journal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+#, python-format
+msgid "Journals"
+msgstr "Journaux"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Journals:"
+msgstr "Journaux:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES"
+msgstr "PASSIFS"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES + EQUITY"
+msgstr "PASSIF + CAPITAUX PROPRES"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last month"
+msgstr "Le mois dernier"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last quarter"
+msgstr "Dernier quart"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last year"
+msgstr "L'année dernière"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Matching Number"
+msgstr "Numéro correspondant"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Move"
+msgstr "Se déplacer"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "NET"
+msgstr "FILET"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Net Profit"
+msgstr "Bénéfice net"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "No Comparison"
+msgstr "Aucune comparaison"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Number of Periods:"
+msgstr "Nombre de périodes :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Older"
+msgstr "Plus vieux"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Open"
+msgstr "Ouvrir"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "en fonctionnement"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "Résultat d'exploitation"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Options"
+msgstr "Possibilités"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Options : Posted Entries"
+msgstr "Options : Entrées publiées"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Options : Posted Entries ,"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid "Options :Posted Entries"
+msgstr "Options : Entrées publiées"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid "Options :Posted Entries ,"
+msgstr "Options : Entrées publiées,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Other\n"
+" Income"
+msgstr "Autre revenu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Other Income"
+msgstr "Autre revenu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Partner"
+msgstr "Partenaire"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_partner_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_partner_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_partner_ledger
+msgid "Partner Ledger"
+msgstr "Grand livre des partenaires"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_partner_ledger
+msgid "Partner Ledger Report"
+msgstr "Rapport du grand livre partenaire"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Payable"
+msgstr "Payable"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Payables"
+msgstr "Dettes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Assets"
+msgstr "Plus actifs non courants"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Liabilities"
+msgstr "Plus passifs non courants"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus Fixed\n"
+" Assets"
+msgstr "Plus les immobilisations"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Fixed Assets"
+msgstr "Plus les immobilisations"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Assets"
+msgstr "Plus actifs non courants"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Liabilities"
+msgstr "Plus passifs non courants"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__posted
+msgid "Posted"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid "Posted ,"
+msgstr "Publié"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Posted Entries"
+msgstr "Entrées publiées"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Prepayments"
+msgstr "Paiements anticipés"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Previous Period"
+msgstr "Période précédente"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Print (PDF)"
+msgstr "Imprimer (PDF)"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_profit_loss
+msgid "Profit And Loss"
+msgstr "Profit et perte"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_dynamic_balance_sheet_report
+msgid "Profit Loss Report"
+msgstr "Rapport de perte de profit"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_profit_and_loss
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_profit_and_loss_report
+msgid "Profit and Loss"
+msgstr "Profit et perte"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Purchase"
+msgstr "Achat"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Receivable"
+msgstr "Recevable"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Receivables"
+msgstr "Receivables"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Ref"
+msgstr "Réf"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Reference"
+msgstr "Référence"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Report"
+msgstr "Rapport"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Reports :"
+msgstr "Rapport :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Retained\n"
+" Earnings"
+msgstr "Des bénéfices non répartis"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Retained Earnings"
+msgstr "Des bénéfices non répartis"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Sales"
+msgstr "Ventes"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Same Period Last Year"
+msgstr "Même période l'année dernière"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+msgid "Select one or more accounts."
+msgstr "Sélectionnez un ou plusieurs comptes."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+msgid "Select one or more journals."
+msgstr "Sélectionnez un ou plusieurs journaux."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Select the company to which this record belongs."
+msgstr "Sélectionnez la société à laquelle appartient cet enregistrement."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Select the target move status."
+msgstr "Sélectionnez le statut du déplacement cible."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "Specify the end date."
+msgstr "Précisez la date de fin."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Specify the start date."
+msgstr "Précisez la date de fin."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Date de début :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Date de début :"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Start date"
+msgstr "Date de début"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "TAX"
+msgstr "IMPÔT"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Target Move"
+msgstr "Déplacement cible"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Target Move:"
+msgstr "Déplacement cible :"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Target move"
+msgstr "Mouvement cible"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_tax_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_tax_report
+#: model:ir.model,name:dynamic_accounts_report.model_tax_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.tax_report_menu
+msgid "Tax Report"
+msgstr "Rapport fiscal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Month"
+msgstr "Ce mois-ci"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Quarter"
+msgstr "Ce trimestre"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Year"
+msgstr "Cette année"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "Today"
+msgstr "Aujourd'hui"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Total"
+msgstr "Totale"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Total\n"
+" Expenses"
+msgstr "Dépenses totales"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total ASSETS"
+msgstr "ACTIF total"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Assets"
+msgstr "Le total des actifs courants"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Liabilities"
+msgstr "Total du passif à court terme"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total EQUITY"
+msgstr "CAPITAUX PROPRES totaux"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Total Income"
+msgstr "Revenu total"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total LIABILITIES"
+msgstr "Responsabilités totales"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Unallocated Earnings"
+msgstr "Gains totaux non répartis"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_trial_balance
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_trial_balance
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_trial_balance
+msgid "Trial Balance"
+msgstr "Balance de vérification"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_trial_balance
+msgid "Trial Balance Report"
+msgstr "Rapport de balance de vérification"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Unallocated Earnings"
+msgstr "Gains non alloués"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Unfold All"
+msgstr "Déplier tout"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Accounts"
+msgstr "Comptes inconnus"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Partner"
+msgstr "Partenaire inconnu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Afficher l'écriture de journal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Afficher l'écriture de journal"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+msgid "posted,"
+msgstr "posté"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+msgid "to"
+msgstr "à"
diff --git a/third_party_addons/dynamic_accounts_report/i18n/id.po b/third_party_addons/dynamic_accounts_report/i18n/id.po
new file mode 100644
index 000000000..7d7921c5f
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/i18n/id.po
@@ -0,0 +1,2312 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * dynamic_accounts_report
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-28 11:11+0000\n"
+"PO-Revision-Date: 2023-11-28 11:11+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "1-30"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "31-60"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "61-90"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "91-120"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Expenses\n"
+" "
+msgstr "Pengeluaran"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Income\n"
+" "
+msgstr "Penghasilan"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Total Income\n"
+" "
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Total Expenses\n"
+" "
+msgstr "Jumlah Biaya"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Gross Profit\n"
+" "
+msgstr "Laba kotor"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Net Profit\n"
+" "
+msgstr "Laba bersih"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Cost of\n"
+" Revenue\n"
+" "
+msgstr "Pendapatan"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Depreciation\n"
+" "
+msgstr "Depresiasi"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Expenses "
+msgstr "Pengeluaran"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Operating Income "
+msgstr "Pendapatan operasional"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Other Income\n"
+" "
+msgstr "Penghasilan lain"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Purchase "
+msgstr "Pembelian"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Sales "
+msgstr "Penjualan"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" ASSETS\n"
+" "
+msgstr "AKTIVA"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" EQUITY\n"
+" "
+msgstr "EKUITAS"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES\n"
+" "
+msgstr "KEWAJIBAN"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Assets\n"
+" "
+msgstr "Aset lancar"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Liabilities\n"
+" "
+msgstr "Kewajiban Lancar"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES + EQUITY\n"
+" "
+msgstr "KEWAJIBAN + EKUITAS"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Assets\n"
+" "
+msgstr "Total aset"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Assets\n"
+" "
+msgstr "Total aset saat ini"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Liabilities\n"
+" "
+msgstr "Jumlah Kewajiban Lancar"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total EQUITY\n"
+" "
+msgstr "Total EKUITAS"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total LIABILITIES\n"
+" "
+msgstr "Jumlah KEWAJIBAN"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Unallocated Earnings\n"
+" "
+msgstr "Total Pendapatan yang Belum Dialokasikan"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Unallocated Earnings\n"
+" "
+msgstr "Penghasilan yang Tidak Dialokasikan"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Bank and Cash Accounts\n"
+" "
+msgstr "Rekening Bank dan Kas"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Allocated Earnings\n"
+" "
+msgstr "Pendapatan yang Dialokasikan Saat Ini"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Assets\n"
+" "
+msgstr "Aset lancar"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Earnings\n"
+" "
+msgstr "Penghasilan Saat Ini"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Liabilities\n"
+" "
+msgstr "Kewajiban Lancar"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Payables\n"
+" "
+msgstr "Hutang"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Fixed Assets\n"
+" "
+msgstr "Ditambah Aset Tetap"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Assets\n"
+" "
+msgstr "Ditambah Aset Tidak Lancar"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Liabilities\n"
+" "
+msgstr "Ditambah Kewajiban Tidak Lancar"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Prepayments\n"
+" "
+msgstr "Pembayaran di muka"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Receivables\n"
+" "
+msgstr "Piutang"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Retained Earnings\n"
+" "
+msgstr "Pendapatan yang disimpan"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid ""
+"Unknown\n"
+" Account\n"
+" "
+msgstr "Akun Tidak Dikenal"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+msgid ""
+"Unknown\n"
+" Partner\n"
+" "
+msgstr "Mitra Tidak Dikenal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "ASSETS"
+msgstr "AKTIVA"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Account"
+msgstr "Akun"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_bank_book_report
+msgid "Account Bank Book Report"
+msgstr "Laporan Buku Bank Rekening"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_cash_book_report
+msgid "Account Cash Book Report"
+msgstr "Laporan Buku Kas Rekening"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+#, python-format
+msgid "Accounts"
+msgstr "Akun"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Accounts:"
+msgstr "Akun:"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_payable
+msgid "Age Payable"
+msgstr "Hutang Usia"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_receivable
+msgid "Age Receivable"
+msgstr "Usia Piutang"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_payable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_payable_menu
+msgid "Aged Payable"
+msgstr "Hutang Berumur"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_payable_report
+msgid "Aged Payable Report"
+msgstr "Laporan Hutang Berumur"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_receivable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_receivable_menu
+msgid "Aged Receivable"
+msgstr "Piutang Berumur"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_receivable_report
+msgid "Aged Receivable Report"
+msgstr "Laporan Umur Piutang"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Amount Currency"
+msgstr "Jumlah Mata Uang"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Analytic Account"
+msgstr "Akun Analitik"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic Accounts"
+msgstr "Akun Analitik"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Analytic Accounts:"
+msgstr "Akun Analitik:"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic accounts associated with the current record."
+msgstr "Akun analitik yang terkait dengan catatan saat ini."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Apply"
+msgstr "Menerapkan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "At Date"
+msgstr "Pada Tanggal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#, python-format
+msgid "Balance"
+msgstr "Keseimbangan"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_balance_sheet
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_balance_sheet
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_balance_sheet_report
+msgid "Balance Sheet"
+msgstr "Neraca keuangan"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_bank_book
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_bank_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_bank_book
+msgid "Bank Book"
+msgstr "Buku bank"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Bank and\n"
+" Cash Accounts"
+msgstr "Rekening Bank dan Kas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Bank and Cash Accounts"
+msgstr "Rekening Bank dan Kas"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_cash_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_cash_book
+msgid "Cash Book"
+msgstr "Buku Kas"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Cash basis method"
+msgstr "Metode berbasis tunai"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Communication"
+msgstr "Komunikasi"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Company"
+msgstr "Perusahaan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Comparison"
+msgstr "Perbandingan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost\n"
+" of\n"
+" Revenue"
+msgstr "Biaya Pendapatan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost of\n"
+" Revenue"
+msgstr "Biaya Pendapatan"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_uid
+msgid "Created by"
+msgstr "Dibuat oleh"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_date
+msgid "Created on"
+msgstr "Dibuat pada"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Credit"
+msgstr "Kredit"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Currency"
+msgstr "Mata uang"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Allocated Earnings"
+msgstr "Pendapatan yang Dialokasikan Saat Ini"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Assets"
+msgstr "Aset lancar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Earnings"
+msgstr "Penghasilan Saat Ini"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current Allocated\n"
+" Earnings"
+msgstr "Pendapatan yang Dialokasikan Saat Ini"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Assets"
+msgstr "Aset lancar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Liabilities"
+msgstr "Kewajiban Lancar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Date"
+msgstr "Tanggal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid ""
+"Date\n"
+" :"
+msgstr "Tanggal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Date Range"
+msgstr "Rentang Tanggal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Dates"
+msgstr "tanggal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Debit"
+msgstr "Debet"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Depreciation"
+msgstr "Depresiasi"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__display_name
+msgid "Display Name"
+msgstr "Nama tampilan"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__draft
+msgid "Draft"
+msgstr "Draf"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Due Date"
+msgstr "Tenggat waktu"
+
+#. module: dynamic_accounts_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.dynamic_report_accounting
+msgid "Dynamic Financial Reports"
+msgstr "Laporan Keuangan Dinamis"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "EQUITY"
+msgstr "EKUITAS"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"End\n"
+" Date\n"
+" :"
+msgstr "Tanggal Berakhir:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "End Balance"
+msgstr "Saldo Akhir"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"End Date\n"
+" :"
+msgstr "Tanggal Berakhir"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "End date"
+msgstr "Tanggal akhir"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Month"
+msgstr "Akhir Bulan Lalu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Quarter"
+msgstr "Akhir Kuartal Terakhir"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last year"
+msgstr "Akhir tahun lalu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Entry label"
+msgstr "Label entri"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Expected Date"
+msgstr "Tanggal yang Diharapkan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Expenses"
+msgstr "Pengeluaran"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Export (XLSX)"
+msgstr "Ekspor (XLSX)"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Jurnal umum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Jurnal umum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.actions.client,name:dynamic_accounts_report.action_general_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_general_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_general_ledger
+#, python-format
+msgid "General Ledger"
+msgstr "Jurnal umum"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_general_ledger
+msgid "General Ledger Report"
+msgstr "Laporan Buku Besar Umum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Generic Tax Report"
+msgstr "Laporan Pajak Umum"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Gross Profit"
+msgstr "Laba kotor"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Account > Tax"
+msgstr "Kelompokkan berdasarkan: Akun > Pajak"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Tax > Account"
+msgstr "Kelompokkan berdasarkan: Pajak > Rekening"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__id
+msgid "ID"
+msgstr "PENGENAL"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Include Draft Entries"
+msgstr "Sertakan Entri Draf"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Income"
+msgstr "Penghasilan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Initial Balance"
+msgstr "Saldo Awal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Invoice Date"
+msgstr "Tanggal faktur"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "JRNL"
+msgstr "JRNL"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Journal"
+msgstr "Jurnal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Journal Items"
+msgstr "Item Jurnal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+#, python-format
+msgid "Journals"
+msgstr "Jurnal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Journals:"
+msgstr "Jurnal:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES"
+msgstr "LIABILITIES"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES + EQUITY"
+msgstr "KEWAJIBAN + EKUITAS"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_uid
+msgid "Last Updated by"
+msgstr "Terakhir Diperbarui oleh"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_date
+msgid "Last Updated on"
+msgstr "Terakhir diperbarui saat"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last month"
+msgstr "Bulan lalu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last quarter"
+msgstr "Kuartal terakhir"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last year"
+msgstr "Tahun lalu"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Matching Number"
+msgstr "Nomor yang Cocok"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Move"
+msgstr "Bergerak"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "NET"
+msgstr "BERSIH"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Net Profit"
+msgstr "Laba bersih"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "No Comparison"
+msgstr "Tidak ada perbandingan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Number of Periods:"
+msgstr "Jumlah Periode:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Older"
+msgstr "Lebih tua"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Open"
+msgstr "Membuka"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "Pendapatan operasional"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "Pendapatan operasional"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Options"
+msgstr "Pilihan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Options : Posted Entries"
+msgstr "Opsi : Entri yang Diposting"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Options : Posted Entries ,"
+msgstr "Opsi : Entri yang Diposting ,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid "Options :Posted Entries"
+msgstr "Opsi : Entri yang Diposting"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid "Options :Posted Entries ,"
+msgstr "Opsi: Entri yang Diposting,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Other\n"
+" Income"
+msgstr "Penghasilan lain"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Other Income"
+msgstr "Penghasilan lain"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Partner"
+msgstr "Mitra"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_partner_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_partner_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_partner_ledger
+msgid "Partner Ledger"
+msgstr "Buku Besar Mitra"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_partner_ledger
+msgid "Partner Ledger Report"
+msgstr "Laporan Buku Besar Mitra"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Payable"
+msgstr "Hutang"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Payables"
+msgstr "Hutang"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Assets"
+msgstr "Ditambah Aset Tidak Lancar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Liabilities"
+msgstr "Ditambah Kewajiban Tidak Lancar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus Fixed\n"
+" Assets"
+msgstr "Ditambah Aset Tetap"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Fixed Assets"
+msgstr "Ditambah Aset Tetap"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Assets"
+msgstr "Ditambah Aset Tidak Lancar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Liabilities"
+msgstr "Ditambah Kewajiban Tidak Lancar"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__posted
+msgid "Posted"
+msgstr "Diposting"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid "Posted ,"
+msgstr "Diposting ,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Posted Entries"
+msgstr "Entri yang Diposting"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Prepayments"
+msgstr "Pembayaran di muka"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Previous Period"
+msgstr "Periode sebelumnya"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Print (PDF)"
+msgstr "Cetak (PDF)"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_profit_loss
+msgid "Profit And Loss"
+msgstr "Laba rugi"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_dynamic_balance_sheet_report
+msgid "Profit Loss Report"
+msgstr "Laporan Laba Rugi"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_profit_and_loss
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_profit_and_loss_report
+msgid "Profit and Loss"
+msgstr "Laba rugi"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Purchase"
+msgstr "Pembelian"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Receivable"
+msgstr "Piutang"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Receivables"
+msgstr "Piutang"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Ref"
+msgstr "Ref"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Reference"
+msgstr "Referensi"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Report"
+msgstr "Laporan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Reports :"
+msgstr "Laporan :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Retained\n"
+" Earnings"
+msgstr "Pendapatan yang disimpan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Retained Earnings"
+msgstr "Pendapatan yang disimpan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Sales"
+msgstr "Penjualan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Same Period Last Year"
+msgstr "Periode yang Sama Tahun Lalu"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+msgid "Select one or more accounts."
+msgstr "Pilih satu atau lebih akun."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+msgid "Select one or more journals."
+msgstr "Pilih satu atau lebih jurnal."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Select the company to which this record belongs."
+msgstr "Pilih perusahaan yang memiliki catatan ini."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Select the target move status."
+msgstr "Pilih status pemindahan target."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "Specify the end date."
+msgstr "Tentukan tanggal akhir."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Specify the start date."
+msgstr "Tentukan tanggal mulai."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Mulai tanggal :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Mulai tanggal :"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Start date"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "TAX"
+msgstr "PAJAK"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Target Move"
+msgstr "Gerakan Sasaran"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Target Move:"
+msgstr "Gerakan Sasaran:"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Target move"
+msgstr "Gerakan sasaran"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_tax_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_tax_report
+#: model:ir.model,name:dynamic_accounts_report.model_tax_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.tax_report_menu
+msgid "Tax Report"
+msgstr "Laporan Pajak"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Month"
+msgstr "Bulan ini"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Quarter"
+msgstr "Kuartal ini"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Year"
+msgstr "Tahun ini"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "Today"
+msgstr "Hari ini"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Total"
+msgstr "Total"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Total\n"
+" Expenses"
+msgstr "Jumlah Biaya"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total ASSETS"
+msgstr "Total aset"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Assets"
+msgstr "Total aset saat ini"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Liabilities"
+msgstr "Jumlah Kewajiban Lancar"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total EQUITY"
+msgstr "Total EKUITAS"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Total Income"
+msgstr "Jumlah pemasukan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total LIABILITIES"
+msgstr "Total LIABILITIES"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Unallocated Earnings"
+msgstr "Total Pendapatan yang Belum Dialokasikan"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_trial_balance
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_trial_balance
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_trial_balance
+msgid "Trial Balance"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_trial_balance
+msgid "Trial Balance Report"
+msgstr "Laporan Neraca Percobaan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Unallocated Earnings"
+msgstr "Penghasilan yang Tidak Dialokasikan"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Unfold All"
+msgstr "Buka Semua"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Accounts"
+msgstr "Akun Tidak Dikenal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Partner"
+msgstr "Mitra Tidak Dikenal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Lihat Entri Jurnal"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Lihat Entri Jurnal"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+msgid "posted,"
+msgstr "diposting,"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+msgid "to"
+msgstr "ke"
diff --git a/third_party_addons/dynamic_accounts_report/i18n/uk_UA.po b/third_party_addons/dynamic_accounts_report/i18n/uk_UA.po
new file mode 100644
index 000000000..5d8822ec0
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/i18n/uk_UA.po
@@ -0,0 +1,2312 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * dynamic_accounts_report
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-28 11:11+0000\n"
+"PO-Revision-Date: 2023-11-28 11:11+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "1-30"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "31-60"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "61-90"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+msgid "91-120"
+msgstr ""
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Expenses\n"
+" "
+msgstr "Витрати"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Income\n"
+" "
+msgstr "Дохід"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Total Income\n"
+" "
+msgstr "Загальний дохід"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Total Expenses\n"
+" "
+msgstr "Загальні витрати"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Gross Profit\n"
+" "
+msgstr "Загальний прибуток"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"\n"
+" Net Profit\n"
+" "
+msgstr "Чистий дохід"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Cost of\n"
+" Revenue\n"
+" "
+msgstr "Вартість доходу"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Depreciation\n"
+" "
+msgstr "Амортизація"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Expenses "
+msgstr "Витрати"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Operating Income "
+msgstr "Операційний дохід"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid ""
+"Other Income\n"
+" "
+msgstr "Інші прибутки"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Purchase "
+msgstr "Купівля"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Sales "
+msgstr "Продажі"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" ASSETS\n"
+" "
+msgstr "АКТИВИ"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" EQUITY\n"
+" "
+msgstr "ВЛАСНИЙ КАПІТАЛ"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES\n"
+" "
+msgstr "ЗОБОВ'ЯЗАННЯ"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Assets\n"
+" "
+msgstr "Оборотні активи"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Current Liabilities\n"
+" "
+msgstr "Поточні зобов'язання"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" LIABILITIES + EQUITY\n"
+" "
+msgstr "ЗОБОВ'ЯЗАННЯ + ВЛАСНИЙ КАПІТАЛ"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Assets\n"
+" "
+msgstr "Сукупні активи"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Assets\n"
+" "
+msgstr "Загальні оборотні активи"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Current Liabilities\n"
+" "
+msgstr "Загальна сума поточних зобов'язань"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total EQUITY\n"
+" "
+msgstr "Сукупний капітал"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total LIABILITIES\n"
+" "
+msgstr "Всього ЗОБОВ'ЯЗАНЬ"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Total Unallocated Earnings\n"
+" "
+msgstr "Загальний нерозподілений прибуток"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"\n"
+" Unallocated Earnings\n"
+" "
+msgstr "Нерозподілені прибутки"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Bank and Cash Accounts\n"
+" "
+msgstr "Банківські та касові рахунки"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Allocated Earnings\n"
+" "
+msgstr "Поточний розподілений прибуток"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Assets\n"
+" "
+msgstr "Оборотні активи"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Earnings\n"
+" "
+msgstr "Поточний прибуток"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Current Liabilities\n"
+" "
+msgstr "Поточні зобов'язання"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Payables\n"
+" "
+msgstr "Кредиторська заборгованість"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Fixed Assets\n"
+" "
+msgstr "Plus Fixed Assets"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Assets\n"
+" "
+msgstr "Плюс необоротні активи"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Plus Non-current Liabilities\n"
+" "
+msgstr "Плюс довгострокові зобов'язання"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Prepayments\n"
+" "
+msgstr "Передоплати"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Receivables\n"
+" "
+msgstr "Дебіторська заборгованість"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+msgid ""
+"Retained Earnings\n"
+" "
+msgstr "Нерозподілений прибуток"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid ""
+"Unknown\n"
+" Account\n"
+" "
+msgstr "Невідомий обліковий запис"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+msgid ""
+"Unknown\n"
+" Partner\n"
+" "
+msgstr "Невідомий партнер"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "ASSETS"
+msgstr "АКТИВИ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Account"
+msgstr "Обліковий запис"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_bank_book_report
+msgid "Account Bank Book Report"
+msgstr "Звіт про банківську книгу"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_cash_book_report
+msgid "Account Cash Book Report"
+msgstr "Звіт по касовій книзі рахунку"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+#, python-format
+msgid "Accounts"
+msgstr "Облікові записи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Accounts:"
+msgstr "Облікові записи:"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_payable
+msgid "Age Payable"
+msgstr "Оплачується вік"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_aged_receivable
+msgid "Age Receivable"
+msgstr "Вік дебіторської заборгованості"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_payable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_payable_menu
+msgid "Aged Payable"
+msgstr "Виплачується за віком"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_payable_report
+msgid "Aged Payable Report"
+msgstr "Звіт про застарілу плату"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_aged_receivable
+#: model:ir.ui.menu,name:dynamic_accounts_report.aged_receivable_menu
+msgid "Aged Receivable"
+msgstr "Застаріла дебіторська заборгованість"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_age_receivable_report
+msgid "Aged Receivable Report"
+msgstr "Звіт про застарілу дебіторську заборгованість"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Amount Currency"
+msgstr "Сума Валюта"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Analytic Account"
+msgstr "Аналітичний рахунок"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic Accounts"
+msgstr "Аналітичні рахунки"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Analytic Accounts:"
+msgstr "Аналітичні рахунки:"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__analytic_ids
+msgid "Analytic accounts associated with the current record."
+msgstr "Аналітичні рахунки, пов'язані з поточним записом."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Apply"
+msgstr "Застосувати"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "At Date"
+msgstr "На дату"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.balance_sheet
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#, python-format
+msgid "Balance"
+msgstr "Баланс"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_balance_sheet
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_balance_sheet
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_balance_sheet_report
+msgid "Balance Sheet"
+msgstr "Бухгалтерський баланс"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_bank_book
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_bank_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_bank_book
+msgid "Bank Book"
+msgstr "Банківська книга"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Bank and\n"
+" Cash Accounts"
+msgstr "Банківські та касові рахунки"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Bank and Cash Accounts"
+msgstr "Банківські та касові рахунки"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_cash_book
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_cash_book
+msgid "Cash Book"
+msgstr "Касова книга"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Cash basis method"
+msgstr "Касовий метод"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Communication"
+msgstr "спілкування"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Company"
+msgstr "Компанія"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Comparison"
+msgstr "Порівняння"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost\n"
+" of\n"
+" Revenue"
+msgstr "Вартість доходу"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Cost of\n"
+" Revenue"
+msgstr "Вартість доходу"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_uid
+msgid "Created by"
+msgstr "Створений"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__create_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__create_date
+msgid "Created on"
+msgstr "Створено на"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Credit"
+msgstr "Кредит"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Currency"
+msgstr "Валюта"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Allocated Earnings"
+msgstr "Поточний розподілений прибуток"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Assets"
+msgstr "Оборотні активи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current\n"
+" Earnings"
+msgstr "Поточний прибуток"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Current Allocated\n"
+" Earnings"
+msgstr "Поточний розподілений прибуток"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Assets"
+msgstr "Оборотні активи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Current Liabilities"
+msgstr "Поточні зобов'язання"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#, python-format
+msgid "Date"
+msgstr "Дата"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid ""
+"Date\n"
+" :"
+msgstr "Дата:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Date Range"
+msgstr "Проміжок часу"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Dates"
+msgstr "дати"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Debit"
+msgstr "Дебетовий"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Depreciation"
+msgstr "Амортизація"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__display_name
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__display_name
+msgid "Display Name"
+msgstr "Відображуване ім'я"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__draft
+msgid "Draft"
+msgstr "Чернетка"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Due Date"
+msgstr "Термін виконання"
+
+#. module: dynamic_accounts_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.dynamic_report_accounting
+msgid "Dynamic Financial Reports"
+msgstr "Динамічні фінансові звіти"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "EQUITY"
+msgstr "ВЛАСНИЙ КАПІТАЛ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"End\n"
+" Date\n"
+" :"
+msgstr "Дата закінчення:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "End Balance"
+msgstr "Кінцевий баланс"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"End Date\n"
+" :"
+msgstr "Дата закінчення:"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "End date"
+msgstr "Дата закінчення"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Month"
+msgstr "Кінець минулого місяця"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last Quarter"
+msgstr "Кінець останньої чверті"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "End of Last year"
+msgstr "Кінець минулого року"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Entry label"
+msgstr "Вхідна мітка"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Expected Date"
+msgstr "Очікувана дата"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Expenses"
+msgstr "Витрати"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Export (XLSX)"
+msgstr "Експорт (XLSX)"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Головна книга"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"General\n"
+" Ledger"
+msgstr "Головна книга"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.actions.client,name:dynamic_accounts_report.action_general_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_general_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_general_ledger
+#, python-format
+msgid "General Ledger"
+msgstr "Головна книга"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_general_ledger
+msgid "General Ledger Report"
+msgstr "Звіт Головної книги"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Generic Tax Report"
+msgstr "Типовий податковий звіт"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Gross Profit"
+msgstr "Загальний прибуток"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Account > Tax"
+msgstr "Згрупуйте за: Рахунок > Податок"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Group by: Tax > Account"
+msgstr "Згрупуйте за: податок > рахунок"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__id
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__id
+msgid "ID"
+msgstr "ID"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Include Draft Entries"
+msgstr "Включити чернетки"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Income"
+msgstr "Дохід"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Initial Balance"
+msgstr "Початковий баланс"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Invoice Date"
+msgstr "Дата рахунку-фактури"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "JRNL"
+msgstr "JRNL"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Journal"
+msgstr "журнал"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Journal Items"
+msgstr "Елементи журналу"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+#, python-format
+msgid "Journals"
+msgstr "Журнали"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Journals:"
+msgstr "Журнали:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES"
+msgstr "ЗОБОВ'ЯЗАННЯ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "LIABILITIES + EQUITY"
+msgstr "ЗОБОВ'ЯЗАННЯ + ВЛАСНИЙ КАПІТАЛ"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_uid
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_uid
+msgid "Last Updated by"
+msgstr "Востаннє оновлено"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_general_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_partner_ledger__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_account_trial_balance__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_payable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_age_receivable_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_bank_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_cash_book_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__write_date
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_tax_report__write_date
+msgid "Last Updated on"
+msgstr "Востаннє оновлено"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last month"
+msgstr "Минулого місяця"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last quarter"
+msgstr "Остання чверть"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Last year"
+msgstr "Минулого року"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Matching Number"
+msgstr "відповідний номер"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Move"
+msgstr "рухатися"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "NET"
+msgstr "NET"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Net Profit"
+msgstr "Чистий дохід"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "No Comparison"
+msgstr "Без порівняння"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Number of Periods:"
+msgstr "Кількість періодів:"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#, python-format
+msgid "Older"
+msgstr "Старший"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Open"
+msgstr "ВІДЧИНЕНО"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "Операційний дохід"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Operating\n"
+" Income"
+msgstr "Операційний дохід"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+#, python-format
+msgid "Options"
+msgstr "Опції"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Options : Posted Entries"
+msgstr "Параметри: Опубліковані записи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Options : Posted Entries ,"
+msgstr "Параметри: Опубліковані записи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid "Options :Posted Entries"
+msgstr "Параметри: Опубліковані записи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid "Options :Posted Entries ,"
+msgstr "Параметри: Опубліковані записи,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Other\n"
+" Income"
+msgstr "Інші прибутки"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Other Income"
+msgstr "Інші прибутки"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Partner"
+msgstr "Партнер"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_partner_ledger
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_partner_ledger
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_partner_ledger
+msgid "Partner Ledger"
+msgstr "Партнерська книга"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_partner_ledger
+msgid "Partner Ledger Report"
+msgstr "Звіт про партнерську книгу"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Payable"
+msgstr "Підлягає оплаті"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Payables"
+msgstr "Кредиторська заборгованість"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Assets"
+msgstr "Плюс необоротні активи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus\n"
+" Non-current Liabilities"
+msgstr "Плюс довгострокові зобов'язання"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Plus Fixed\n"
+" Assets"
+msgstr "Плюс Основні засоби"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Fixed Assets"
+msgstr "Плюс Основні засоби"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Assets"
+msgstr "Плюс необоротні активи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Plus Non-current Liabilities"
+msgstr "Плюс довгострокові зобов'язання"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields.selection,name:dynamic_accounts_report.selection__dynamic_balance_sheet_report__target_move__posted
+msgid "Posted"
+msgstr "Опубліковано"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+msgid "Posted ,"
+msgstr "Опубліковано ,"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Posted Entries"
+msgstr "Опубліковані записи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Prepayments"
+msgstr "Передоплати"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Previous Period"
+msgstr "Попередній період"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Print (PDF)"
+msgstr "Роздрукувати (PDF)"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_profit_loss
+msgid "Profit And Loss"
+msgstr "Прибуток і збиток"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_dynamic_balance_sheet_report
+msgid "Profit Loss Report"
+msgstr "Звіт про збитки прибутку"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_dynamic_profit_and_loss
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_profit_and_loss_report
+msgid "Profit and Loss"
+msgstr "Прибуток і збиток"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Purchase"
+msgstr "Купівля"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid "Receivable"
+msgstr "дебіторська заборгованість"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Receivables"
+msgstr "Дебіторська заборгованість"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Ref"
+msgstr "посилання"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#, python-format
+msgid "Reference"
+msgstr "довідка"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+msgid "Report"
+msgstr "звіт"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Reports :"
+msgstr "звіт :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid ""
+"Retained\n"
+" Earnings"
+msgstr "Нерозподілений прибуток"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Retained Earnings"
+msgstr "Нерозподілений прибуток"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#, python-format
+msgid "Sales"
+msgstr "Продажі"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "Same Period Last Year"
+msgstr "Такий самий період минулого року"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__account_ids
+msgid "Select one or more accounts."
+msgstr "Виберіть один або кілька облікових записів."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__journal_ids
+msgid "Select one or more journals."
+msgstr "Виберіть один або декілька журналів."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__company_id
+msgid "Select the company to which this record belongs."
+msgstr "Виберіть компанію, якій належить цей запис."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Select the target move status."
+msgstr "Виберіть статус цільового переміщення."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_to
+msgid "Specify the end date."
+msgstr "Вкажіть кінцеву дату."
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,help:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Specify the start date."
+msgstr "Вкажіть дату початку."
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Дата початку :"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid ""
+"Start\n"
+" Date :"
+msgstr "Дата початку :"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__date_from
+msgid "Start date"
+msgstr "Дата початку"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#, python-format
+msgid "TAX"
+msgstr "ПОДАТОК"
+
+#. module: dynamic_accounts_report
+#: model:ir.model.fields,field_description:dynamic_accounts_report.field_dynamic_balance_sheet_report__target_move
+msgid "Target Move"
+msgstr "Цільове переміщення"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Target Move:"
+msgstr "Цільовий хід:"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.profit_loss
+msgid "Target move"
+msgstr "Цільовий хід"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_tax_report
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_tax_report
+#: model:ir.model,name:dynamic_accounts_report.model_tax_report
+#: model:ir.ui.menu,name:dynamic_accounts_report.tax_report_menu
+msgid "Tax Report"
+msgstr "Податковий звіт"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Month"
+msgstr "Цього місяця"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Quarter"
+msgstr "Цей квартал"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#, python-format
+msgid "This Year"
+msgstr "Цього року"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#, python-format
+msgid "Today"
+msgstr "Сьогодні"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml:0
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_payable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.aged_receivable
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#, python-format
+msgid "Total"
+msgstr "Всього"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid ""
+"Total\n"
+" Expenses"
+msgstr "Загальні витрати"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total ASSETS"
+msgstr "Сукупні активи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Assets"
+msgstr "Загальні оборотні активи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Current Liabilities"
+msgstr "Загальна сума поточних зобов'язань"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total EQUITY"
+msgstr "Сукупний капітал"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Total Income"
+msgstr "Загальний дохід"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total LIABILITIES"
+msgstr "Всього ЗОБОВ'ЯЗАНЬ"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Total Unallocated Earnings"
+msgstr "Загальний нерозподілений прибуток"
+
+#. module: dynamic_accounts_report
+#: model:ir.actions.client,name:dynamic_accounts_report.action_trial_balance
+#: model:ir.actions.report,name:dynamic_accounts_report.action_print_trial_balance
+#: model:ir.ui.menu,name:dynamic_accounts_report.menu_trial_balance
+msgid "Trial Balance"
+msgstr "Пробний баланс"
+
+#. module: dynamic_accounts_report
+#: model:ir.model,name:dynamic_accounts_report.model_account_trial_balance
+msgid "Trial Balance Report"
+msgstr "Звіт про пробний баланс"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#, python-format
+msgid "Unallocated Earnings"
+msgstr "Нерозподілені прибутки"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml:0
+#, python-format
+msgid "Unfold All"
+msgstr "Розгорнути все"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Accounts"
+msgstr "Невідомі облікові записи"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"Unknown\n"
+" Partner"
+msgstr "Невідомий партнер"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Переглянути запис журналу"
+
+#. module: dynamic_accounts_report
+#. odoo-javascript
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/cust1/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml:0
+#: code:addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml:0
+#, python-format
+msgid ""
+"View\n"
+" Journal\n"
+" Entry"
+msgstr "Переглянути запис журналу"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+msgid "posted,"
+msgstr "розміщено,"
+
+#. module: dynamic_accounts_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.bank_book
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.general_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.partner_ledger
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.tax_report
+#: model_terms:ir.ui.view,arch_db:dynamic_accounts_report.trial_balance
+msgid "to"
+msgstr "до"
diff --git a/third_party_addons/dynamic_accounts_report/models/__init__.py b/third_party_addons/dynamic_accounts_report/models/__init__.py
new file mode 100644
index 000000000..914eb1f36
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/__init__.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import account_general_ledger
+from . import account_partner_ledger
+from . import account_trial_balance
+from . import aged_payable_report
+from . import aged_receivable_report
+from . import bank_book_report
+from . import cash_book_report
+from . import dynamic_balance_sheet_report
+from . import tax_report
diff --git a/third_party_addons/dynamic_accounts_report/models/account_general_ledger.py b/third_party_addons/dynamic_accounts_report/models/account_general_ledger.py
new file mode 100644
index 000000000..e26fdddbf
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/account_general_ledger.py
@@ -0,0 +1,333 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import io
+import json
+import calendar
+from dateutil.relativedelta import relativedelta
+import xlsxwriter
+from odoo import api, fields, models
+from datetime import datetime
+from odoo.tools import date_utils
+
+
+class AccountGeneralLedger(models.TransientModel):
+ """For creating General Ledger report"""
+ _name = 'account.general.ledger'
+ _description = 'General Ledger Report'
+
+ @api.model
+ def view_report(self, option, tag):
+ """
+ Retrieve partner ledger report data based on options and tags.
+
+ :param option: The options to filter the report data.
+ :type option: str
+
+ :param tag: The tag to filter the report data.
+ :type tag: str
+
+ :return: A dictionary containing the partner ledger report data.
+ :rtype: dict
+ """
+ account_dict = {}
+ account_totals = {}
+ move_line_ids = self.env['account.move.line'].search(
+ [('parent_state', '=', 'posted')])
+ account_ids = move_line_ids.mapped('account_id')
+ account_dict['journal_ids'] = self.env['account.journal'].search_read(
+ [], ['name'])
+ account_dict['analytic_ids'] = self.env[
+ 'account.analytic.account'].search_read(
+ [], ['name'])
+ for account in account_ids:
+ move_line_id = move_line_ids.filtered(
+ lambda x: x.account_id == account)
+ move_line_list = []
+ for move_line in move_line_id:
+ move_line_data = move_line.read(
+ ['date', 'name', 'move_name', 'debit', 'credit',
+ 'partner_id', 'account_id', 'journal_id', 'move_id',
+ 'analytic_line_ids'])
+ move_line_list.append(move_line_data)
+ account_dict[account.display_name] = move_line_list
+ currency_id = self.env.company.currency_id.symbol
+ account_totals[account.display_name] = {
+ 'total_debit': round(sum(move_line_id.mapped('debit')), 2),
+ 'total_credit': round(sum(move_line_id.mapped('credit')), 2),
+ 'currency_id': currency_id,
+ 'account_id': account.id}
+ account_dict['account_totals'] = account_totals
+ return account_dict
+
+ @api.model
+ def get_filter_values(self, journal_id, date_range, options, analytic,
+ method):
+ """
+ Retrieve filtered values for the partner ledger report.
+
+ :param journal_id: The journal IDs to filter the report data.
+ :type journal_id: list
+
+ :param date_range: The date range option to filter the report data.
+ :type date_range: str or dict
+
+ :param options: The additional options to filter the report data.
+ :type options: dict
+
+ :param method: Find the method
+ :type options: dict
+
+ :param analytic: The analytic IDs to filter the report data.
+ :type analytic: list
+
+ :return: A dictionary containing the filtered values for the partner
+ ledger report.
+ :rtype: dict
+ """
+ account_dict = {}
+ account_totals = {}
+ today = fields.Date.today()
+ quarter_start, quarter_end = date_utils.get_quarter(today)
+ previous_quarter_start = quarter_start - relativedelta(months=3)
+ previous_quarter_end = quarter_start - relativedelta(days=1)
+ if options == {}:
+ options = None
+ if options is None:
+ option_domain = ['posted']
+ elif 'draft' in options:
+ option_domain = ['posted', 'draft']
+ domain = [('journal_id', 'in', journal_id),
+ ('parent_state', 'in', option_domain), ] if journal_id else [
+ ('parent_state', 'in', option_domain), ]
+ if method == {}:
+ method = None
+ if method is not None and 'cash' in method:
+ domain += [('journal_id', 'in',
+ self.env.company.tax_cash_basis_journal_id.ids), ]
+ if analytic:
+ analytic_line = self.env['account.analytic.line'].search(
+ [('account_id', 'in', analytic)]).mapped('id')
+ domain += [('analytic_line_ids', 'in', analytic_line)]
+ if date_range:
+ if date_range == 'month':
+ domain += [('date', '>=', today.replace(day=1)),
+ ('date', '<=', today)]
+ elif date_range == 'year':
+ domain += [('date', '>=', today.replace(month=1, day=1)),
+ ('date', '<=', today)]
+ elif date_range == 'quarter':
+ domain += [('date', '>=', quarter_start),
+ ('date', '<=', quarter_end)]
+ elif date_range == 'last-month':
+ last_month_start = today.replace(day=1) - relativedelta(
+ months=1)
+ last_month_end = last_month_start + relativedelta(
+ day=calendar.monthrange(last_month_start.year,
+ last_month_start.month)[
+ 1])
+ domain += [('date', '>=', last_month_start),
+ ('date', '<=', last_month_end)]
+ elif date_range == 'last-year':
+ last_year_start = today.replace(month=1,
+ day=1) - relativedelta(years=1)
+ last_year_end = last_year_start.replace(month=12, day=31)
+ domain += [('date', '>=', last_year_start),
+ ('date', '<=', last_year_end)]
+ elif date_range == 'last-quarter':
+ domain += [('date', '>=', previous_quarter_start),
+ ('date', '<=', previous_quarter_end)]
+ elif 'start_date' in date_range and 'end_date' in date_range:
+ start_date = datetime.strptime(date_range['start_date'],
+ '%Y-%m-%d').date()
+ end_date = datetime.strptime(date_range['end_date'],
+ '%Y-%m-%d').date()
+ domain += [('date', '>=', start_date),
+ ('date', '<=', end_date)]
+ elif 'start_date' in date_range:
+ start_date = datetime.strptime(date_range['start_date'],
+ '%Y-%m-%d').date()
+ domain += [('date', '>=', start_date)]
+ elif 'end_date' in date_range:
+ end_date = datetime.strptime(date_range['end_date'],
+ '%Y-%m-%d').date()
+ domain += [('date', '<=', end_date)]
+ move_line_ids = self.env['account.move.line'].search(domain)
+ account_ids = move_line_ids.mapped('account_id')
+ account_dict['journal_ids'] = self.env['account.journal'].search_read(
+ [], ['name'])
+ account_dict['analytic_ids'] = self.env[
+ 'account.analytic.account'].search_read(
+ [], ['name'])
+ for account in account_ids:
+ move_line_id = move_line_ids.filtered(
+ lambda x: x.account_id == account)
+ move_line_list = []
+ for move_line in move_line_id:
+ move_line_data = move_line.read(
+ ['date', 'name', 'move_name', 'debit', 'credit',
+ 'partner_id', 'account_id', 'journal_id', 'move_id',
+ 'analytic_line_ids'])
+ move_line_list.append(move_line_data)
+ account_dict[account.display_name] = move_line_list
+ currency_id = self.env.company.currency_id.symbol
+ total_debit = round(sum(move_line_id.mapped('debit')), 2)
+ total_credit = round(sum(move_line_id.mapped('credit')), 2)
+ account_totals[account.display_name] = {
+ 'total_debit': total_debit,
+ 'total_debit_display': "{:,.2f}".format(total_debit),
+ 'total_credit': total_credit,
+ 'total_credit_display': "{:,.2f}".format(total_credit),
+ 'currency_id': currency_id,
+ 'account_id': account.id}
+ account_dict['account_totals'] = account_totals
+ return account_dict
+
+ @api.model
+ def get_xlsx_report(self, data, response, report_name, report_action):
+ """
+ Generate an XLSX report based on the provided data and write it to the
+ response stream.
+
+ :param data: The data used to generate the report.
+ :type data: str (JSON format)
+
+ :param response: The response object to write the generated report to.
+ :type response: werkzeug.wrappers.Response
+
+ :param report_name: The name of the report.
+ :type report_name: str
+ """
+ data = json.loads(data)
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ start_date = data['filters']['start_date'] if \
+ data['filters']['start_date'] else ''
+ end_date = data['filters']['end_date'] if \
+ data['filters']['end_date'] else ''
+ sheet = workbook.add_worksheet()
+ head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '15px'})
+ sub_heading = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_body = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px'})
+ side_heading_sub = workbook.add_format(
+ {'align': 'left', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub.set_indent(1)
+ txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
+ txt_name.set_indent(2)
+ sheet.set_column(0, 0, 30)
+ sheet.set_column(1, 1, 20)
+ sheet.set_column(2, 2, 15)
+ sheet.set_column(3, 3, 15)
+ col = 0
+ sheet.write('A1:b1', report_name, head)
+ sheet.write('B3:b4', 'Date Range', filter_head)
+ sheet.write('B4:b4', 'Journals', filter_head)
+ sheet.write('B5:b4', 'Analytic', filter_head)
+ sheet.write('B6:b4', 'Options', filter_head)
+ if start_date or end_date:
+ sheet.merge_range('C3:G3', f"{start_date} to {end_date}",
+ filter_body)
+ if data['filters']['journal']:
+ display_names = [journal for
+ journal in data['filters']['journal']]
+ display_names_str = ', '.join(display_names)
+ sheet.merge_range('C4:G4', display_names_str, filter_body)
+ if data['filters']['analytic']:
+ display_names = [analytic for
+ analytic in data['filters']['analytic']]
+ account_keys_str = ', '.join(display_names)
+ sheet.merge_range('C5:G5', account_keys_str, filter_body)
+ if data['filters']['options']:
+ option_keys = list(data['filters']['options'].keys())
+ option_keys_str = ', '.join(option_keys)
+ sheet.merge_range('C6:G6', option_keys_str, filter_body)
+ if data:
+ if report_action == 'dynamic_accounts_report.action_general_ledger':
+ sheet.write(8, col, ' ', sub_heading)
+ sheet.write(8, col + 1, 'Date', sub_heading)
+ sheet.merge_range('C9:E9', 'Communication', sub_heading)
+ sheet.merge_range('F9:G9', 'Partner', sub_heading)
+ sheet.merge_range('H9:I9', 'Debit', sub_heading)
+ sheet.merge_range('J9:K9', 'Credit', sub_heading)
+ sheet.merge_range('L9:M9', 'Balance', sub_heading)
+ row = 8
+ if data['account']:
+ for account in data['account']:
+ row += 1
+ sheet.write(row, col, account, txt_name)
+ sheet.write(row, col + 1, ' ', txt_name)
+ sheet.merge_range(row, col + 2, row, col + 4, ' ', txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8,
+ data['total'][account]['total_debit_display'],
+ txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10,
+ data['total'][account]['total_credit_display'],
+ txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12,
+ data['total'][account]['balance_display'],
+ txt_name)
+ for rec in data['data'][account]:
+ row += 1
+ partner = rec[0]['partner_id']
+ name = partner[1] if partner else None
+ sheet.write(row, col, rec[0]['move_name'], txt_name)
+ sheet.write(row, col + 1, rec[0]['date'], txt_name)
+ sheet.merge_range(row, col + 2, row, col + 4,
+ rec[0]['name'], txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, name,
+ txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8,
+ rec[0]['debit'],
+ txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10,
+ rec[0]['credit'], txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12, ' ',
+ txt_name)
+ row += 1
+ sheet.merge_range(row, col, row, col + 6, 'Total',
+ filter_head)
+ sheet.merge_range(row, col + 7, row, col + 8,
+ data['grand_total']['total_debit_display'],
+ filter_head)
+ sheet.merge_range(row, col + 9, row, col + 10,
+ data['grand_total']['total_credit_display'],
+ filter_head)
+ sheet.merge_range(row, col + 11, row, col + 12,
+ float(data['grand_total']['total_debit']) -
+ float(data['grand_total']['total_credit']),
+ filter_head)
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
diff --git a/third_party_addons/dynamic_accounts_report/models/account_partner_ledger.py b/third_party_addons/dynamic_accounts_report/models/account_partner_ledger.py
new file mode 100644
index 000000000..bea78f478
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/account_partner_ledger.py
@@ -0,0 +1,523 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import io
+import json
+from dateutil.relativedelta import relativedelta
+import xlsxwriter
+from odoo import api, fields, models
+from datetime import datetime
+from odoo.tools import date_utils
+
+
+class AccountPartnerLedger(models.TransientModel):
+ """For creating Partner Ledger report"""
+ _name = 'account.partner.ledger'
+ _description = 'Partner Ledger Report'
+
+ @api.model
+ def view_report(self, option, tag):
+ """
+ Retrieve partner-related data for generating a report.
+
+ :param option: The option for filtering the data.
+ :type option: str
+
+ :param tag: The tag used for filtering the data.
+ :type tag: str
+
+ :return: A dictionary containing the partner data for the report.
+ :rtype: dict
+ """
+ fiscal_year = self.env['res.company'].search([]).mapped('account_opening_date')[0].strftime('%Y-%m-%d')
+ fiscal_year_start = datetime.strptime(fiscal_year,
+ '%Y-%m-%d').date()
+ partner_dict = {}
+ partner_totals = {}
+ move_line_ids = self.env['account.move.line'].search(
+ [('account_type', 'in',
+ ['liability_payable', 'asset_receivable']),
+ ('parent_state', '=', 'posted')])
+ partner_ids = move_line_ids.mapped('partner_id')
+ for partner in partner_ids:
+ total_debit_balance = 0
+ total_credit_balance = 0
+ balance = 0
+ move_line_id = move_line_ids.filtered(
+ lambda x: x.partner_id == partner)
+ move_line_list = []
+ for move_line in move_line_id:
+ if move_line.invoice_date:
+ if move_line.invoice_date < fiscal_year_start:
+ total_debit_balance += move_line.debit
+ total_credit_balance += move_line.credit
+ balance = total_debit_balance - total_credit_balance
+ move_line_data = move_line.read(
+ ['date', 'move_name', 'account_type', 'debit', 'credit',
+ 'date_maturity', 'account_id', 'journal_id', 'move_id',
+ 'matching_number', 'amount_currency'])
+ account_code = self.env['account.account'].browse(
+ move_line.account_id.id).code
+ journal_code = self.env['account.journal'].browse(
+ move_line.journal_id.id).code
+ if account_code:
+ move_line_data[0]['jrnl'] = journal_code
+ move_line_data[0]['code'] = account_code
+ move_line_list.append(move_line_data)
+ partner_dict[partner.name] = move_line_list
+ currency_id = self.env.company.currency_id.symbol
+ partner_totals[partner.name] = {
+ 'total_debit': round(sum(move_line_id.mapped('debit')), 2),
+ 'total_credit': round(sum(move_line_id.mapped('credit')), 2),
+ 'currency_id': currency_id,
+ 'initial_balance': balance,
+ 'partner_id': partner.id,
+ 'move_name': 'Initial Balance',
+ 'initial_debit': total_debit_balance,
+ 'initial_credit': total_credit_balance,
+ }
+ partner_dict['partner_totals'] = partner_totals
+ return partner_dict
+
+ @api.model
+ def get_filter_values(self, partner_id, data_range, account, options, tag_ids=None, account_ids=None):
+ """
+ Retrieve filtered partner-related data for generating a report.
+
+ :param partner_id: The ID(s) of the partner(s) to filter by.
+ :type partner_id: list or int
+
+ :param data_range: The date range option for filtering the data.
+ :type data_range: str
+
+ :param account: The account type(s) to filter by.
+ :type account: list or str
+
+ :param options: Additional options for filtering the data.
+ :type options: dict
+
+ :return: A dictionary containing the filtered partner data.
+ :rtype: dict
+ """
+ if options == {}:
+ options = None
+ if account == {}:
+ account = None
+ account_type_domain = []
+ if options is None:
+ option_domain = ['posted']
+ elif 'draft' in options:
+ option_domain = ['posted', 'draft']
+ if account is None or (
+ 'Receivable' in account and 'Payable' in account):
+ account_type_domain.append('liability_payable')
+ account_type_domain.append('asset_receivable')
+ elif 'Receivable' in account:
+ account_type_domain.append('asset_receivable')
+ elif 'Payable' in account:
+ account_type_domain.append('liability_payable')
+ partner_dict = {}
+ partner_totals = {}
+ today = fields.Date.today()
+ quarter_start, quarter_end = date_utils.get_quarter(today)
+ previous_quarter_start = quarter_start - relativedelta(months=3)
+ previous_quarter_end = quarter_start - relativedelta(days=1)
+
+ # Handle partner tag filter
+ if tag_ids:
+ partners_with_tags = self.env['res.partner'].search([
+ ('category_id', 'in', tag_ids)
+ ])
+ if partner_id:
+ # Intersection of selected partners and partners with tags
+ partner_id = list(set(partner_id) & set(partners_with_tags.ids))
+ else:
+ partner_id = partners_with_tags.ids
+
+ if not partner_id:
+ partner_id = self.env['account.move.line'].search([(
+ 'account_type', 'in', account_type_domain),
+ ('parent_state', 'in', option_domain)]).mapped(
+ 'partner_id').ids
+ balance_move_line_ids = []
+ for partners in partner_id:
+ partner = self.env['res.partner'].browse(partners).name
+ # Base domain for move lines
+ base_domain = [
+ ('partner_id', '=', partners),
+ ('account_type', 'in', account_type_domain),
+ ('parent_state', 'in', option_domain)
+ ]
+
+ # NEW: Add account filter to base domain
+ if account_ids:
+ base_domain.append(('account_id', 'in', account_ids))
+ if data_range:
+ if data_range == 'month':
+ domain = base_domain + [
+ ('date', '>=', fields.Date.today().replace(day=1)),
+ ('date', '<=', fields.Date.today())
+ ]
+ move_line_ids = self.env['account.move.line'].search(
+ domain).filtered(
+ lambda x: x.date.month == fields.Date.today().month)
+ date_start = fields.Date.today().replace(day=1)
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
+
+ elif data_range == 'year':
+ move_line_ids = self.env['account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain)]).filtered(
+ lambda x: x.date.year == fields.Date.today().year)
+ date_start = fields.Date.today().replace(month=1, day=1)
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
+ elif data_range == 'quarter':
+ move_line_ids = self.env['account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('date', '>=', quarter_start),
+ ('date', '<=', quarter_end),
+ ('parent_state', 'in', option_domain)])
+ date_start = quarter_start
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
+ elif data_range == 'last-month':
+ move_line_ids = self.env['account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain)]).filtered(
+ lambda x: x.date.month == fields.Date.today().month - 1)
+ date_start = fields.Date.today().replace(day=1,month=fields.Date.today().month - 1)
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
+ elif data_range == 'last-year':
+ move_line_ids = self.env['account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain)]).filtered(
+ lambda x: x.date.year == fields.Date.today().year - 1)
+ date_start = fields.Date.today().replace(day=1,month=1,)
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
+ elif data_range == 'last-quarter':
+ move_line_ids = self.env['account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('date', '>=', previous_quarter_start),
+ ('date', '<=', previous_quarter_end),
+ ('parent_state', 'in', option_domain)])
+ date_start = previous_quarter_start
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
+ elif 'start_date' in data_range and 'end_date' in data_range:
+ start_date = datetime.strptime(data_range['start_date'],
+ '%Y-%m-%d').date()
+ end_date = datetime.strptime(data_range['end_date'],
+ '%Y-%m-%d').date()
+ move_line_ids = self.env['account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('date', '>=', start_date),
+ ('date', '<=', end_date),
+ ('parent_state', 'in', option_domain)])
+ date_start = start_date
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
+ elif 'start_date' in data_range:
+ start_date = datetime.strptime(data_range['start_date'],
+ '%Y-%m-%d').date()
+ move_line_ids = self.env['account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('date', '>=', start_date),
+ ('parent_state', 'in', option_domain)])
+ date_start = start_date
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
+ elif 'end_date' in data_range:
+ end_date = datetime.strptime(data_range['end_date'],
+ '%Y-%m-%d').date()
+ move_line_ids = self.env['account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('date', '<=', end_date),
+ ('parent_state', 'in', option_domain)])
+ fiscal_year = self.env['res.company'].search([]).mapped(
+ 'account_opening_date')[0].strftime('%Y-%m-%d')
+ date_start = datetime.strptime(fiscal_year,
+ '%Y-%m-%d').date()
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
+ else:
+ move_line_ids = self.env['account.move.line'].search(base_domain)
+ total_debit_balance = 0
+ total_credit_balance = 0
+ balance = 0
+ move_line_list = []
+ for move_line in move_line_ids:
+ move_line_data = move_line.read(
+ ['date', 'move_name', 'account_type', 'debit', 'credit',
+ 'date_maturity', 'account_id', 'journal_id', 'move_id',
+ 'matching_number', 'amount_currency'])
+ account_code = self.env['account.account'].browse(
+ move_line.account_id.id).code
+ journal_code = self.env['account.journal'].browse(
+ move_line.journal_id.id).code
+ if account_code:
+ move_line_data[0]['jrnl'] = journal_code
+ move_line_data[0]['code'] = account_code
+ move_line_list.append(move_line_data)
+ for remaining_move in balance_move_line_ids:
+ if remaining_move.invoice_date:
+ if remaining_move.invoice_date < date_start:
+ total_debit_balance += remaining_move.debit
+ total_credit_balance += remaining_move.credit
+ balance = total_debit_balance - total_credit_balance
+ partner_dict[partner] = move_line_list
+ currency_id = self.env.company.currency_id.symbol
+ partner_totals[partner] = {
+ 'total_debit': round(sum(move_line_ids.mapped('debit')), 2),
+ 'total_credit': round(sum(move_line_ids.mapped('credit')), 2),
+ 'currency_id': currency_id,
+ 'partner_id': partners,
+ 'initial_balance': balance,
+ 'move_name': 'Initial Balance',
+ 'initial_debit': total_debit_balance,
+ 'initial_credit': total_credit_balance,
+ }
+ partner_dict['partner_totals'] = partner_totals
+ return partner_dict
+
+ @api.model
+ def get_xlsx_report(self, data, response, report_name, report_action):
+ """
+ Generate an Excel report based on the provided data.
+
+ :param data: The data used to generate the report.
+ :type data: str (JSON format)
+
+ :param response: The response object to write the report to.
+ :type response: object
+
+ :param report_name: The name of the report.
+ :type report_name: str
+
+ :return: None
+ """
+ data = json.loads(data)
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ start_date = data['filters']['start_date'] if data['filters']['start_date'] else ''
+ end_date = data['filters']['end_date'] if data['filters']['end_date'] else ''
+ sheet = workbook.add_worksheet()
+
+ # Define formats
+ head = workbook.add_format({'font_size': 15, 'align': 'center', 'bold': True})
+ head_highlight = workbook.add_format({'font_size': 10, 'align': 'center', 'bold': True})
+ sub_heading = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px', 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px', 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_body = workbook.add_format({'align': 'center', 'bold': True, 'font_size': '10px'})
+ side_heading_sub = workbook.add_format(
+ {'align': 'left', 'bold': True, 'font_size': '10px', 'border': 1, 'border_color': 'black'})
+ side_heading_sub.set_indent(1)
+ txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
+ txt_name.set_indent(2)
+
+ # Set column widths
+ sheet.set_column(0, 0, 30)
+ sheet.set_column(1, 1, 20)
+ sheet.set_column(2, 2, 15)
+ sheet.set_column(3, 3, 15)
+
+ # Write headers and filters
+ col = 0
+ sheet.write('A1:B1', report_name, head)
+ sheet.write('B3:B4', 'Date Range', filter_head)
+ sheet.write('B4:B4', 'Partners', filter_head)
+ sheet.write('B5:B4', 'Accounts', filter_head)
+ sheet.write('B6:B4', 'Options', filter_head)
+
+ if start_date or end_date:
+ sheet.merge_range('C3:G3', f"{start_date} to {end_date}", filter_body)
+
+ if data['filters']['partner']:
+ display_names = [partner.get('display_name', 'undefined') for partner in data['filters']['partner']]
+ display_names_str = ', '.join(display_names)
+ sheet.merge_range('C4:G4', display_names_str, filter_body)
+
+ if data['filters']['account']:
+ account_keys = list(data['filters']['account'].keys())
+ account_keys_str = ', '.join(account_keys)
+ sheet.merge_range('C5:G5', account_keys_str, filter_body)
+
+ if data['filters']['options']:
+ option_keys = list(data['filters']['options'].keys())
+ option_keys_str = ', '.join(option_keys)
+ sheet.merge_range('C6:G6', option_keys_str, filter_body)
+
+ # Define a helper function to format numbers with thousand separators
+ def format_number(value):
+ if value is None:
+ return "0.00"
+ return "{:,.2f}".format(float(value))
+
+ # Process partner data
+ if data and report_action == 'dynamic_accounts_report.action_partner_ledger':
+ sheet.write(8, col, ' ', sub_heading)
+ sheet.write(8, col + 1, 'JNRL', sub_heading)
+ sheet.write(8, col + 2, 'Account', sub_heading)
+ sheet.merge_range('D9:E9', 'Ref', sub_heading)
+ sheet.merge_range('F9:G9', 'Due Date', sub_heading)
+ sheet.merge_range('H9:I9', 'Debit', sub_heading)
+ sheet.merge_range('J9:K9', 'Credit', sub_heading)
+ sheet.merge_range('L9:M9', 'Balance', sub_heading)
+
+ row = 8
+ # Ensure data['partners'] is iterable; default to empty list if None
+ partners = data.get('partners', []) or []
+ for partner in partners:
+ row += 1
+ # Format partner totals
+ total_debit = data['total'][partner]['total_debit'] if data['total'] and partner in data['total'] else 0
+ total_credit = data['total'][partner]['total_credit'] if data['total'] and partner in data[
+ 'total'] else 0
+ balance = total_debit - total_credit
+
+ sheet.write(row, col, partner, txt_name)
+ sheet.write(row, col + 1, ' ', txt_name)
+ sheet.write(row, col + 2, ' ', txt_name)
+ sheet.merge_range(row, col + 3, row, col + 4, ' ', txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, ' ', txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8, format_number(total_debit), txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10, format_number(total_credit), txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12, format_number(balance), txt_name)
+
+ # Handle initial balance
+ initial_balance = data['total'][partner]['initial_balance'] if data['total'] and partner in data[
+ 'total'] else 0
+ if initial_balance != 0:
+ row += 1
+ initial_debit = data['total'][partner]['initial_debit'] if data['total'] and partner in data[
+ 'total'] else 0
+ initial_credit = data['total'][partner]['initial_credit'] if data['total'] and partner in data[
+ 'total'] else 0
+
+ sheet.write(row, col, '', txt_name)
+ sheet.write(row, col + 1, ' ', txt_name)
+ sheet.write(row, col + 2, ' ', txt_name)
+ sheet.merge_range(row, col + 3, row, col + 4, 'Initial Balance', head_highlight)
+ sheet.merge_range(row, col + 5, row, col + 6, ' ', txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8, format_number(initial_debit), txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10, format_number(initial_credit), txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12, format_number(initial_balance), txt_name)
+
+ # Process move lines for the partner
+ for rec in data['data'][partner]:
+ row += 1
+ sheet.write(row, col, rec[0]['date'], txt_name)
+ sheet.write(row, col + 1, rec[0]['jrnl'], txt_name)
+ sheet.write(row, col + 2, rec[0]['code'], txt_name)
+ sheet.merge_range(row, col + 3, row, col + 4, rec[0]['move_name'], txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, rec[0]['date_maturity'] or '', txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8, format_number(rec[0]['debit']), txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10, format_number(rec[0]['credit']), txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12, ' ', txt_name)
+
+ # Grand totals
+ row += 1
+ # Ensure grand_total values are numbers
+ grand_total_debit = data['grand_total']['total_debit'] if data['grand_total'] and data['grand_total'][
+ 'total_debit'] is not None else 0
+ grand_total_credit = data['grand_total']['total_credit'] if data['grand_total'] and data['grand_total'][
+ 'total_credit'] is not None else 0
+ grand_balance = grand_total_debit - grand_total_credit
+
+ sheet.merge_range(row, col, row, col + 6, 'Total', filter_head)
+ sheet.merge_range(row, col + 7, row, col + 8, format_number(grand_total_debit), filter_head)
+ sheet.merge_range(row, col + 9, row, col + 10, format_number(grand_total_credit), filter_head)
+ sheet.merge_range(row, col + 11, row, col + 12, format_number(grand_balance), filter_head)
+
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
+
+
diff --git a/third_party_addons/dynamic_accounts_report/models/account_trial_balance.py b/third_party_addons/dynamic_accounts_report/models/account_trial_balance.py
new file mode 100644
index 000000000..6dacf0eb3
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/account_trial_balance.py
@@ -0,0 +1,528 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import calendar
+import io
+import json
+from datetime import datetime
+import xlsxwriter
+from odoo import api, fields, models
+from odoo.tools.date_utils import get_month, get_fiscal_year, \
+ get_quarter_number, subtract
+
+
+class AccountTrialBalance(models.TransientModel):
+ """For creating Trial Balance report"""
+ _name = 'account.trial.balance'
+ _description = 'Trial Balance Report'
+
+ @api.model
+ def view_report(self):
+ """date_view
+ Generates a trial balance report for multiple accounts.
+ Retrieves account information and calculates total debit and credit
+ amounts for each account within the specified date range. Returns a list
+ of dictionaries containing account details and transaction totals.
+
+ :return: List of dictionaries representing the trial balance report.
+ :rtype: list
+ """
+ account_ids = self.env['account.move.line'].search([]).mapped(
+ 'account_id')
+ today = fields.Date.today()
+ move_line_list = []
+ for account_id in account_ids:
+ initial_move_line_ids = self.env['account.move.line'].search(
+ [('date', '<', get_month(today)[0]),
+ ('account_id', '=', account_id.id),
+ ('parent_state', '=', 'posted')])
+
+ # Calculate raw totals
+ initial_total_debit_raw = round(
+ sum(initial_move_line_ids.mapped('debit')), 2)
+ initial_total_credit_raw = round(
+ sum(initial_move_line_ids.mapped('credit')), 2)
+
+ # Calculate NET initial balance
+ initial_diff = initial_total_debit_raw - initial_total_credit_raw
+ if initial_diff > 0:
+ initial_total_debit = initial_diff
+ initial_total_credit = 0.0
+ else:
+ initial_total_debit = 0.0
+ initial_total_credit = abs(initial_diff)
+
+ move_line_ids = self.env['account.move.line'].search(
+ [('date', '>=', get_month(today)[0]),
+ ('account_id', '=', account_id.id),
+ ('date', '<=', get_month(today)[1]),
+ ('parent_state', '=', 'posted')])
+ total_debit = round(sum(move_line_ids.mapped('debit')), 2)
+ total_credit = round(sum(move_line_ids.mapped('credit')), 2)
+ sum_debit = initial_total_debit + total_debit
+ sum_credit = initial_total_credit + total_credit
+ diff_credit_debit = sum_debit - sum_credit
+ if diff_credit_debit > 0:
+ end_total_debit = diff_credit_debit
+ end_total_credit = 0.0
+ else:
+ end_total_debit = 0.0
+ end_total_credit = abs(diff_credit_debit)
+ data = {
+ 'account': account_id.display_name,
+ 'account_id': account_id.id,
+ 'journal_ids': self.env['account.journal'].search_read([], ['name']),
+ 'initial_total_debit': "{:,.2f}".format(initial_total_debit),
+ 'initial_total_credit': "{:,.2f}".format(initial_total_credit),
+ 'total_debit': total_debit,
+ 'total_credit': total_credit,
+ 'end_total_debit': "{:,.2f}".format(end_total_debit),
+ 'end_total_credit': "{:,.2f}".format(end_total_credit)
+ }
+ move_line_list.append(data)
+ journal = {
+ 'journal_ids': self.env['account.journal'].search_read([], [
+ 'name'])
+ }
+ totals = self._calculate_totals(move_line_list, None)
+ return move_line_list, journal, totals
+
+ @api.model
+ def get_filter_values(self, start_date, end_date, comparison_number,
+ comparison_type, journal_list, analytic, options,
+ method):
+ """
+ Retrieves and calculates filtered values for generating a financial
+ report.
+ Retrieves and processes account movement data based on the provided
+ filters. Calculates initial, dynamic, and end total debit and credit
+ amounts for each account,considering date range, comparison type, and
+ other filter criteria.
+
+ :param str start_date: Start date of the reporting period.
+ :param str end_date: End date of the reporting period.
+ :param int comparison_number: Number of periods for comparison.
+ :param str comparison_type: Type of comparison (month, year, quarter).
+ :param list[int] journal_list: List of selected journal IDs.
+ :param list[int] analytic: List of selected analytic line IDs.
+ :param dict options: Additional filtering options (e.g., 'draft').
+ :param dict method: Find the method.
+ :return: List of dictionaries representing the financial report.
+ :rtype: list
+ """
+
+ if options == {}:
+ options = None
+ if options is None:
+ option_domain = ['posted']
+ elif 'draft' in options:
+ option_domain = ['posted', 'draft']
+ if method == {}:
+ method = None
+ dynamic_total_debit = {}
+ dynamic_date_num = {}
+ dynamic_total_credit = {}
+ account_ids = self.env['account.move.line'].search([]).mapped(
+ 'account_id')
+ move_line_list = []
+ start_date_first = \
+ get_fiscal_year(datetime.strptime(start_date, "%Y-%m-%d").date())[
+ 0] if comparison_type == 'year' else datetime.strptime(
+ start_date, "%Y-%m-%d").date()
+ end_date_first = \
+ get_fiscal_year(datetime.strptime(end_date, "%Y-%m-%d").date())[
+ 1] if comparison_type == 'year' else datetime.strptime(end_date,
+ "%Y-%m-%d").date()
+ for account_id in account_ids:
+ start_date = start_date_first
+ end_date = end_date_first
+ if comparison_number:
+ if comparison_type == 'month':
+ initial_start_date = subtract(start_date, months=eval(
+ comparison_number))
+ elif comparison_type == 'year':
+ initial_start_date = subtract(start_date, years=eval(
+ comparison_number))
+ else:
+ initial_start_date = subtract(start_date, months=eval(
+ comparison_number) * 3)
+ else:
+ initial_start_date = start_date
+
+ domain = [('date', '<', initial_start_date),
+ ('account_id', '=', account_id.id),
+ ('parent_state', 'in', option_domain), ]
+ if journal_list:
+ domain.append(
+ ('journal_id', 'in', journal_list), )
+ if analytic:
+ domain.append(
+ ('analytic_line_ids', 'in', analytic))
+ if method is not None and 'cash' in method:
+ domain.append(('journal_id', 'in',
+ self.env.company.tax_cash_basis_journal_id.ids))
+
+ initial_move_line_ids = self.env['account.move.line'].search(domain)
+
+ # Calculate raw totals
+ initial_total_debit_raw = round(
+ sum(initial_move_line_ids.mapped('debit')), 2)
+ initial_total_credit_raw = round(
+ sum(initial_move_line_ids.mapped('credit')), 2)
+
+ # Calculate NET initial balance
+ initial_diff = initial_total_debit_raw - initial_total_credit_raw
+ if initial_diff > 0:
+ initial_total_debit = initial_diff
+ initial_total_credit = 0.0
+ else:
+ initial_total_debit = 0.0
+ initial_total_credit = abs(initial_diff)
+ if comparison_number:
+ if comparison_type == 'year':
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date, years=i)
+ com_end_date = subtract(end_date, years=i)
+ domain = [('date', '>=', com_start_date),
+ ('account_id', '=', account_id.id),
+ ('date', '<=', com_end_date),
+ ('parent_state', 'in', option_domain), ]
+ if journal_list:
+ domain.append(
+ ('journal_id', 'in', journal_list), )
+ if analytic:
+ domain.append(
+ ('analytic_line_ids', 'in', analytic))
+ if method is not None and 'cash' in method:
+ domain.append(('journal_id', 'in',
+ self.env.company.tax_cash_basis_journal_id.ids))
+ move_lines = self.env['account.move.line'].search(
+ domain)
+ dynamic_total_debit[
+ f"dynamic_total_debit_{i}"] = round(
+ sum(move_lines.mapped('debit')), 2)
+ dynamic_total_credit[
+ f"dynamic_total_credit_{i}"] = round(
+ sum(move_lines.mapped('credit')), 2)
+ if comparison_type == 'month':
+ dynamic_date_num[
+ f"dynamic_date_num{0}"] = self.get_month_name(
+ start_date) + ' ' + str(
+ start_date.year)
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date, months=i)
+ com_end_date = subtract(end_date, months=i)
+ domain = [('date', '>=', com_start_date),
+ ('account_id', '=', account_id.id),
+ ('date', '<=', com_end_date),
+ ('parent_state', 'in', option_domain)]
+ if journal_list:
+ domain.append(
+ ('journal_id', 'in', journal_list), )
+ if analytic:
+ domain.append(
+ ('analytic_line_ids', 'in', analytic))
+ if method is not None and 'cash' in method:
+ domain.append(('journal_id', 'in',
+ self.env.company.tax_cash_basis_journal_id.ids), )
+ move_lines = self.env['account.move.line'].search(
+ domain)
+ dynamic_date_num[
+ f"dynamic_date_num{i}"] = self.get_month_name(
+ com_start_date) + ' ' + str(
+ com_start_date.year)
+ dynamic_total_debit[
+ f"dynamic_total_debit_{i}"] = round(
+ sum(move_lines.mapped('debit')), 2)
+ dynamic_total_credit[
+ f"dynamic_total_credit_{i}"] = round(
+ sum(move_lines.mapped('credit')), 2)
+ if comparison_type == 'quarter':
+ dynamic_date_num[
+ f"dynamic_date_num{0}"] = 'Q' + ' ' + str(
+ get_quarter_number(start_date)) + ' ' + str(
+ start_date.year)
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date, months=i * 3)
+ com_end_date = subtract(end_date, months=i * 3)
+ domain = [('date', '>=', com_start_date),
+ ('account_id', '=', account_id.id),
+ ('date', '<=', com_end_date),
+ ('parent_state', 'in', option_domain), ]
+ if journal_list:
+ domain.append(
+ ('journal_id', 'in', journal_list))
+ if analytic:
+ domain.append(
+ ('analytic_line_ids', 'in', analytic))
+ if method is not None and 'cash' in method:
+ domain.append(('journal_id', 'in',
+ self.env.company.tax_cash_basis_journal_id.ids))
+ move_lines = self.env['account.move.line'].search(domain)
+ dynamic_date_num[
+ f"dynamic_date_num{i}"] = 'Q' + ' ' + str(
+ get_quarter_number(com_start_date)) + ' ' + str(
+ com_start_date.year)
+ dynamic_total_debit[
+ f"dynamic_total_debit_{i}"] = round(
+ sum(move_lines.mapped('debit')), 2)
+ dynamic_total_credit[
+ f"dynamic_total_credit_{i}"] = round(
+ sum(move_lines.mapped('credit')), 2)
+ domain = [('date', '>=', start_date),
+ ('account_id', '=', account_id.id),
+ ('date', '<=', end_date),
+ ('parent_state', 'in', option_domain)]
+ if journal_list:
+ domain.append(
+ ('journal_id', 'in', journal_list), )
+ if analytic:
+ domain.append(
+ ('analytic_line_ids', 'in', analytic))
+ if method is not None and 'cash' in method:
+ domain.append(('journal_id', 'in',
+ self.env.company.tax_cash_basis_journal_id.ids))
+ move_line_ids = self.env['account.move.line'].search(domain)
+ total_debit = round(sum(move_line_ids.mapped('debit')), 2)
+ total_credit = round(sum(move_line_ids.mapped('credit')), 2)
+ sum_debit = initial_total_debit + sum(
+ dynamic_total_debit.values()) + total_debit
+ sum_credit = initial_total_credit + sum(
+ dynamic_total_credit.values()) + total_credit
+ diff_credit_debit = sum_debit - sum_credit
+ if diff_credit_debit > 0:
+ end_total_debit = diff_credit_debit
+ end_total_credit = 0.0
+ else:
+ end_total_debit = 0.0
+ end_total_credit = abs(diff_credit_debit)
+ data = {
+ 'account': account_id.display_name,
+ 'account_id': account_id.id,
+ 'journal_ids': self.env['account.journal'].search_read([], [
+ 'name']),
+ 'initial_total_debit': initial_total_debit,
+ 'initial_total_credit': initial_total_credit,
+ 'total_debit': total_debit,
+ 'total_credit': total_credit,
+ 'end_total_debit': end_total_debit,
+ 'end_total_credit': end_total_credit
+ }
+ if comparison_number:
+ if dynamic_date_num:
+ data['dynamic_date_num'] = dynamic_date_num
+ for i in range(1, eval(comparison_number) + 1):
+ data[f'dynamic_total_debit_{i}'] = dynamic_total_debit.get(
+ f"dynamic_total_debit_{eval(comparison_number) + 1 - i}",
+ 0.0)
+ data[
+ f'dynamic_total_credit_{i}'] = dynamic_total_credit.get(
+ f"dynamic_total_credit_{eval(comparison_number) + 1 - i}",
+ 0.0)
+ move_line_list.append(data)
+ totals = self._calculate_totals(move_line_list, comparison_number)
+ return move_line_list, totals
+
+ def _calculate_totals(self, move_line_list, comparison_number):
+ """
+ Calculate totals for all monetary fields in the trial balance.
+ :param move_line_list: List of account data dictionaries
+ :param comparison_number: Number of comparison periods
+ :return: Dictionary containing all totals
+ """
+ totals = {
+ 'initial_total_debit': 0.0,
+ 'initial_total_credit': 0.0,
+ 'total_debit': 0.0,
+ 'total_credit': 0.0,
+ 'end_total_debit': 0.0,
+ 'end_total_credit': 0.0
+ }
+
+ # Add dynamic period totals if comparison is enabled
+ if comparison_number:
+ for i in range(1, eval(comparison_number) + 1):
+ totals[f'dynamic_total_debit_{i}'] = 0.0
+ totals[f'dynamic_total_credit_{i}'] = 0.0
+
+ def to_float(value):
+ if isinstance(value, str):
+ try:
+ return float(value.replace(',', ''))
+ except ValueError:
+ return 0.0
+ return float(value) if value is not None else 0.0
+
+ # Sum all values
+ for account_data in move_line_list:
+ totals['initial_total_debit'] += to_float(account_data.get('initial_total_debit', 0))
+ totals['initial_total_credit'] += to_float(account_data.get('initial_total_credit', 0))
+ totals['total_debit'] += to_float(account_data.get('total_debit', 0))
+ totals['total_credit'] += to_float(account_data.get('total_credit', 0))
+ totals['end_total_debit'] += to_float(account_data.get('end_total_debit', 0))
+ totals['end_total_credit'] += to_float(account_data.get('end_total_credit', 0))
+
+ if comparison_number:
+ for i in range(1, eval(comparison_number) + 1):
+ totals[f'dynamic_total_debit_{i}'] += to_float(account_data.get(f'dynamic_total_debit_{i}', 0))
+ totals[f'dynamic_total_credit_{i}'] += to_float(account_data.get(f'dynamic_total_credit_{i}', 0))
+
+ # Format totals as strings with commas and 2 decimal places
+ for key in totals:
+ totals[key] = "{:,.2f}".format(totals[key])
+
+ return totals
+
+ @api.model
+ def get_month_name(self, date):
+ """
+ Retrieve the abbreviated name of the month for a given date.
+ :param date: The date for which to retrieve the month's abbreviated name.
+ :type date: datetime.date
+ :return: Abbreviated name of the month (e.g., 'Jan', 'Feb', ..., 'Dec').
+ :rtype: str
+ """
+ month_names = calendar.month_abbr
+ return month_names[date.month]
+
+ @api.model
+ def get_xlsx_report(self, data, response, report_name, report_action):
+ """
+ Generate an XLSX report based on provided data and response stream.
+ Generates an Excel workbook with specified report format, including
+ subheadings,column headers, and row data for the given financial report
+ data.
+ :param str data: JSON-encoded data for the report.
+ :param response: Response object to stream the generated report.
+ :param str report_name: Name of the financial report.
+ """
+ data = json.loads(data)
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ start_date = data['filters']['start_date'] if \
+ data['filters']['start_date'] else ''
+ end_date = data['filters']['end_date'] if \
+ data['filters']['end_date'] else ''
+ head = workbook.add_format(
+ {'font_size': 15, 'align': 'center', 'bold': True})
+ sheet = workbook.add_worksheet()
+ sub_heading = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_body = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px'})
+ side_heading_sub = workbook.add_format(
+ {'align': 'left', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub.set_indent(1)
+ txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
+ txt_name.set_indent(2)
+ sheet.set_column(0, 0, 30)
+ sheet.set_column(1, 1, 20)
+ sheet.set_column(2, 2, 15)
+ sheet.set_column(3, 3, 15)
+ col = 0
+ sheet.write('A1:b1', report_name, head)
+ sheet.write('B3:b4', 'Date Range', filter_head)
+ sheet.write('B4:b4', 'Comparison', filter_head)
+ sheet.write('B5:b4', 'Journal', filter_head)
+ sheet.write('B6:b4', 'Account', filter_head)
+ sheet.write('B7:b4', 'Option', filter_head)
+ if start_date or end_date:
+ sheet.merge_range('C3:G3', f"{start_date} to {end_date}",
+ filter_body)
+ if data['filters']['comparison_number_range']:
+ sheet.merge_range('C4:G4',
+ f"{data['filters']['comparison_type']} : {data['filters']['comparison_number_range']}",
+ filter_body)
+ if data['filters']['journal']:
+ display_names = [journal for
+ journal in data['filters']['journal']]
+ display_names_str = ', '.join(display_names)
+ sheet.merge_range('C5:G5', display_names_str, filter_body)
+ if data['filters']['account']:
+ account_keys = [account.get('display_name', 'undefined') for
+ account in data['filters']['account']]
+ account_keys_str = ', '.join(account_keys)
+ sheet.merge_range('C6:G6', account_keys_str, filter_body)
+ if data['filters']['options']:
+ option_keys = list(data['filters']['options'].keys())
+ option_keys_str = ', '.join(option_keys)
+ sheet.merge_range('C7:G7', option_keys_str, filter_body)
+ sheet.write(9, col, '', sub_heading)
+ sheet.merge_range(9, col + 1, 9, col + 2, 'Initial Balance',
+ sub_heading)
+ i = 3
+ for date_view in data['date_viewed']:
+ sheet.merge_range(9, col + i, 9, col + i + 1, date_view,
+ sub_heading)
+ i += 2
+ sheet.merge_range(9, col + i, 9, col + i + 1, 'End Balance',
+ sub_heading)
+ sheet.write(10, col, '', sub_heading)
+ sheet.write(10, col + 1, 'Debit', sub_heading)
+ sheet.write(10, col + 2, 'Credit', sub_heading)
+ i = 3
+ for date_views in data['date_viewed']:
+ sheet.write(10, col + i, 'Debit', sub_heading)
+ i += 1
+ sheet.write(10, col + i, 'Credit', sub_heading)
+ i += 1
+ sheet.write(10, col + i, 'Debit', sub_heading)
+ sheet.write(10, col + (i + 1), 'Credit', sub_heading)
+ if data:
+ if report_action == 'dynamic_accounts_report.action_trial_balance':
+ row = 11
+ for move_line in data['data']:
+ sheet.write(row, col, move_line['account'],
+ side_heading_sub)
+ sheet.write(row, col + 1, move_line['initial_total_debit'],
+ txt_name)
+ sheet.write(row, col + 2,
+ move_line['initial_total_credit'], txt_name)
+ j = 3
+ if data['apply_comparison']:
+ number_of_periods = data['comparison_number_range']
+ for num in number_of_periods:
+ sheet.write(row, col + j, move_line[
+ 'dynamic_total_debit_' + str(num)], txt_name)
+ sheet.write(row, col + j + 1, move_line[
+ 'dynamic_total_credit_' + str(num)], txt_name)
+ j += 2
+ sheet.write(row, col + j, move_line['total_debit'],
+ txt_name)
+ sheet.write(row, col + j + 1, move_line['total_credit'],
+ txt_name)
+ sheet.write(row, col + j + 2, move_line['end_total_debit'],
+ txt_name)
+ sheet.write(row, col + j + 3,
+ move_line['end_total_credit'], txt_name)
+ row += 1
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
diff --git a/third_party_addons/dynamic_accounts_report/models/aged_payable_report.py b/third_party_addons/dynamic_accounts_report/models/aged_payable_report.py
new file mode 100644
index 000000000..7aa401cf5
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/aged_payable_report.py
@@ -0,0 +1,304 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import io
+import json
+import xlsxwriter
+from odoo import api, fields, models
+
+
+class AgePayableReport(models.TransientModel):
+ """For creating Age Payable report"""
+ _name = 'age.payable.report'
+ _description = 'Aged Payable Report'
+
+ @api.model
+ def view_report(self):
+ """
+ Generate a report with move line data categorized by partner and credit
+ difference.
+ Returns:
+ dict: Dictionary containing move line data categorized by partner
+ names. Each partner's data includes credit amounts and credit
+ differences based on days between maturity date and today. The
+ 'partner_totals' key contains summary data for each partner.
+ """
+ partner_total = {}
+ move_line_list = {}
+ paid = self.env['account.move.line'].search(
+ [('parent_state', '=', 'posted'),
+ ('account_type', '=', 'liability_payable'),
+ ('reconciled', '=', False)])
+ currency_id = self.env.company.currency_id.symbol
+ partner_ids = paid.mapped('partner_id')
+ today = fields.Date.today()
+ for partner_id in partner_ids:
+ move_line_ids = paid.filtered(
+ lambda rec: rec.partner_id in partner_id)
+ move_line_data = move_line_ids.read(
+ ['name', 'move_name', 'date', 'amount_currency', 'account_id',
+ 'date_maturity', 'currency_id', 'credit', 'move_id'])
+ for val in move_line_data:
+ diffrence = (today - val['date_maturity']).days
+ val['diff0'] = val['credit'] if diffrence <= 0 else 0.0
+ val['diff1'] = val['credit'] if 0 < diffrence <= 30 else 0.0
+ val['diff2'] = val['credit'] if 30 < diffrence <= 60 else 0.0
+ val['diff3'] = val['credit'] if 60 < diffrence <= 90 else 0.0
+ val['diff4'] = val['credit'] if 90 < diffrence <= 120 else 0.0
+ val['diff5'] = val['credit'] if diffrence > 120 else 0.0
+ move_line_list[partner_id.name] = move_line_data
+ partner_total[partner_id.name] = {
+ 'credit_sum': sum(val['credit'] for val in move_line_data),
+ 'diff0_sum': round(sum(val['diff0'] for val in move_line_data),
+ 2),
+ 'diff1_sum': round(sum(val['diff1'] for val in move_line_data),
+ 2),
+ 'diff2_sum': round(sum(val['diff2'] for val in move_line_data),
+ 2),
+ 'diff3_sum': round(sum(val['diff3'] for val in move_line_data),
+ 2),
+ 'diff4_sum': round(sum(val['diff4'] for val in move_line_data),
+ 2),
+ 'diff5_sum': round(sum(val['diff5'] for val in move_line_data),
+ 2),
+ 'currency_id': currency_id,
+ 'partner_id': partner_id.id
+ }
+ move_line_list['partner_totals'] = partner_total
+ return move_line_list
+
+ @api.model
+ def get_filter_values(self, date, partner):
+ """
+ Retrieve filtered move line data based on date and partner(s).
+ Parameters:
+ date (str): Date for filtering move lines (format: 'YYYY-MM-DD').
+ partner (list): List of partner IDs to filter move lines for.
+ Returns:
+ dict: Dictionary with filtered move line data organized by partner
+ names. Includes credit amount categorization based on days
+ difference. Contains partner-wise summary under
+ 'partner_totals' key.
+ """
+ partner_total = {}
+ move_line_list = {}
+ if date:
+ paid = self.env['account.move.line'].search(
+ [('parent_state', '=', 'posted'),
+ ('account_type', '=', 'liability_payable'),
+ ('reconciled', '=', False), ('date', '<=', date)])
+ else:
+ paid = self.env['account.move.line'].search(
+ [('parent_state', '=', 'posted'),
+ ('account_type', '=', 'liability_payable'),
+ ('reconciled', '=', False)])
+ currency_id = self.env.company.currency_id.symbol
+ if partner:
+ partner_ids = self.env['res.partner'].search(
+ [('id', 'in', partner)])
+ else:
+ partner_ids = paid.mapped('partner_id')
+ today = fields.Date.today()
+ for partner_id in partner_ids:
+ move_line_ids = paid.filtered(
+ lambda rec: rec.partner_id in partner_id)
+ move_line_data = move_line_ids.read(
+ ['name', 'move_name', 'date', 'amount_currency', 'account_id',
+ 'date_maturity', 'currency_id', 'credit', 'move_id'])
+ for val in move_line_data:
+ diffrence = (today - val['date_maturity']).days
+ val['diff0'] = val['credit'] if diffrence <= 0 else 0.0
+ val['diff1'] = val['credit'] if 0 < diffrence <= 30 else 0.0
+ val['diff2'] = val['credit'] if 30 < diffrence <= 60 else 0.0
+ val['diff3'] = val['credit'] if 60 < diffrence <= 90 else 0.0
+ val['diff4'] = val['credit'] if 90 < diffrence <= 120 else 0.0
+ val['diff5'] = val['credit'] if diffrence > 120 else 0.0
+ move_line_list[partner_id.name] = move_line_data
+ partner_total[partner_id.name] = {
+ 'credit_sum': sum(val['credit'] for val in move_line_data),
+ 'diff0_sum': round(sum(val['diff0'] for val in move_line_data),
+ 2),
+ 'diff1_sum': round(sum(val['diff1'] for val in move_line_data),
+ 2),
+ 'diff2_sum': round(sum(val['diff2'] for val in move_line_data),
+ 2),
+ 'diff3_sum': round(sum(val['diff3'] for val in move_line_data),
+ 2),
+ 'diff4_sum': round(sum(val['diff4'] for val in move_line_data),
+ 2),
+ 'diff5_sum': round(sum(val['diff5'] for val in move_line_data),
+ 2),
+ 'currency_id': currency_id,
+ 'partner_id': partner_id.id
+ }
+ move_line_list['partner_totals'] = partner_total
+ return move_line_list
+
+ @api.model
+ def get_xlsx_report(self, data, response, report_name, report_action):
+ """
+ Generate an Excel report based on the provided data.
+ :param data: The data used to generate the report.
+ :type data: str (JSON format)
+ :param response: The response object to write the report to.
+ :type response: object
+ :param report_name: The name of the report.
+ :type report_name: str
+ :return: None
+ """
+ data = json.loads(data)
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ end_date = data['filters']['end_date'] if \
+ data['filters']['end_date'] else ''
+ sheet = workbook.add_worksheet()
+ head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '15px'})
+ sub_heading = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_body = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px'})
+ side_heading_sub = workbook.add_format(
+ {'align': 'left', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub.set_indent(1)
+ txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
+ txt_name.set_indent(2)
+ sheet.set_column(0, 0, 30)
+ sheet.set_column(1, 1, 20)
+ sheet.set_column(2, 2, 15)
+ sheet.set_column(3, 3, 15)
+ col = 0
+ sheet.write('A1:b1', report_name, head)
+ sheet.write('B3:b4', 'Date Range', filter_head)
+ sheet.write('B4:b4', 'Partners', filter_head)
+ if end_date:
+ sheet.merge_range('C3:G3', f"{end_date}", filter_body)
+ if data['filters']['partner']:
+ display_names = [partner.get('display_name', 'undefined') for
+ partner in data['filters']['partner']]
+ display_names_str = ', '.join(display_names)
+ sheet.merge_range('C4:G4', display_names_str, filter_body)
+ if data:
+ if report_action == 'dynamic_accounts_report.action_aged_payable':
+ sheet.write(6, col, ' ', sub_heading)
+ sheet.write(6, col + 1, 'Invoice Date', sub_heading)
+ sheet.write(6, col + 2, 'Amount Currency', sub_heading)
+ sheet.write(6, col + 3, 'Currency', sub_heading)
+ sheet.merge_range(6, col + 4, 6, col + 5, 'Account',
+ sub_heading)
+ sheet.merge_range(6, col + 6, 6, col + 7, 'Expected Date',
+ sub_heading)
+ sheet.write(6, col + 8, 'At Date', sub_heading)
+ sheet.write(6, col + 9, '1-30', sub_heading)
+ sheet.write(6, col + 10, '31-60', sub_heading)
+ sheet.write(6, col + 11, '61-90', sub_heading)
+ sheet.write(6, col + 12, '91-120', sub_heading)
+ sheet.write(6, col + 13, 'Older', sub_heading)
+ sheet.write(6, col + 14, 'Total', sub_heading)
+ row = 6
+ for move_line in data['move_lines']:
+ row += 1
+ sheet.write(row, col, move_line, txt_name)
+ sheet.write(row, col + 1, ' ', txt_name)
+ sheet.write(row, col + 2, ' ', txt_name)
+ sheet.write(row, col + 3, ' ', txt_name)
+ sheet.merge_range(row, col + 4, row, col + 5, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 6, row, col + 7, ' ',
+ txt_name)
+ sheet.write(row, col + 8,
+ data['total'][move_line]['diff0_sum'],
+ txt_name)
+ sheet.write(row, col + 9,
+ data['total'][move_line]['diff1_sum'],
+ txt_name)
+ sheet.write(row, col + 10,
+ data['total'][move_line]['diff2_sum'],
+ txt_name)
+ sheet.write(row, col + 11,
+ data['total'][move_line]['diff3_sum'],
+ txt_name)
+ sheet.write(row, col + 12,
+ data['total'][move_line]['diff4_sum'],
+ txt_name)
+ sheet.write(row, col + 13,
+ data['total'][move_line]['diff5_sum'],
+ txt_name)
+ sheet.write(row, col + 14,
+ data['total'][move_line]['credit_sum'],
+ txt_name)
+ for rec in data['data'][move_line]:
+ row += 1
+ sheet.write(row, col, rec['move_name'] + (rec['name'] or ""), txt_name)
+ sheet.write(row, col + 1, rec['date'],
+ txt_name)
+ sheet.write(row, col + 2, rec['amount_currency'],
+ txt_name)
+ sheet.write(row, col + 3, rec['currency_id'][1],
+ txt_name)
+ sheet.merge_range(row, col + 4, row, col + 5,
+ rec['account_id'][1],
+ txt_name)
+ sheet.merge_range(row, col + 6, row, col + 7,
+ rec['date_maturity'],
+ txt_name)
+ sheet.write(row, col + 8, rec['diff0'], txt_name)
+ sheet.write(row, col + 9, rec['diff1'], txt_name)
+ sheet.write(row, col + 10, rec['diff2'], txt_name)
+ sheet.write(row, col + 11, rec['diff3'], txt_name)
+ sheet.write(row, col + 12, rec['diff4'], txt_name)
+ sheet.write(row, col + 13, rec['diff5'], txt_name)
+ sheet.write(row, col + 14, ' ', txt_name)
+ sheet.merge_range(row + 1, col, row + 1, col + 7, 'Total',
+ filter_head)
+ sheet.write(row + 1, col + 8,
+ data['grand_total']['diff0_sum'],
+ filter_head)
+ sheet.write(row + 1, col + 9,
+ data['grand_total']['diff1_sum'],
+ filter_head)
+ sheet.write(row + 1, col + 10,
+ data['grand_total']['diff2_sum'],
+ filter_head)
+ sheet.write(row + 1, col + 11,
+ data['grand_total']['diff3_sum'],
+ filter_head)
+ sheet.write(row + 1, col + 12,
+ data['grand_total']['diff4_sum'],
+ filter_head)
+ sheet.write(row + 1, col + 13,
+ data['grand_total']['diff5_sum'],
+ filter_head)
+ sheet.write(row + 1, col + 14,
+ data['grand_total']['total_credit'],
+ filter_head)
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
diff --git a/third_party_addons/dynamic_accounts_report/models/aged_receivable_report.py b/third_party_addons/dynamic_accounts_report/models/aged_receivable_report.py
new file mode 100644
index 000000000..ef67cb3b1
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/aged_receivable_report.py
@@ -0,0 +1,365 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import io
+import json
+
+import xlsxwriter
+from odoo import models, fields, api
+
+
+class AgeReceivableReport(models.TransientModel):
+ """For creating Age Receivable report"""
+ _name = 'age.receivable.report'
+ _description = 'Aged Receivable Report'
+
+ @api.model
+ def view_report(self):
+ """
+ Generate a report with move line data categorized by partner and debit
+ difference. This method retrieves move line data from the
+ 'account.move.line' model, filters the records based on specific
+ criteria (parent_state, account_type, reconciled), and categorizes the
+ data by each partner's name. For each move line, it calculates the debit
+ difference based on the number of days between today's date and the
+ maturity date of the move line.
+ Returns:
+ dict: Dictionary containing move line data categorized by partner names.
+ Each partner's data includes debit amounts and debit differences
+ based on days between maturity date and today.
+ The 'partner_totals' key contains summary data for each partner.
+ """
+ partner_total = {}
+ move_line_list = {}
+ paid = self.env['account.move.line'].search(
+ [('parent_state', '=', 'posted'),
+ ('account_type', '=', 'asset_receivable'),
+ ('reconciled', '=', False)])
+ currency_id = self.env.company.currency_id.symbol
+ partner_ids = paid.mapped('partner_id')
+ today = fields.Date.today()
+
+ # Define a helper function to format numbers with thousand separators
+ def format_number(value):
+ return "{:,.2f}".format(value) # Adds thousand separator and 2 decimal places
+
+ for partner_id in partner_ids:
+ move_line_ids = paid.filtered(
+ lambda rec: rec.partner_id in partner_id)
+ move_line_data = move_line_ids.read(
+ ['name', 'move_name', 'date', 'amount_currency', 'account_id',
+ 'date_maturity', 'currency_id', 'debit', 'move_id'])
+ for val in move_line_data:
+ difference = 0 # Initialize difference to avoid undefined variable
+ if val['date_maturity']:
+ difference = (today - val['date_maturity']).days
+ # Keep raw numeric values for calculations
+ val['raw_amount_currency'] = val['amount_currency']
+ val['raw_debit'] = val['debit']
+ val['diff0'] = val['debit'] if difference <= 0 else 0.0
+ val['diff1'] = val['debit'] if 0 < difference <= 30 else 0.0
+ val['diff2'] = val['debit'] if 30 < difference <= 60 else 0.0
+ val['diff3'] = val['debit'] if 60 < difference <= 90 else 0.0
+ val['diff4'] = val['debit'] if 90 < difference <= 120 else 0.0
+ val['diff5'] = val['debit'] if difference > 120 else 0.0
+ # Keep raw values for diff fields
+ val['raw_diff0'] = val['diff0']
+ val['raw_diff1'] = val['diff1']
+ val['raw_diff2'] = val['diff2']
+ val['raw_diff3'] = val['diff3']
+ val['raw_diff4'] = val['diff4']
+ val['raw_diff5'] = val['diff5']
+ # Format the numeric fields for display
+ val['amount_currency'] = format_number(val['amount_currency'])
+ val['debit'] = format_number(val['debit'])
+ val['diff0'] = format_number(val['diff0'])
+ val['diff1'] = format_number(val['diff1'])
+ val['diff2'] = format_number(val['diff2'])
+ val['diff3'] = format_number(val['diff3'])
+ val['diff4'] = format_number(val['diff4'])
+ val['diff5'] = format_number(val['diff5'])
+ move_line_list[partner_id.name] = move_line_data
+ partner_total[partner_id.name] = {
+ 'debit_sum': sum(val['raw_debit'] for val in move_line_data),
+ 'diff0_sum': round(sum(val['raw_diff0'] for val in move_line_data), 2),
+ 'diff1_sum': round(sum(val['raw_diff1'] for val in move_line_data), 2),
+ 'diff2_sum': round(sum(val['raw_diff2'] for val in move_line_data), 2),
+ 'diff3_sum': round(sum(val['raw_diff3'] for val in move_line_data), 2),
+ 'diff4_sum': round(sum(val['raw_diff4'] for val in move_line_data), 2),
+ 'diff5_sum': round(sum(val['raw_diff5'] for val in move_line_data), 2),
+ # Format the summary fields for display
+ 'debit_sum_display': format_number(sum(val['raw_debit'] for val in move_line_data)),
+ 'diff0_sum_display': format_number(round(sum(val['raw_diff0'] for val in move_line_data), 2)),
+ 'diff1_sum_display': format_number(round(sum(val['raw_diff1'] for val in move_line_data), 2)),
+ 'diff2_sum_display': format_number(round(sum(val['raw_diff2'] for val in move_line_data), 2)),
+ 'diff3_sum_display': format_number(round(sum(val['raw_diff3'] for val in move_line_data), 2)),
+ 'diff4_sum_display': format_number(round(sum(val['raw_diff4'] for val in move_line_data), 2)),
+ 'diff5_sum_display': format_number(round(sum(val['raw_diff5'] for val in move_line_data), 2)),
+ 'currency_id': currency_id,
+ 'partner_id': partner_id.id
+ }
+ move_line_list['partner_totals'] = partner_total
+ return move_line_list
+
+ @api.model
+ def get_filter_values(self, date, partner):
+ """
+ Retrieve move line data categorized by partner and debit difference.
+
+ Parameters:
+ date (str): Date for filtering move lines (format: 'YYYY-MM-DD').
+ partner (list): List of partner IDs to filter move lines for.
+
+ Returns:
+ dict: Dictionary containing move line data categorized by partner
+ names.Includes debit amount categorization based on days
+ difference.Contains partner-wise summary under
+ 'partner_totals' key.
+ """
+ partner_total = {}
+ move_line_list = {}
+ if date:
+ paid = self.env['account.move.line'].search(
+ [('parent_state', '=', 'posted'),
+ ('account_type', '=', 'asset_receivable'),
+ ('reconciled', '=', False), ('date', '<=', date)])
+ else:
+ paid = self.env['account.move.line'].search(
+ [('parent_state', '=', 'posted'),
+ ('account_type', '=', 'asset_receivable'),
+ ('reconciled', '=', False)])
+ currency_id = self.env.company.currency_id.symbol
+ if partner:
+ partner_ids = self.env['res.partner'].search(
+ [('id', 'in', partner)])
+ else:
+ partner_ids = paid.mapped('partner_id')
+ today = fields.Date.today()
+ for partner_id in partner_ids:
+ move_line_ids = paid.filtered(
+ lambda rec: rec.partner_id in partner_id)
+ move_line_data = move_line_ids.read(
+ ['name', 'move_name', 'date', 'amount_currency', 'account_id',
+ 'date_maturity', 'currency_id', 'debit', 'move_id'])
+ for val in move_line_data:
+ diffrence = 0
+ if val['date_maturity']:
+ diffrence = (today - val['date_maturity']).days
+ val['diff0'] = val['debit'] if diffrence <= 0 else 0.0
+ val['diff1'] = val['debit'] if 0 < diffrence <= 30 else 0.0
+ val['diff2'] = val['debit'] if 30 < diffrence <= 60 else 0.0
+ val['diff3'] = val['debit'] if 60 < diffrence <= 90 else 0.0
+ val['diff4'] = val['debit'] if 90 < diffrence <= 120 else 0.0
+ val['diff5'] = val['debit'] if diffrence > 120 else 0.0
+ move_line_list[partner_id.name] = move_line_data
+ debit_sum = sum(val['debit'] for val in move_line_data)
+ diff0_sum = round(sum(val['diff0'] for val in move_line_data), 2)
+ diff1_sum = round(sum(val['diff1'] for val in move_line_data), 2)
+ diff2_sum = round(sum(val['diff2'] for val in move_line_data), 2)
+ diff3_sum = round(sum(val['diff3'] for val in move_line_data), 2)
+ diff4_sum = round(sum(val['diff4'] for val in move_line_data), 2)
+ diff5_sum = round(sum(val['diff5'] for val in move_line_data), 2)
+ partner_total[partner_id.name] = {
+ 'debit_sum': debit_sum,
+ 'diff0_sum': diff0_sum,
+ 'diff0_sum_display': f"{diff0_sum:.2f}",
+ 'diff1_sum': diff1_sum,
+ 'diff1_sum_display': f"{diff1_sum:.2f}",
+ 'diff2_sum': diff2_sum,
+ 'diff2_sum_display': f"{diff2_sum:.2f}",
+ 'diff3_sum': diff3_sum,
+ 'diff3_sum_display': f"{diff3_sum:.2f}",
+ 'diff4_sum': diff4_sum,
+ 'diff4_sum_display': f"{diff4_sum:.2f}",
+ 'diff5_sum': diff5_sum,
+ 'diff5_sum_display': f"{diff5_sum:.2f}",
+ 'currency_id': currency_id,
+ 'partner_id': partner_id.id
+ }
+ move_line_list['partner_totals'] = partner_total
+ return move_line_list
+
+ @api.model
+ def get_xlsx_report(self, data, response, report_name, report_action):
+ """
+ Generate an Excel report based on the provided data with thousand separators.
+
+ :param data: The data used to generate the report.
+ :type data: str (JSON format)
+
+ :param response: The response object to write the report to.
+ :type response: object
+
+ :param report_name: The name of the report.
+ :type report_name: str
+
+ :return: None
+ """
+ data = json.loads(data)
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ end_date = data['filters']['end_date'] if \
+ data['filters']['end_date'] else ''
+ sheet = workbook.add_worksheet()
+ head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '15px'})
+ sub_heading = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_body = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px'})
+ side_heading_sub = workbook.add_format(
+ {'align': 'left', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub.set_indent(1)
+ txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
+ txt_name.set_indent(2)
+ # Define a number format with thousand separator
+ num_format = workbook.add_format({'font_size': '10px', 'border': 1, 'num_format': '#,##0.00'})
+ num_format.set_indent(2)
+ # Define a number format for totals with thousand separator
+ total_num_format = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black', 'num_format': '#,##0.00'})
+ sheet.set_column(0, 0, 30)
+ sheet.set_column(1, 1, 20)
+ sheet.set_column(2, 2, 15)
+ sheet.set_column(3, 3, 15)
+ col = 0
+ sheet.write('A1:b1', report_name, head)
+ sheet.write('B3:b4', 'Date Range', filter_head)
+ sheet.write('B4:b4', 'Partners', filter_head)
+ if end_date:
+ sheet.merge_range('C3:G3', f"{end_date}", filter_body)
+ if data['filters']['partner']:
+ display_names = [partner.get('display_name', 'undefined') for
+ partner in data['filters']['partner']]
+ display_names_str = ', '.join(display_names)
+ sheet.merge_range('C4:G4', display_names_str, filter_body)
+ if data:
+ if report_action == 'dynamic_accounts_report.action_aged_receivable':
+ sheet.write(6, col, ' ', sub_heading)
+ sheet.write(6, col + 1, 'Invoice Date', sub_heading)
+ sheet.write(6, col + 2, 'Amount Currency', sub_heading)
+ sheet.write(6, col + 3, 'Currency', sub_heading)
+ sheet.merge_range(6, col + 4, 6, col + 5, 'Account',
+ sub_heading)
+ sheet.merge_range(6, col + 6, 6, col + 7, 'Expected Date',
+ sub_heading)
+ sheet.write(6, col + 8, 'At Date', sub_heading)
+ sheet.write(6, col + 9, '1-30', sub_heading)
+ sheet.write(6, col + 10, '31-60', sub_heading)
+ sheet.write(6, col + 11, '61-90', sub_heading)
+ sheet.write(6, col + 12, '91-120', sub_heading)
+ sheet.write(6, col + 13, 'Older', sub_heading)
+ sheet.write(6, col + 14, 'Total', sub_heading)
+ row = 6
+ for move_line in data['move_lines']:
+ row += 1
+ sheet.write(row, col, move_line, txt_name)
+ sheet.write(row, col + 1, ' ', txt_name)
+ sheet.write(row, col + 2, ' ', txt_name)
+ sheet.write(row, col + 3, ' ', txt_name)
+ sheet.merge_range(row, col + 4, row, col + 5, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 6, row, col + 7, ' ',
+ txt_name)
+ sheet.write(row, col + 8,
+ data['total'][move_line]['diff0_sum'],
+ num_format)
+ sheet.write(row, col + 9,
+ data['total'][move_line]['diff1_sum'],
+ num_format)
+ sheet.write(row, col + 10,
+ data['total'][move_line]['diff2_sum'],
+ num_format)
+ sheet.write(row, col + 11,
+ data['total'][move_line]['diff3_sum'],
+ num_format)
+ sheet.write(row, col + 12,
+ data['total'][move_line]['diff4_sum'],
+ num_format)
+ sheet.write(row, col + 13,
+ data['total'][move_line]['diff5_sum'],
+ num_format)
+ sheet.write(row, col + 14,
+ data['total'][move_line]['debit_sum'],
+ num_format)
+ for rec in data['data'][move_line]:
+ row += 1
+ if not rec['name']:
+ rec['name'] = ' '
+ sheet.write(row, col, rec['move_name'] + rec['name'],
+ txt_name)
+ sheet.write(row, col + 1, rec['date'],
+ txt_name)
+ sheet.write(row, col + 2, rec['amount_currency'],
+ num_format)
+ sheet.write(row, col + 3, rec['currency_id'][1],
+ txt_name)
+ sheet.merge_range(row, col + 4, row, col + 5,
+ rec['account_id'][1],
+ txt_name)
+ sheet.merge_range(row, col + 6, row, col + 7,
+ rec['date_maturity'],
+ txt_name)
+ sheet.write(row, col + 8, rec['diff0'], num_format)
+ sheet.write(row, col + 9, rec['diff1'], num_format)
+ sheet.write(row, col + 10, rec['diff2'], num_format)
+ sheet.write(row, col + 11, rec['diff3'], num_format)
+ sheet.write(row, col + 12, rec['diff4'], num_format)
+ sheet.write(row, col + 13, rec['diff5'], num_format)
+ sheet.write(row, col + 14, ' ', txt_name)
+ sheet.merge_range(row + 1, col, row + 1, col + 7, 'Total',
+ filter_head)
+ sheet.write(row + 1, col + 8,
+ data['grand_total']['diff0_sum'],
+ total_num_format)
+ sheet.write(row + 1, col + 9,
+ data['grand_total']['diff1_sum'],
+ total_num_format)
+ sheet.write(row + 1, col + 10,
+ data['grand_total']['diff2_sum'],
+ total_num_format)
+ sheet.write(row + 1, col + 11,
+ data['grand_total']['diff3_sum'],
+ total_num_format)
+ sheet.write(row + 1, col + 12,
+ data['grand_total']['diff4_sum'],
+ total_num_format)
+ sheet.write(row + 1, col + 13,
+ data['grand_total']['diff5_sum'],
+ total_num_format)
+ sheet.write(row + 1, col + 14,
+ data['grand_total']['total_debit'],
+ total_num_format)
+
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
\ No newline at end of file
diff --git a/third_party_addons/dynamic_accounts_report/models/bank_book_report.py b/third_party_addons/dynamic_accounts_report/models/bank_book_report.py
new file mode 100644
index 000000000..5fa8db34a
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/bank_book_report.py
@@ -0,0 +1,321 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import io
+import json
+from dateutil.relativedelta import relativedelta
+import xlsxwriter
+from datetime import datetime
+from odoo.tools import date_utils
+from odoo import api, fields, models
+
+
+class BankBookReport(models.TransientModel):
+ """For creating Bank Book report"""
+ _name = 'bank.book.report'
+ _description = 'Account Bank Book Report'
+
+ @api.model
+ def view_report(self):
+ """
+ This method retrieves and returns the necessary data for the partner
+ ledger report.It fetches account move lines, grouped by accounts, and
+ calculates total debit and credit amounts.The resulting data includes
+ move lines for each account and the total debit and credit amounts for
+ each account.
+ """
+ data = {}
+ move_lines_total = {}
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'bank')])
+ account_move_lines = self.env['account.move.line'].search(
+ [('parent_state', '=', 'posted'),
+ ('journal_id', 'in', journals.ids)])
+ accounts = account_move_lines.mapped('account_id').read(
+ ['display_name', 'name'])
+ for account in accounts:
+ move_lines = account_move_lines.filtered(
+ lambda x: x.account_id.id == account['id'])
+ move_line_data = move_lines.read(
+ ['date', 'journal_id', 'partner_id', 'move_name', 'debit',
+ 'move_id',
+ 'credit', 'name', 'ref'])
+ data[move_lines.mapped('account_id').display_name] = move_line_data
+ currency_id = self.env.company.currency_id.symbol
+ move_lines_total[move_lines.mapped('account_id').display_name] = {
+ 'total_debit': round(sum(move_lines.mapped('debit')), 2),
+ 'total_credit': round(sum(move_lines.mapped('credit')), 2),
+ 'currency_id': currency_id}
+ data['move_lines_total'] = move_lines_total
+ data['accounts'] = accounts
+ return data
+
+ @api.model
+ def get_filter_values(self, partner_id, data_range, account_list, options):
+ """
+ Retrieve filtered data for the partner ledger report.
+ Args:
+ partner_id (list or None): List of partner IDs for filtering by
+ partner. If None, all partners will be
+ included.
+ data_range (str or dict): Range of data to filter the account move
+ lines. Can be a string ('month', 'year',
+ 'quarter','last-month', 'last-year',
+ 'last-quarter') or a dictionary with
+ 'start_date' and 'end_date'.
+ account_list (list or None): List of account IDs for filtering by
+ account. If None, all accounts will be
+ included.
+ options (dict or None): Additional filtering options with 'draft'
+ key (boolean) to include draft moves if
+ True.
+ Returns:
+ dict: Filtered data for the partner ledger report, grouped by
+ accounts and summary of total debit and credit amounts.
+ """
+ data = {}
+ move_lines_total = {}
+ today = fields.Date.today()
+ quarter_start, quarter_end = date_utils.get_quarter(today)
+ previous_quarter_start = quarter_start - relativedelta(months=3)
+ previous_quarter_end = quarter_start - relativedelta(days=1)
+ journals = self.env['account.journal'].search([('type', '=', 'bank')])
+ option_domain = ['posted']
+ if options is not None:
+ if 'draft' in options:
+ option_domain = ['posted', 'draft']
+ if partner_id:
+ domain = [('parent_state', 'in', option_domain),
+ ('journal_id', 'in', journals.ids),
+ ('partner_id', 'in', partner_id), ]
+ else:
+ domain = [('parent_state', 'in', option_domain),
+ ('journal_id', 'in', journals.ids), ]
+ if account_list:
+ domain += ('account_id', 'in', account_list),
+ if data_range:
+ if data_range == 'month':
+ account_move_lines = self.env['account.move.line'].search(
+ domain).filtered(
+ lambda x: x.date.month == fields.Date.today().month)
+ elif data_range == 'year':
+ account_move_lines = self.env['account.move.line'].search(
+ domain).filtered(
+ lambda x: x.date.year == fields.Date.today().year)
+ elif data_range == 'quarter':
+ domain += ('date', '>=', quarter_start), (
+ 'date', '<=', quarter_end)
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ elif data_range == 'last-month':
+ account_move_lines = self.env['account.move.line'].search(
+ domain).filtered(
+ lambda x: x.date.month == fields.Date.today().month - 1)
+ elif data_range == 'last-year':
+ account_move_lines = self.env['account.move.line'].search(
+ domain).filtered(
+ lambda x: x.date.year == fields.Date.today().year - 1)
+ elif data_range == 'last-quarter':
+ domain += ('date', '>=', previous_quarter_start), (
+ 'date', '<=', previous_quarter_end)
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ elif 'start_date' in data_range and 'end_date' in data_range:
+ start_date = datetime.strptime(data_range['start_date'],
+ '%Y-%m-%d').date()
+ end_date = datetime.strptime(data_range['end_date'],
+ '%Y-%m-%d').date()
+ domain += ('date', '>=', start_date), ('date', '<=', end_date),
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ elif 'start_date' in data_range:
+ start_date = datetime.strptime(data_range['start_date'],
+ '%Y-%m-%d').date()
+ domain.append(('date', '>=', start_date))
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ elif 'end_date' in data_range:
+ end_date = datetime.strptime(data_range['end_date'],
+ '%Y-%m-%d').date()
+ domain.append(('date', '<=', end_date))
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ else:
+ account_move_lines = self.env['account.move.line'].search(domain)
+ accounts = account_move_lines.mapped('account_id').read(
+ ['display_name'])
+ for account in accounts:
+ move_lines = account_move_lines.filtered(
+ lambda x: x.account_id.id == account['id'])
+ move_line_data = move_lines.read(
+ ['date', 'journal_id', 'partner_id', 'move_name', 'debit',
+ 'move_id',
+ 'credit', 'name', 'ref'])
+ data[move_lines.mapped('account_id').display_name] = move_line_data
+ currency_id = self.env.company.currency_id.symbol
+ move_lines_total[move_lines.mapped('account_id').display_name] = {
+ 'total_debit': round(sum(move_lines.mapped('debit')), 2),
+ 'total_credit': round(sum(move_lines.mapped('credit')), 2),
+ 'currency_id': currency_id}
+ data['move_lines_total'] = move_lines_total
+ return data
+
+ @api.model
+ def get_xlsx_report(self, data, response, report_name, report_action):
+ """
+ Generate an Excel report based on the provided data.
+ :param data: The data used to generate the report.
+ :type data: str (JSON format)
+ :param response: The response object to write the report to.
+ :type response: object
+ :param report_name: The name of the report.
+ :type report_name: str
+ :return: None
+ """
+ data = json.loads(data)
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ start_date = data['filters']['start_date'] if \
+ data['filters']['start_date'] else ''
+ end_date = data['filters']['end_date'] if \
+ data['filters']['end_date'] else ''
+ sheet = workbook.add_worksheet()
+ head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '15px'})
+ sub_heading = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_body = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px'})
+ side_heading_sub = workbook.add_format(
+ {'align': 'left', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub.set_indent(1)
+ txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
+ txt_name.set_indent(2)
+ sheet.set_column(0, 0, 30)
+ sheet.set_column(1, 1, 20)
+ sheet.set_column(2, 2, 15)
+ sheet.set_column(3, 3, 15)
+ col = 0
+ sheet.write('A1:b1', report_name, head)
+ sheet.write('B3:b4', 'Date Range', filter_head)
+ sheet.write('B4:b4', 'Partners', filter_head)
+ sheet.write('B5:b4', 'Accounts', filter_head)
+ sheet.write('B6:b4', 'Options', filter_head)
+ if start_date or end_date:
+ sheet.merge_range('C3:G3', f"{start_date} to {end_date}",
+ filter_body)
+ if data['filters']['partner']:
+ display_names = [partner.get('display_name', 'undefined') for
+ partner in data['filters']['partner']]
+ display_names_str = ', '.join(display_names)
+ sheet.merge_range('C4:G4', display_names_str, filter_body)
+ if data['filters']['account']:
+ account_keys_str = ', '.join(data['filters']['account'])
+ sheet.merge_range('C5:G5', account_keys_str, filter_body)
+ if data['filters']['options']:
+ option_keys = list(data['filters']['options'].keys())
+ option_keys_str = ', '.join(option_keys)
+ sheet.merge_range('C6:G6', option_keys_str, filter_body)
+ if data:
+ if report_action == 'dynamic_accounts_report.action_bank_book':
+ sheet.write(8, col, ' ', sub_heading)
+ sheet.merge_range('B9:C9', 'Journal', sub_heading)
+ sheet.merge_range('D9:E9', 'Partner', sub_heading)
+ sheet.merge_range('F9:G9', 'Ref', sub_heading)
+ sheet.merge_range('H9:I9', 'Move', sub_heading)
+ sheet.merge_range('J9:K9', 'Entry Label', sub_heading)
+ sheet.merge_range('L9:M9', 'Debit', sub_heading)
+ sheet.merge_range('N9:O9', 'Credit', sub_heading)
+ sheet.merge_range('P9:Q9', 'Balance', sub_heading)
+ row = 8
+ for move_line in data['move_lines']:
+ row += 1
+ sheet.write(row, col, move_line, txt_name)
+ sheet.merge_range(row, col + 1, row, col + 2, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 3, row, col + 4, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12,
+ data['total'][move_line]['total_debit_display'],
+ txt_name)
+ sheet.merge_range(row, col + 13, row, col + 14,
+ data['total'][move_line]['total_credit_display'],
+ txt_name)
+ sheet.merge_range(row, col + 15, row, col + 16,
+ data['total'][move_line]['total_debit'] -
+ data['total'][move_line]['total_credit'],
+ txt_name)
+ for rec in data['data'][move_line]:
+ row += 1
+ if rec['partner_id']:
+ partner = rec['partner_id'][1]
+ else:
+ partner = ' '
+ sheet.write(row, col, rec['date'], txt_name)
+ sheet.merge_range(row, col + 1, row, col + 2,
+ rec['journal_id'][1],
+ txt_name)
+ sheet.merge_range(row, col + 3, row, col + 4, partner,
+ txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6,
+ rec['ref'], txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8,
+ rec['move_name'],
+ txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10,
+ rec['name'],
+ txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12,
+ rec['debit_display'], txt_name)
+ sheet.merge_range(row, col + 13, row, col + 14,
+ rec['credit_display'], txt_name)
+ sheet.merge_range(row, col + 15, row, col + 16, ' ',
+ txt_name)
+ sheet.merge_range(row + 1, col, row + 1, col + 10, 'Total',
+ filter_head)
+ sheet.merge_range(row + 1, col + 11, row + 1, col + 12,
+ data['grand_total']['total_debit_display'],
+ filter_head)
+ sheet.merge_range(row + 1, col + 13, row + 1, col + 14,
+ data['grand_total']['total_credit_display'],
+ filter_head)
+ sheet.merge_range(row + 1, col + 15, row + 1, col + 16,
+ float(data['grand_total']['total_debit']) -
+ float(data['grand_total']['total_credit']),
+ filter_head)
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
diff --git a/third_party_addons/dynamic_accounts_report/models/cash_book_report.py b/third_party_addons/dynamic_accounts_report/models/cash_book_report.py
new file mode 100644
index 000000000..6501a5c80
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/cash_book_report.py
@@ -0,0 +1,344 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import io
+import json
+from dateutil.relativedelta import relativedelta
+import xlsxwriter
+from datetime import datetime
+from odoo.tools import date_utils
+from odoo import api, fields, models
+
+
+class CashBookReport(models.TransientModel):
+ """For creating Cash Book report"""
+ _name = 'cash.book.report'
+ _description = 'Account Cash Book Report'
+
+ @api.model
+ def view_report(self):
+ """
+ Retrieves and formats data for the cash book report.
+
+ Returns a dictionary containing the following data:
+ - 'move_lines_total': A dictionary containing the total debit, total
+ credit, and currency symbol for each account in
+ the cash journal.
+ - 'accounts': A list of dictionaries, each representing an account
+ in the cash journal. Each dictionary contains the
+ 'display_name' and 'name' of the account.
+ - Additional data for each account: The key is the 'display_name' of the
+ account, and the value is a list of
+ dictionaries, each representing a
+ move line for that account. Each
+ move line dictionary contains the
+ following
+ data: 'date', 'journal_id', 'partner_id', 'move_name', 'debit',
+ 'move_id', 'credit', 'name', and 'ref'.
+ """
+ data = {}
+ move_lines_total = {}
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'cash')])
+ account_move_lines = self.env['account.move.line'].search(
+ [('parent_state', '=', 'posted'),
+ ('journal_id', 'in', journals.ids)])
+ accounts = account_move_lines.mapped('account_id').read(
+ ['display_name', 'name'])
+ for account in accounts:
+ move_lines = account_move_lines.filtered(
+ lambda x: x.account_id.id == account['id'])
+ move_line_data = move_lines.read(
+ ['date', 'journal_id', 'partner_id', 'move_name', 'debit',
+ 'move_id',
+ 'credit', 'name', 'ref'])
+ data[move_lines.mapped('account_id').display_name] = move_line_data
+ currency_id = self.env.company.currency_id.symbol
+ move_lines_total[move_lines.mapped('account_id').display_name] = {
+ 'total_debit': round(sum(move_lines.mapped('debit')), 2),
+ 'total_credit': round(sum(move_lines.mapped('credit')), 2),
+ 'currency_id': currency_id}
+ data['move_lines_total'] = move_lines_total
+ data['accounts'] = accounts
+ return data
+
+ @api.model
+ def get_filter_values(self, partner_id, data_range, account_list, options):
+ """
+ Retrieves and formats filtered data for the cash book report based on
+ the provided filter criteria.
+ :param partner_id: List of partner IDs to filter the data by.
+ :type partner_id: list
+ :param data_range: Specifies the date range filter. Possible values are
+ 'month', 'year', 'quarter', 'last-month',
+ 'last-year', 'last-quarter', or a dictionary
+ containing 'start_date' and/or 'end_date' fields.
+ :type data_range: str or dict
+ :param account_list: List of account IDs to filter the data by.
+ :type account_list: list
+ :param options: Dictionary containing additional options for filtering
+ the data. The 'draft' option indicates
+ whether to include draft journal entries in the data.
+ :type options: dict
+
+ :return: A dictionary containing the following data:
+ - 'move_lines_total': A dictionary containing the total debit,
+ total credit, and currency symbol
+ for each account in the cash journal.
+ - Additional data for each account: The key is the
+ 'display_name' of account,
+ and the value is a list of
+ dictionaries, each
+ representing a move line for
+ that account. Each move line
+ dictionary contains the
+ following
+ data: 'date', 'journal_id', 'partner_id', 'move_name',
+ debit', 'move_id', 'credit', 'name', and 'ref'.
+ :rtype: dict
+ """
+ data = {}
+ move_lines_total = {}
+ today = fields.Date.today()
+ quarter_start, quarter_end = date_utils.get_quarter(today)
+ previous_quarter_start = quarter_start - relativedelta(months=3)
+ previous_quarter_end = quarter_start - relativedelta(days=1)
+ journals = self.env['account.journal'].search([('type', '=', 'cash')])
+ option_domain = ['posted']
+ if options is not None:
+ if 'draft' in options:
+ option_domain = ['posted', 'draft']
+ if partner_id:
+ domain = [('parent_state', 'in', option_domain),
+ ('journal_id', 'in', journals.ids),
+ ('partner_id', 'in', partner_id), ]
+ else:
+ domain = [('parent_state', 'in', option_domain),
+ ('journal_id', 'in', journals.ids), ]
+ if account_list:
+ domain += ('account_id', 'in', account_list),
+ if data_range:
+ if data_range == 'month':
+ account_move_lines = self.env['account.move.line'].search(
+ domain).filtered(
+ lambda x: x.date.month == fields.Date.today().month)
+ elif data_range == 'year':
+ account_move_lines = self.env['account.move.line'].search(
+ domain).filtered(
+ lambda x: x.date.year == fields.Date.today().year)
+ elif data_range == 'quarter':
+ domain += ('date', '>=', quarter_start), (
+ 'date', '<=', quarter_end)
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ elif data_range == 'last-month':
+ account_move_lines = self.env['account.move.line'].search(
+ domain).filtered(
+ lambda x: x.date.month == fields.Date.today().month - 1)
+ elif data_range == 'last-year':
+ account_move_lines = self.env['account.move.line'].search(
+ domain).filtered(
+ lambda x: x.date.year == fields.Date.today().year - 1)
+ elif data_range == 'last-quarter':
+ domain += ('date', '>=', previous_quarter_start), (
+ 'date', '<=', previous_quarter_end)
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ elif 'start_date' in data_range and 'end_date' in data_range:
+ start_date = datetime.strptime(data_range['start_date'],
+ '%Y-%m-%d').date()
+ end_date = datetime.strptime(data_range['end_date'],
+ '%Y-%m-%d').date()
+ domain += ('date', '>=', start_date), ('date', '<=', end_date),
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ elif 'start_date' in data_range:
+ start_date = datetime.strptime(data_range['start_date'],
+ '%Y-%m-%d').date()
+ domain.append(('date', '>=', start_date))
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ elif 'end_date' in data_range:
+ end_date = datetime.strptime(data_range['end_date'],
+ '%Y-%m-%d').date()
+ domain.append(('date', '<=', end_date))
+ account_move_lines = self.env['account.move.line'].search(
+ domain)
+ else:
+ account_move_lines = self.env['account.move.line'].search(domain)
+ accounts = account_move_lines.mapped('account_id').read(
+ ['display_name'])
+ for account in accounts:
+ move_lines = account_move_lines.filtered(
+ lambda x: x.account_id.id == account['id'])
+ move_line_data = move_lines.read(
+ ['date', 'journal_id', 'partner_id', 'move_name', 'debit',
+ 'move_id', 'credit', 'name', 'ref'])
+ data[move_lines.mapped('account_id').display_name] = move_line_data
+ currency_id = self.env.company.currency_id.symbol
+ move_lines_total[move_lines.mapped('account_id').display_name] = {
+ 'total_debit': round(sum(move_lines.mapped('debit')), 2),
+ 'total_credit': round(sum(move_lines.mapped('credit')), 2),
+ 'currency_id': currency_id}
+ data['move_lines_total'] = move_lines_total
+ return data
+
+ @api.model
+ def get_xlsx_report(self, data, response, report_name, report_action):
+ """
+ Generate an Excel report based on the provided data.
+ :param data: The data used to generate the report.
+ :type data: str (JSON format)
+ :param response: The response object to write the report to.
+ :type response: object
+ :param report_name: The name of the report.
+ :type report_name: str
+ :return: None
+ """
+ data = json.loads(data)
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ start_date = data['filters']['start_date'] if \
+ data['filters']['start_date'] else ''
+ end_date = data['filters']['end_date'] if \
+ data['filters']['end_date'] else ''
+ sheet = workbook.add_worksheet()
+ head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '15px'})
+ sub_heading = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_head = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black'})
+ filter_body = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px'})
+ side_heading_sub = workbook.add_format(
+ {'align': 'left', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub.set_indent(1)
+ txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
+ txt_name.set_indent(2)
+ sheet.set_column(0, 0, 30)
+ sheet.set_column(1, 1, 20)
+ sheet.set_column(2, 2, 15)
+ sheet.set_column(3, 3, 15)
+ col = 0
+ sheet.write('A1:b1', report_name, head)
+ sheet.write('B3:b4', 'Date Range', filter_head)
+ sheet.write('B4:b4', 'Partners', filter_head)
+ sheet.write('B5:b4', 'Accounts', filter_head)
+ sheet.write('B6:b4', 'Options', filter_head)
+ if start_date or end_date:
+ sheet.merge_range('C3:G3', f"{start_date} to {end_date}",
+ filter_body)
+ if data['filters']['partner']:
+ display_names = [partner.get('display_name', 'undefined') for
+ partner in data['filters']['partner']]
+ display_names_str = ', '.join(display_names)
+ sheet.merge_range('C4:G4', display_names_str, filter_body)
+ if data['filters']['account']:
+ account_keys_str = ', '.join(data['filters']['account'])
+ sheet.merge_range('C5:G5', account_keys_str, filter_body)
+ if data['filters']['options']:
+ option_keys = list(data['filters']['options'].keys())
+ option_keys_str = ', '.join(option_keys)
+ sheet.merge_range('C6:G6', option_keys_str, filter_body)
+ if data:
+ if report_action == 'dynamic_accounts_report.action_cash_book':
+ sheet.write(8, col, ' ', sub_heading)
+ sheet.merge_range('B9:C9', 'Journal', sub_heading)
+ sheet.merge_range('D9:E9', 'Partner', sub_heading)
+ sheet.merge_range('F9:G9', 'Ref', sub_heading)
+ sheet.merge_range('H9:I9', 'Move', sub_heading)
+ sheet.merge_range('J9:K9', 'Entry Label', sub_heading)
+ sheet.merge_range('L9:M9', 'Debit', sub_heading)
+ sheet.merge_range('N9:O9', 'Credit', sub_heading)
+ sheet.merge_range('P9:Q9', 'Balance', sub_heading)
+ row = 8
+ for move_line in data['move_lines']:
+ row += 1
+ sheet.write(row, col, move_line, txt_name)
+ sheet.merge_range(row, col + 1, row, col + 2, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 3, row, col + 4, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10, ' ',
+ txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12,
+ data['total'][move_line]['total_debit'],
+ txt_name)
+ sheet.merge_range(row, col + 13, row, col + 14,
+ data['total'][move_line]['total_credit'],
+ txt_name)
+ sheet.merge_range(row, col + 15, row, col + 16,
+ data['total'][move_line]['total_debit'] -
+ data['total'][move_line]['total_credit'],
+ txt_name)
+ for rec in data['data'][move_line]:
+ row += 1
+ if rec['partner_id']:
+ partner = rec['partner_id'][1]
+ else:
+ partner = ' '
+ sheet.write(row, col, rec['date'], txt_name)
+ sheet.merge_range(row, col + 1, row, col + 2,
+ rec['journal_id'][1],
+ txt_name)
+ sheet.merge_range(row, col + 3, row, col + 4, partner,
+ txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6,
+ rec['ref'], txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8,
+ rec['move_name'],
+ txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10,
+ rec['name'],
+ txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12,
+ rec['debit'], txt_name)
+ sheet.merge_range(row, col + 13, row, col + 14,
+ rec['credit'], txt_name)
+ sheet.merge_range(row, col + 15, row, col + 16, ' ',
+ txt_name)
+ sheet.merge_range(row + 1, col, row + 1, col + 10, 'Total',
+ filter_head)
+ sheet.merge_range(row + 1, col + 11, row + 1, col + 12,
+ data['grand_total']['total_debit'],
+ filter_head)
+ sheet.merge_range(row + 1, col + 13, row + 1, col + 14,
+ data['grand_total']['total_credit'],
+ filter_head)
+ sheet.merge_range(row + 1, col + 15, row + 1, col + 16,
+ float(data['grand_total']['total_debit']) -
+ float(data['grand_total']['total_credit']),
+ filter_head)
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
diff --git a/third_party_addons/dynamic_accounts_report/models/dynamic_balance_sheet_report.py b/third_party_addons/dynamic_accounts_report/models/dynamic_balance_sheet_report.py
new file mode 100644
index 000000000..486d46e38
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/dynamic_balance_sheet_report.py
@@ -0,0 +1,1107 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import io
+import json
+import datetime
+import xlsxwriter
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+from odoo.tools.date_utils import get_month, get_fiscal_year, get_quarter, \
+ subtract
+
+
+class ProfitLossReport(models.TransientModel):
+ """For creating Profit and Loss and Balance sheet report."""
+ _name = 'dynamic.balance.sheet.report'
+ _description = 'Profit Loss Report'
+
+ company_id = fields.Many2one('res.company', required=True,
+ default=lambda self: self.env.company,
+ help='Select the company to which this'
+ 'record belongs.')
+ journal_ids = fields.Many2many('account.journal',
+ string='Journals', required=True,
+ default=[],
+ help='Select one or more journals.')
+ account_ids = fields.Many2many("account.account", string="Accounts",
+ help='Select one or more accounts.')
+ analytic_ids = fields.Many2many(
+ "account.analytic.account", string="Analytic Accounts",
+ help="Analytic accounts associated with the current record.")
+ target_move = fields.Selection([('posted', 'Posted'), ('draft', 'Draft')],
+ string='Target Move', required=True,
+ default='posted',
+ help='Select the target move status.')
+ date_from = fields.Date(string="Start date",
+ help="Specify the start date.")
+ date_to = fields.Date(string="End date", help="Specify the end date.")
+
+ @api.model_create_multi
+ def create(self, vals):
+ """Create one or more records of ProfitLossReport.
+ :param vals: A dictionary or a list of dictionaries containing the field values for the records to be created.
+ :return: A recordset of the created ProfitLossReport records."""
+ return super(ProfitLossReport, self).create({})
+
+ @api.model
+ def view_report(self, option, comparison, comparison_type):
+ datas = []
+ account_types = {
+ 'income': 'income',
+ 'income_other': 'income_other',
+ 'expense': 'expense',
+ 'expense_depreciation': 'expense_depreciation',
+ 'expense_direct_cost': 'expense_direct_cost',
+ 'asset_receivable': 'asset_receivable',
+ 'asset_cash': 'asset_cash',
+ 'asset_current': 'asset_current',
+ 'asset_non_current': 'asset_non_current',
+ 'asset_prepayments': 'asset_prepayments',
+ 'asset_fixed': 'asset_fixed',
+ 'liability_payable': 'liability_payable',
+ 'liability_credit_card': 'liability_credit_card',
+ 'liability_current': 'liability_current',
+ 'liability_non_current': 'liability_non_current',
+ 'equity': 'equity',
+ 'equity_unaffected': 'equity_unaffected',
+ }
+ financial_report_id = self.browse(option)
+ current_year = fields.Date.today().year
+ current_date = fields.Date.today()
+ if financial_report_id.target_move == 'draft':
+ target_move = ['posted', 'draft']
+ else:
+ target_move = ['posted']
+ if comparison:
+ for count in range(0, int(comparison) + 1):
+ if comparison_type == "month":
+ account_move_lines = self.env['account.move.line'].search(
+ [(
+ 'parent_state', 'in', target_move),
+ ('date', '>=', (current_date - datetime.timedelta(
+ days=30 * count)).strftime('%Y-%m-01')),
+ ('date', '<=', (current_date - datetime.timedelta(
+ days=30 * count)).strftime('%Y-%m-12'))])
+ elif comparison_type == "year":
+ account_move_lines = self.env['account.move.line'].search(
+ [(
+ 'parent_state', 'in', target_move),
+ ('date', '>=', f'{current_year - count}-01-01'),
+ ('date', '<=', f'{current_year - count}-12-31')])
+ lists = [{'id': rec.id, 'value': [eval(i) for i in
+ rec.analytic_distribution.keys()]}
+ for rec in account_move_lines if
+ rec.analytic_distribution]
+ if financial_report_id.analytic_ids:
+ account_move_lines = account_move_lines.filtered(lambda
+ rec: rec.id in [
+ lst['id'] for lst in lists if lst['value'] and any(
+ i in financial_report_id.analytic_ids.mapped('id')
+ for i in lst['value'])])
+ account_move_lines = account_move_lines.filtered(lambda
+ a: not financial_report_id.journal_ids or a.journal_id in financial_report_id.journal_ids)
+ account_move_lines = account_move_lines.filtered(lambda
+ a: not financial_report_id.account_ids or a.account_id in financial_report_id.account_ids)
+ account_move_lines = account_move_lines.filtered(lambda
+ a: not financial_report_id.date_from or a.date >= financial_report_id.date_from)
+ account_move_lines = account_move_lines.filtered(lambda
+ a: not financial_report_id.date_to or a.date <= financial_report_id.date_to)
+ account_entries = {}
+ for account_type in account_types.values():
+ account_entries[account_type] = self._get_entries(
+ account_move_lines, self.env['account.account'].search(
+ [('account_type', '=', account_type)]),
+ account_type)
+ total_income = sum(
+ float(entry['amount'].replace(',', '')) for account_type
+ in
+ ['income', 'income_other'] for entry in
+ account_entries[account_type][0]) - sum(
+ float(entry['amount'].replace(',', '')) for entry in
+ account_entries['expense_direct_cost'][0])
+ total_expense = sum(
+ float(entry['amount'].replace(',', '')) for account_type
+ in
+ ['expense', 'expense_depreciation'] for entry in
+ account_entries[account_type][0])
+ total_current_asset = sum(
+ float(entry['amount'].replace(',', '')) for account_type
+ in
+ ['asset_receivable', 'asset_current', 'asset_cash',
+ 'asset_prepayments'] for entry in
+ account_entries[account_type][0])
+ total_assets = total_current_asset + sum(
+ float(entry['amount'].replace(',', '')) for account_type
+ in
+ ['asset_fixed', 'asset_non_current'] for entry in
+ account_entries[account_type][0])
+ total_current_liability = sum(
+ float(entry['amount'].replace(',', '')) for account_type
+ in
+ ['liability_current', 'liability_payable'] for entry in
+ account_entries[account_type][0])
+ total_liability = total_current_liability + sum(
+ float(entry['amount'].replace(',', '')) for account_type
+ in
+ ['liability_non_current'] for entry in
+ account_entries[account_type][0])
+ total_unallocated_earning = (
+ total_income - total_expense) + sum(
+ float(entry['amount'].replace(',', '')) for account_type
+ in
+ ['equity_unaffected'] for entry in
+ account_entries[account_type][0])
+ total_equity = total_unallocated_earning + sum(
+ float(entry['amount'].replace(',', '')) for account_type
+ in
+ ['equity'] for entry in
+ account_entries[account_type][0])
+ total = total_liability + total_equity
+ data = {
+ 'total': total_income - total_expense,
+ 'total_expense': "{:,.2f}".format(total_expense),
+ 'total_income': "{:,.2f}".format(total_income),
+ 'total_current_asset': "{:,.2f}".format(
+ total_current_asset),
+ 'total_assets': "{:,.2f}".format(total_assets),
+ 'total_current_liability': "{:,.2f}".format(
+ total_current_liability),
+ 'total_liability': "{:,.2f}".format(total_liability),
+ 'total_earnings': "{:,.2f}".format(
+ total_income - total_expense),
+ 'total_unallocated_earning': "{:,.2f}".format(
+ total_unallocated_earning),
+ 'total_equity': "{:,.2f}".format(total_equity),
+ 'total_balance': "{:,.2f}".format(total),
+ **account_entries}
+ datas.append(data)
+ else:
+ current_year = fields.Date.today().year
+ date_from = financial_report_id.date_from or f'{current_year}-01-01'
+ date_to = financial_report_id.date_to or f'{current_year}-12-31'
+ account_move_lines = self.env['account.move.line'].search(
+ [('parent_state', 'in', target_move),
+ ('date', '>=', date_from),
+ ('date', '<=', date_to)])
+ lists = [{'id': rec.id,
+ 'value': [eval(i) for i in
+ rec.analytic_distribution.keys()]}
+ for rec in account_move_lines if
+ rec.analytic_distribution]
+ if financial_report_id.analytic_ids:
+ account_move_lines = account_move_lines.filtered(
+ lambda rec: rec.id in [lst['id'] for lst in lists if
+ lst['value'] and any(
+ i in financial_report_id.analytic_ids.mapped(
+ 'id') for i in
+ lst['value'])])
+ account_move_lines = account_move_lines.filtered(lambda
+ a: not financial_report_id.journal_ids or a.journal_id in financial_report_id.journal_ids)
+ account_move_lines = account_move_lines.filtered(lambda
+ a: not financial_report_id.account_ids or a.account_id in financial_report_id.account_ids)
+ account_move_lines = account_move_lines.filtered(lambda
+ a: not financial_report_id.date_from or a.date >= financial_report_id.date_from)
+ account_move_lines = account_move_lines.filtered(lambda
+ a: not financial_report_id.date_to or a.date <= financial_report_id.date_to)
+ account_entries = {}
+ for account_type in account_types.values():
+ account_entries[account_type] = self._get_entries(
+ account_move_lines, self.env['account.account'].search(
+ [('account_type', '=', account_type)]), account_type)
+ total_income = sum(
+ float(entry['amount'].replace(',', '')) for account_type in
+ ['income', 'income_other'] for entry in
+ account_entries[account_type][0]) - sum(
+ float(entry['amount'].replace(',', '')) for entry in
+ account_entries['expense_direct_cost'][0])
+ total_expense = sum(
+ float(entry['amount'].replace(',', '')) for account_type in
+ ['expense', 'expense_depreciation'] for entry in
+ account_entries[account_type][0])
+ total_current_asset = sum(
+ float(entry['amount'].replace(',', '')) for account_type in
+ ['asset_receivable', 'asset_current', 'asset_cash',
+ 'asset_prepayments'] for entry in
+ account_entries[account_type][0])
+ total_assets = total_current_asset + sum(
+ float(entry['amount'].replace(',', '')) for account_type in
+ ['asset_fixed', 'asset_non_current'] for entry in
+ account_entries[account_type][0])
+ total_current_liability = sum(
+ float(entry['amount'].replace(',', '')) for account_type in
+ ['liability_current', 'liability_payable'] for entry in
+ account_entries[account_type][0])
+ total_liability = total_current_liability + sum(
+ float(entry['amount'].replace(',', '')) for account_type in
+ ['liability_non_current'] for entry in
+ account_entries[account_type][0])
+ total_unallocated_earning = (total_income - total_expense) + sum(
+ float(entry['amount'].replace(',', '')) for account_type in
+ ['equity_unaffected'] for entry in
+ account_entries[account_type][0])
+ total_equity = total_unallocated_earning + sum(
+ float(entry['amount'].replace(',', '')) for account_type in
+ ['equity'] for entry in account_entries[account_type][0])
+ total = total_liability + total_equity
+ data = {
+ 'total': total_income - total_expense,
+ 'total_expense': "{:,.2f}".format(total_expense),
+ 'total_income': "{:,.2f}".format(total_income),
+ 'total_current_asset': "{:,.2f}".format(total_current_asset),
+ 'total_assets': "{:,.2f}".format(total_assets),
+ 'total_current_liability': "{:,.2f}".format(
+ total_current_liability),
+ 'total_liability': "{:,.2f}".format(total_liability),
+ 'total_earnings': "{:,.2f}".format(
+ total_income - total_expense),
+ 'total_unallocated_earning': "{:,.2f}".format(
+ total_unallocated_earning),
+ 'total_equity': "{:,.2f}".format(total_equity),
+ 'total_balance': "{:,.2f}".format(total),
+ **account_entries}
+ datas.append(data)
+ filters = self._get_filter_data()
+ return data, filters, datas
+
+ def _get_entries(self, account_move_lines, account_ids, account_type):
+ """
+ Get the entries for the specified account type.
+ :param account_move_lines: The account move lines to filter.
+ :param account_ids: The account IDs to filter.
+ :param account_type: The account type.
+ :return: A tuple containing the entries and the total amount.
+ """
+ entries = []
+ total = 0
+ for account in account_ids:
+ filtered_lines = account_move_lines.filtered(
+ lambda line: line.account_id == account)
+ if filtered_lines:
+ if account_type in ['income', 'income_other',
+ 'liability_payable', 'liability_current',
+ 'liability_non_current', 'equity',
+ 'equity_unaffected']:
+ amount = -(sum(filtered_lines.mapped('debit')) - sum(
+ filtered_lines.mapped('credit')))
+ else:
+ amount = sum(filtered_lines.mapped('debit')) - sum(
+ filtered_lines.mapped('credit'))
+ entries.append({
+ 'name': "{} - {}".format(account.code, account.name),
+ 'amount': "{:,.2f}".format(amount),
+ })
+ total += amount
+ else:
+ entries.append({
+ 'name': "{} - {}".format(account.code, account.name),
+ 'amount': "{:,.2f}".format(0),
+ })
+ return entries, "{:,.2f}".format(total)
+
+ def filter(self, vals):
+ """
+ Update the filter criteria based on the provided values.
+ :param vals: A dictionary containing the filter values to update.
+ :return: The updated record.
+ """
+ filter = []
+ today = fields.Date.today()
+ if vals == 'month':
+ vals = {
+ 'date_from': get_month(today)[0].strftime("%Y-%m-%d"),
+ 'date_to': get_month(today)[1].strftime("%Y-%m-%d"),
+ }
+ elif vals == 'quarter':
+ vals = {
+ 'date_from': get_quarter(today)[0].strftime("%Y-%m-%d"),
+ 'date_to': get_quarter(today)[1].strftime("%Y-%m-%d"),
+ }
+ elif vals == 'year':
+ vals = {
+ 'date_from': get_fiscal_year(today)[0].strftime("%Y-%m-%d"),
+ 'date_to': get_fiscal_year(today)[1].strftime("%Y-%m-%d"),
+ }
+ elif vals == 'last-month':
+ last_month_date = subtract(today, months=1)
+ vals = {
+ 'date_from': get_month(last_month_date)[0].strftime(
+ "%Y-%m-%d"),
+ 'date_to': get_month(last_month_date)[1].strftime("%Y-%m-%d"),
+ }
+ elif vals == 'last-quarter':
+ last_quarter_date = subtract(today, months=3)
+ vals = {
+ 'date_from': get_quarter(last_quarter_date)[0].strftime(
+ "%Y-%m-%d"),
+ 'date_to': get_quarter(last_quarter_date)[1].strftime(
+ "%Y-%m-%d"),
+ }
+ elif vals == 'last-year':
+ last_year_date = subtract(today, years=1)
+ vals = {
+ 'date_from': get_fiscal_year(last_year_date)[0].strftime(
+ "%Y-%m-%d"),
+ 'date_to': get_fiscal_year(last_year_date)[1].strftime(
+ "%Y-%m-%d"),
+ }
+ if 'date_from' in vals:
+ self.write({'date_from': vals['date_from']})
+ if 'date_to' in vals:
+ self.write({'date_to': vals['date_to']})
+ if 'journal_ids' in vals:
+ if int(vals['journal_ids']) in self.journal_ids.mapped('id'):
+ self.update({'journal_ids': [(3, int(vals['journal_ids']))]})
+ else:
+ self.write({'journal_ids': [(4, int(vals['journal_ids']))]})
+ filter.append({'journal_ids': self.journal_ids.mapped('code')})
+ if 'account_ids' in vals:
+ if int(vals['account_ids']) in self.account_ids.mapped('id'):
+ self.update(
+ {'account_ids': [(3, int(vals['account_ids']))]})
+ else:
+ self.write({'account_ids': [(4, int(vals['account_ids']))]})
+ filter.append({'account_ids': self.account_ids.mapped('name')})
+ if 'analytic_ids' in vals:
+ if int(vals['analytic_ids']) in self.analytic_ids.mapped('id'):
+ self.update(
+ {'analytic_ids': [(3, int(vals['analytic_ids']))]})
+ else:
+ self.write({'analytic_ids': [(4, int(vals['analytic_ids']))]})
+ filter.append({'analytic_ids': self.analytic_ids.mapped('name')})
+ if 'target' in vals:
+ self.write({'target_move': vals['target']})
+ filter.append({'target_move': self.target_move})
+ return filter
+
+ def _get_filter_data(self):
+ """
+ Retrieve the filter data for journals and accounts.
+
+ :return: A dictionary containing the filter data.
+ """
+ journal_ids = self.env['account.journal'].search([])
+ journal = [{'id': journal.id, 'name': journal.name} for journal in
+ journal_ids]
+
+ account_ids = self.env['account.account'].search([])
+ account = [{'id': account.id, 'name': account.name} for account in
+ account_ids]
+
+ analytic_ids = self.env['account.analytic.account'].search([])
+ analytic = [{'id': analytic.id, 'name': analytic.name} for analytic in
+ analytic_ids]
+
+ filter = {
+ 'journal': journal,
+ 'account': account,
+ 'analytic': analytic
+ }
+ return filter
+
+ @api.model
+ def comparison_filter(self, options, count):
+ today = fields.Date.today()
+ if not count:
+ raise ValidationError(_("Please select the count."))
+ last_month_date_list = []
+ for i in range(1, int(count) + 1):
+ last_month_date = subtract(today, months=i)
+ vals = {
+ 'date_from': get_month(last_month_date)[0].strftime(
+ "%Y-%m-%d"),
+ 'date_to': get_month(last_month_date)[1].strftime("%Y-%m-%d"),
+ }
+ last_month_date_list.append(vals)
+ return last_month_date_list
+
+ @api.model
+ def comparison_filter_year(self, options, count):
+ today = fields.Date.today()
+ if not count:
+ raise ValidationError(_("Please select the count."))
+ last_year_date_list = []
+ for i in range(1, int(count) + 1):
+ last_year_date = subtract(today, years=i)
+ vals = {
+ 'date_from': get_fiscal_year(last_year_date)[0].strftime(
+ "%Y-%m-%d"),
+ 'date_to': get_fiscal_year(last_year_date)[1].strftime(
+ "%Y-%m-%d"),
+ }
+ last_year_date_list.append(vals)
+ return last_year_date_list
+
+ @api.model
+ def get_xlsx_report(self, data, response, report_name, report_action):
+ """Generate and return an XLSX report based on the provided data.
+ :param data: The report data in JSON format.
+ :param report_name: Name of the report.
+ :param response: The response object to write the generated report to.
+ """
+ data = json.loads(data)
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ sheet = workbook.add_worksheet()
+ sub_heading = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub = workbook.add_format(
+ {'align': 'left', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub.set_indent(1)
+ txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
+ txt_name_left = workbook.add_format(
+ {'align': 'left', 'font_size': '10px', 'border': 1})
+ txt_name.set_indent(2)
+ sheet.set_column(0, 0, 30)
+ sheet.set_column(1, 1, 20)
+ sheet.set_column(2, 2, 15)
+ sheet.set_column(3, 3, 15)
+ col = 0
+ sheet.write('A3:b4', report_name, sub_heading)
+ sheet.write(5, col, '', sub_heading)
+ for date in data['year']:
+ sheet.write(4, col + 1, date, sub_heading)
+ sheet.write(5, col + 1, 'Balance', sub_heading)
+ col += 1
+ col = 0
+ if data:
+ if report_action == 'dynamic_accounts_report.action_dynamic_profit_and_loss':
+ sheet.write(6, col, 'Net Profit', sub_heading)
+ for datas in data['datas']:
+ sheet.write(6, col + 1, datas['total'], side_heading_sub)
+ col += 1
+ col = 0
+ sheet.write(7, col, 'Income', side_heading_sub)
+ sheet.write(7, col + 1, ' ', side_heading_sub)
+ sheet.write(8, col, 'Operating Income', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(8, col + 1, datas['income'][1], txt_name)
+ col += 1
+ row = 8
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['income'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['income'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['income'][0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Cost of Revenue', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['expense_direct_cost'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['expense_direct_cost'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['expense_direct_cost'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in \
+ datas['expense_direct_cost'][0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Other Income', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['income_other'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['income_other'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['income_other'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['income_other'][0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Total Income', side_heading_sub)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['total_income'],
+ side_heading_sub)
+ col += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Expense', side_heading_sub)
+ sheet.write(row, col + 1, '', side_heading_sub)
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Expense', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['expense'][1], txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['expense'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['expense'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['expense'][0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Depreciation', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['expense_depreciation'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['expense_depreciation'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['expense_depreciation'][
+ 0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in \
+ datas['expense_depreciation'][
+ 0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Total Expenses', side_heading_sub)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['total_expense'],
+ side_heading_sub)
+ col += 1
+ else:
+ sheet.write(6, col, 'ASSETS', sub_heading)
+ sheet.write(6, col + 1, ' ', side_heading_sub)
+ sheet.write(7, col, 'Current Assets', side_heading_sub)
+ sheet.write(7, col + 1, ' ', side_heading_sub)
+ sheet.write(8, col, 'Bank and Cash Accounts', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(8, col + 1, datas['asset_cash'][1], txt_name)
+ col += 1
+ row = 8
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['asset_cash'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['asset_cash'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['asset_cash'][0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Receivables', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['asset_receivable'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['asset_receivable'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['asset_receivable'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['asset_receivable'][
+ 0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Current Assets', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['asset_current'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['asset_current'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['asset_current'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['asset_current'][0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Prepayments', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['asset_prepayments'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['asset_prepayments'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['asset_prepayments'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['asset_prepayments'][
+ 0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Total Current Assets', side_heading_sub)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['total_current_asset'],
+ side_heading_sub)
+ col += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Plus Fixed Assets', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['asset_fixed'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['asset_fixed'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['asset_fixed'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['asset_fixed'][
+ 0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Plus Non-current Assets', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['asset_non_current'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['asset_non_current'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['asset_non_current'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['asset_non_current'][
+ 0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Total Assets', side_heading_sub)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['total_assets'],
+ side_heading_sub)
+ col += 1
+ col = 0
+ row += 1
+ sheet.write(row, col, 'LIABILITIES', sub_heading)
+ sheet.write(row, col + 1, '', sub_heading)
+ row += 1
+ sheet.write(row, col, 'Current Liabilities', side_heading_sub)
+ sheet.write(row, col + 1, ' ', side_heading_sub)
+ row += 1
+ sheet.write(row, col, 'Current Liabilities', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['liability_current'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['liability_current'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['liability_current'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['liability_current'][
+ 0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Payables', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['liability_payable'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['liability_payable'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['liability_payable'][0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['liability_payable'][
+ 0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Total Current Liabilities',
+ side_heading_sub)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['total_current_liability'],
+ side_heading_sub)
+ col += 1
+ col = 0
+ row += 1
+ sheet.write(row, col, 'Plus Non-current Liabilities',
+ txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1,
+ datas['liability_non_current'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['liability_non_current'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['liability_non_current'][
+ 0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in \
+ datas['liability_non_current'][
+ 0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Total Liabilities',
+ side_heading_sub)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['total_liability'],
+ side_heading_sub)
+ col += 1
+ col = 0
+ row += 1
+ sheet.write(row, col, 'EQUITY', sub_heading)
+ sheet.write(row, col + 1, '', sub_heading)
+ row += 1
+ sheet.write(row, col, 'Unallocated Earnings', side_heading_sub)
+ sheet.write(row, col + 1, ' ', side_heading_sub)
+ row += 1
+ sheet.write(row, col, 'Current Earnings', txt_name)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['total_earnings'],
+ txt_name)
+ col += 1
+ col = 0
+ row += 1
+ sheet.write(row, col, 'Current Allocated Earnings',
+ txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['equity_unaffected'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['equity_unaffected'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['equity_unaffected'][
+ 0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in \
+ datas['equity_unaffected'][
+ 0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Total Unallocated Earnings',
+ side_heading_sub)
+ for datas in data['datas']:
+ sheet.write(row, col + 1,
+ datas['total_unallocated_earning'],
+ side_heading_sub)
+ col += 1
+ col = 0
+ row += 1
+ sheet.write(row, col, 'Retained Earnings', txt_name_left)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['equity'][1],
+ txt_name)
+ col += 1
+ index = 0
+ for datas in data['datas']:
+ if index == 0:
+ for accounts in datas['equity'][0]:
+ account_name = accounts['name']
+ account_value = 0
+ for datas in data['datas']:
+ for account in datas['equity'][
+ 0]:
+ if account_name == account['name'] and \
+ account['amount'] != '0.00':
+ account_value = 1
+ if account_value == 1:
+ row += 1
+ col = 0
+ sheet.write(row, col, accounts['name'],
+ txt_name)
+ for datas in data['datas']:
+ for account in datas['equity'][0]:
+ if account_name == account['name']:
+ sheet.write(row, col + 1,
+ account['amount'],
+ txt_name)
+ col += 1
+ index += 1
+ row += 1
+ col = 0
+ sheet.write(row, col, 'Total EQUITY', side_heading_sub)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['total_equity'],
+ side_heading_sub)
+ col += 1
+ col = 0
+ row += 1
+ sheet.write(row, col, 'LIABILITIES + EQUITY', side_heading_sub)
+ for datas in data['datas']:
+ sheet.write(row, col + 1, datas['total_balance'],
+ side_heading_sub)
+ col += 1
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
diff --git a/third_party_addons/dynamic_accounts_report/models/tax_report.py b/third_party_addons/dynamic_accounts_report/models/tax_report.py
new file mode 100644
index 000000000..44d39ebb8
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/models/tax_report.py
@@ -0,0 +1,760 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Bhagyadev KP ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import calendar
+import io
+import json
+from datetime import datetime
+import xlsxwriter
+from odoo import models, fields, api
+from odoo.tools.date_utils import get_month, get_fiscal_year, \
+ get_quarter_number, subtract
+
+
+class TaxReport(models.TransientModel):
+ """For creating Tax report."""
+ _name = 'tax.report'
+ _description = 'Tax Report'
+
+ @api.model
+ def view_report(self):
+ """
+ View a tax report for the current month. This function retrieves
+ tax-related information for the current month. It calculates the net
+ amount and tax amount for both sales and purchases based on the tax
+ information associated with account move lines.
+ :return: Dictionary containing sale and purchase data for the
+ current month.
+ """
+ sale = []
+ purchase = []
+ tax_ids = self.env['account.move.line'].search([]).mapped(
+ 'tax_ids')
+ today = fields.Date.today()
+ for tax in tax_ids:
+ tax_id = self.env['account.move.line'].search(
+ [('tax_ids', '=', tax.id), ('parent_state', '=', 'posted'),
+ ('date', '>=', get_month(today)[0]),
+ ('date', '<=', get_month(today)[1])]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(record['debit'] for record in tax_id)
+ tax_credit_sums = sum(record['credit'] for record in tax_id)
+ if tax.type_tax_use == 'sale':
+ sale.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums, 2),
+ 'tax': round((tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2)
+ })
+ elif tax.type_tax_use == 'purchase':
+ purchase.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums, 2),
+ 'tax': round((tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2)
+ })
+ return {
+ 'sale': sale,
+ 'purchase': purchase
+ }
+
+ @api.model
+ def get_filter_values(self, start_date, end_date, comparison_number,
+ comparison_type, options, report_type):
+ """
+ Get filtered tax values based on various criteria.
+
+ :param start_date: Start date of the filter period.
+ :param end_date: End date of the filter period.
+ :param comparison_number: Number of comparison periods.
+ :param comparison_type: Type of comparison (year, month, quarter).
+ :param options: Filter options.
+ :param report_type: Type of report (account, tax).
+ :return: Dictionary containing dynamic_date_num, sale, and purchase
+ data.
+ """
+ sale = []
+ purchase = []
+ dynamic_date_num = {}
+ if options == {}:
+ options = None
+ if options is None:
+ option_domain = ['posted']
+ elif 'draft' in options:
+ option_domain = ['posted', 'draft']
+ tax_ids = self.env['account.move.line'].search([]).mapped(
+ 'tax_ids')
+ start_date_first = \
+ get_fiscal_year(datetime.strptime(start_date, "%Y-%m-%d").date())[
+ 0] if comparison_type == 'year' else datetime.strptime(
+ start_date, "%Y-%m-%d").date()
+ end_date_first = \
+ get_fiscal_year(datetime.strptime(end_date, "%Y-%m-%d").date())[
+ 1] if comparison_type == 'year' else datetime.strptime(
+ end_date, "%Y-%m-%d").date()
+ if report_type is not None and 'account' in report_type:
+ start_date = start_date_first
+ end_date = end_date_first
+ account_ids = self.env['account.move.line'].search([]).mapped(
+ 'account_id')
+ for account in account_ids:
+ tax_ids = self.env['account.move.line'].search(
+ [('account_id', '=', account.id)]).mapped('tax_ids')
+ if tax_ids:
+ for tax in tax_ids:
+ dynamic_total_tax_sum = {}
+ dynamic_total_net_sum = {}
+ if comparison_number:
+ if comparison_type == 'year':
+ start_date = start_date_first
+ end_date = end_date_first
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date,
+ years=i)
+ com_end_date = subtract(end_date, years=i)
+ tax_id = self.env[
+ 'account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', com_start_date),
+ ('date', '<=', com_end_date),
+ ('account_id', '=', account.id),
+ ('parent_state', 'in',
+ option_domain)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] = tax_debit_sums + tax_credit_sums
+ dynamic_total_tax_sum[
+ f"dynamic_total_tax_sum{i}"] = \
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] * (
+ tax.amount / 100)
+ elif comparison_type == 'month':
+ dynamic_date_num[
+ f"dynamic_date_num{0}"] = self.get_month_name(
+ start_date) + ' ' + str(start_date.year)
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date,
+ months=i)
+ com_end_date = subtract(end_date, months=i)
+ tax_id = self.env[
+ 'account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', com_start_date),
+ ('account_id', '=', account.id),
+ ('date', '<=', com_end_date),
+ ('parent_state', 'in',
+ option_domain)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] = tax_debit_sums + tax_credit_sums
+ dynamic_total_tax_sum[
+ f"dynamic_total_tax_sum{i}"] = \
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] * (
+ tax.amount / 100)
+ dynamic_date_num[
+ f"dynamic_date_num{i}"] = self.get_month_name(
+ com_start_date) + ' ' + str(
+ com_start_date.year)
+ elif comparison_type == 'quarter':
+ dynamic_date_num[
+ f"dynamic_date_num{0}"] = 'Q' + ' ' + str(
+ get_quarter_number(
+ start_date)) + ' ' + str(
+ start_date.year)
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date,
+ months=i * 3)
+ com_end_date = subtract(end_date,
+ months=i * 3)
+ tax_id = self.env[
+ 'account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', com_start_date),
+ ('account_id', '=', account.id),
+ ('date', '<=', com_end_date),
+ ('parent_state', 'in',
+ option_domain)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] = tax_debit_sums + tax_credit_sums
+ dynamic_total_tax_sum[
+ f"dynamic_total_tax_sum{i}"] = \
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] * (
+ tax.amount / 100)
+ dynamic_date_num[
+ f"dynamic_date_num{i}"] = 'Q' + ' ' + str(
+ get_quarter_number(
+ com_start_date)) + ' ' + str(
+ com_start_date.year)
+ tax_id = self.env['account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', start_date_first),
+ ('date', '<=', end_date_first),
+ ('parent_state', 'in', option_domain),
+ ('account_id', '=', account.id)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ if tax_id and tax.type_tax_use == 'sale':
+ if comparison_number:
+ sale.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(
+ tax_debit_sums + tax_credit_sums,
+ 2),
+ 'tax': round(
+ (tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'dynamic net': dynamic_total_net_sum,
+ 'dynamic tax': dynamic_total_tax_sum,
+ 'account': account.display_name,
+ })
+ else:
+ sale.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(
+ tax_debit_sums + tax_credit_sums,
+ 2),
+ 'tax': round(
+ (tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'account': account.display_name,
+ })
+ elif tax_id and tax.type_tax_use == 'purchase':
+ if comparison_number:
+ purchase.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(
+ tax_debit_sums + tax_credit_sums,
+ 2),
+ 'tax': round(
+ (tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'dynamic net': dynamic_total_net_sum,
+ 'dynamic tax': dynamic_total_tax_sum,
+ 'account': account.display_name,
+ })
+ else:
+ purchase.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(
+ tax_debit_sums + tax_credit_sums,
+ 2),
+ 'tax': round(
+ (tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'account': account.display_name,
+ })
+ elif report_type is not None and 'tax' in report_type:
+ start_date = start_date_first
+ end_date = end_date_first
+ for tax in tax_ids:
+ account_ids = self.env['account.move.line'].search(
+ [('tax_ids', '=', tax.id)]).mapped('account_id')
+ for account in account_ids:
+ dynamic_total_tax_sum = {}
+ dynamic_total_net_sum = {}
+ if comparison_number:
+ if comparison_type == 'year':
+ start_date = start_date_first
+ end_date = end_date_first
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date,
+ years=i)
+ com_end_date = subtract(end_date, years=i)
+ tax_id = self.env[
+ 'account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', com_start_date),
+ ('date', '<=', com_end_date),
+ ('account_id', '=', account.id),
+ ('parent_state', 'in',
+ option_domain)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] = tax_debit_sums + tax_credit_sums
+ dynamic_total_tax_sum[
+ f"dynamic_total_tax_sum{i}"] = \
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] * (
+ tax.amount / 100)
+ elif comparison_type == 'month':
+ dynamic_date_num[
+ f"dynamic_date_num{0}"] = self.get_month_name(
+ start_date) + ' ' + str(start_date.year)
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date, months=i)
+ com_end_date = subtract(end_date, months=i)
+ tax_id = self.env[
+ 'account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', com_start_date),
+ ('date', '<=', com_end_date),
+ ('account_id', '=', account.id),
+ ('parent_state', 'in',
+ option_domain)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] = tax_debit_sums + tax_credit_sums
+ dynamic_total_tax_sum[
+ f"dynamic_total_tax_sum{i}"] = \
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] * (
+ tax.amount / 100)
+ dynamic_date_num[
+ f"dynamic_date_num{i}"] = self.get_month_name(
+ com_start_date) + ' ' + str(
+ com_start_date.year)
+ elif comparison_type == 'quarter':
+ dynamic_date_num[
+ f"dynamic_date_num{0}"] = 'Q' + ' ' + str(
+ get_quarter_number(start_date)) + ' ' + str(
+ start_date.year)
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date,
+ months=i * 3)
+ com_end_date = subtract(end_date,
+ months=i * 3)
+ tax_id = self.env[
+ 'account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', com_start_date),
+ ('date', '<=', com_end_date),
+ ('account_id', '=', account.id),
+ ('parent_state', 'in',
+ option_domain)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] = tax_debit_sums + tax_credit_sums
+ dynamic_total_tax_sum[
+ f"dynamic_total_tax_sum{i}"] = \
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] * (
+ tax.amount / 100)
+ dynamic_date_num[
+ f"dynamic_date_num{i}"] = 'Q' + ' ' + str(
+ get_quarter_number(
+ com_start_date)) + ' ' + str(
+ com_start_date.year)
+ tax_id = self.env['account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('parent_state', 'in', option_domain),
+ ('date', '>=', start_date_first),
+ ('date', '<=', end_date_first),
+ ('account_id', '=', account.id)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ if tax_id and tax.type_tax_use == 'sale':
+ if comparison_number:
+ sale.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums,
+ 2),
+ 'tax': round(
+ (tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'dynamic net': dynamic_total_net_sum,
+ 'dynamic tax': dynamic_total_tax_sum,
+ 'account': account.display_name,
+ })
+ else:
+ sale.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums,
+ 2),
+ 'tax': round(
+ (tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'account': account.display_name,
+ })
+ elif tax_id and tax.type_tax_use == 'purchase':
+ if comparison_number:
+ purchase.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums,
+ 2),
+ 'tax': round(
+ (tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'dynamic net': dynamic_total_net_sum,
+ 'dynamic tax': dynamic_total_tax_sum,
+ 'account': account.display_name,
+ })
+ else:
+ purchase.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums,
+ 2),
+ 'tax': round(
+ (tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'account': account.display_name,
+ })
+ else:
+ start_date = start_date_first
+ end_date = end_date_first
+ for tax in tax_ids:
+ dynamic_total_tax_sum = {}
+ dynamic_total_net_sum = {}
+ if comparison_number:
+ if comparison_type == 'year':
+ start_date = start_date_first
+ end_date = end_date_first
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date,
+ years=i)
+ com_end_date = subtract(end_date, years=i)
+ tax_id = self.env[
+ 'account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', com_start_date),
+ ('date', '<=', com_end_date),
+ ('parent_state', 'in', option_domain)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] = tax_debit_sums + tax_credit_sums
+ dynamic_total_tax_sum[
+ f"dynamic_total_tax_sum{i}"] = \
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] * (
+ tax.amount / 100)
+ elif comparison_type == 'month':
+ dynamic_date_num[
+ f"dynamic_date_num{0}"] = self.get_month_name(
+ start_date) + ' ' + str(start_date.year)
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date, months=i)
+ com_end_date = subtract(end_date, months=i)
+ tax_id = self.env[
+ 'account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', com_start_date),
+ ('date', '<=', com_end_date),
+ ('parent_state', 'in', option_domain)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] = tax_debit_sums + tax_credit_sums
+ dynamic_total_tax_sum[
+ f"dynamic_total_tax_sum{i}"] = \
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] * (
+ tax.amount / 100)
+ dynamic_date_num[
+ f"dynamic_date_num{i}"] = self.get_month_name(
+ com_start_date) + ' ' + str(
+ com_start_date.year)
+ elif comparison_type == 'quarter':
+ dynamic_date_num[
+ f"dynamic_date_num{0}"] = 'Q' + ' ' + str(
+ get_quarter_number(start_date)) + ' ' + str(
+ start_date.year)
+ for i in range(1, eval(comparison_number) + 1):
+ com_start_date = subtract(start_date,
+ months=i * 3)
+ com_end_date = subtract(end_date,
+ months=i * 3)
+ tax_id = self.env[
+ 'account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('date', '>=', com_start_date),
+ ('date', '<=', com_end_date),
+ ('parent_state', 'in', option_domain)]).read(
+ ['debit', 'credit'])
+ tax_debit_sums = sum(
+ record['debit'] for record in tax_id)
+ tax_credit_sums = sum(
+ record['credit'] for record in tax_id)
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] = tax_debit_sums + tax_credit_sums
+ dynamic_total_tax_sum[
+ f"dynamic_total_tax_sum{i}"] = \
+ dynamic_total_net_sum[
+ f"dynamic_total_net_sum{i}"] * (
+ tax.amount / 100)
+ dynamic_date_num[
+ f"dynamic_date_num{i}"] = 'Q' + ' ' + str(
+ get_quarter_number(
+ com_start_date)) + ' ' + str(
+ com_start_date.year)
+ tax_id = self.env['account.move.line'].search(
+ [('tax_ids', '=', tax.id),
+ ('parent_state', 'in', option_domain),
+ ('date', '>=', start_date_first),
+ ('date', '<=', end_date_first)]).read(['debit', 'credit'])
+ tax_debit_sums = sum(record['debit'] for record in tax_id)
+ tax_credit_sums = sum(record['credit'] for record in tax_id)
+ if tax.type_tax_use == 'sale':
+ if comparison_number:
+ sale.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums, 2),
+ 'tax': round((tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'dynamic net': dynamic_total_net_sum,
+ 'dynamic tax': dynamic_total_tax_sum,
+ })
+ else:
+ sale.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums, 2),
+ 'tax': round((tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ })
+ elif tax.type_tax_use == 'purchase':
+ if comparison_number:
+ purchase.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums, 2),
+ 'tax': round((tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ 'dynamic net': dynamic_total_net_sum,
+ 'dynamic tax': dynamic_total_tax_sum,
+ })
+ else:
+ purchase.append({
+ 'name': tax.name,
+ 'amount': tax.amount,
+ 'net': round(tax_debit_sums + tax_credit_sums, 2),
+ 'tax': round((tax_debit_sums + tax_credit_sums) * (
+ tax.amount / 100), 2),
+ })
+ return {
+ 'dynamic_date_num': dynamic_date_num,
+ 'sale': sale,
+ 'purchase': purchase
+ }
+
+ @api.model
+ def get_month_name(self, date):
+ """
+ Retrieve the abbreviated name of the month for a given date.
+
+ :param date: The date for which to retrieve the month's abbreviated
+ name.
+ :type date: datetime.date
+ :return: Abbreviated name of the month (e.g., 'Jan', 'Feb', ..., 'Dec').
+ :rtype: str
+ """
+ month_names = calendar.month_abbr
+ return month_names[date.month]
+
+ @api.model
+ def get_xlsx_report(self, data, response, report_name, report_action):
+ """
+ Generate an XLSX report based on provided data and response stream.
+
+ Generates an Excel workbook with specified report format, including
+ subheadings,column headers, and row data for the given financial report
+ data.
+
+ :param str data: JSON-encoded data for the report.
+ :param response: Response object to stream the generated report.
+ :param str report_name: Name of the financial report.
+ """
+ data = json.loads(data)
+ output = io.BytesIO()
+ workbook = xlsxwriter.Workbook(output, {'in_memory': True})
+ sheet = workbook.add_worksheet()
+ sub_heading = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub = workbook.add_format(
+ {'align': 'left', 'bold': True, 'font_size': '10px',
+ 'border': 1,
+ 'border_color': 'black'})
+ side_heading_sub.set_indent(1)
+ txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
+ txt_name.set_indent(2)
+ sheet.set_column(0, 0, 30)
+ sheet.set_column(1, 1, 20)
+ sheet.set_column(2, 2, 15)
+ sheet.set_column(3, 3, 15)
+ col = 0
+ sheet.write('A3:b4', report_name, sub_heading)
+ sheet.write(5, col, '', sub_heading)
+ i = 1
+ for date_view in data['date_viewed']:
+ sheet.merge_range(5, col + i, 5, col + i + 1, date_view,
+ sub_heading)
+ i += 2
+ j = 1
+ prev_account = None
+ prev_tax = None
+ sheet.write(6, col, '', sub_heading)
+ for date in data['date_viewed']:
+ sheet.write(6, col + j, 'NET', sub_heading)
+ sheet.write(6, col + j + 1, 'TAX', sub_heading)
+ j += 1
+ sheet.write(7, col, 'Sales', sub_heading)
+ sheet.write(7, col + 1, ' ', sub_heading)
+ sheet.write(7, col + 2, data['sale_total'], sub_heading)
+ row = 8
+ for sale in data['data']['sale']:
+ if data['report_type']:
+ if list(data['report_type'].keys())[0] == 'account':
+ if prev_account != sale['account']:
+ prev_account = sale['account']
+ sheet.write(row, col, sale['account'], txt_name)
+ sheet.write(row, col + 1, '', txt_name)
+ sheet.write(row, col + 2, '', txt_name)
+ elif list(data['report_type'].keys())[0] == 'tax':
+ if prev_tax != sale['name']:
+ prev_tax = sale['name']
+ sheet.write(row, col, sale['name'] + '(' + str(
+ sale['amount']) + '%)', txt_name)
+ sheet.write(row, col + 1, '', txt_name)
+ sheet.write(row, col + 2, '', txt_name)
+ row += 1
+ if data['apply_comparison']:
+ if sale['dynamic net']:
+ periods = data['comparison_number_range']
+ for num in periods:
+ if sale['dynamic net'][
+ 'dynamic_total_net_sum' + str(num)]:
+ sheet.write(row, col + j, sale['dynamic net'][
+ 'dynamic_total_net_sum' + str(num)],
+ txt_name)
+ if sale['dynamic tax'][
+ 'dynamic_total_tax_sum' + str(num)]:
+ sheet.write(row, col, sale['dynamic tax'][
+ 'dynamic_total_tax_sum' + str(num)],
+ txt_name)
+ j += 1
+ j = 0
+ sheet.write(row, col + j, sale['name'], txt_name)
+ sheet.write(row, col + j + 1, sale['net'], txt_name)
+ sheet.write(row, col + j + 2, sale['tax'], txt_name)
+ else:
+ j = 0
+ sheet.write(row, col + j, sale['name'], txt_name)
+ sheet.write(row, col + j + 1, sale['net'], txt_name)
+ sheet.write(row, col + j + 2, sale['tax'], txt_name)
+ row += 1
+ row += 1
+ sheet.write(row, col, 'Purchase', sub_heading)
+ sheet.write(row, col + 1, ' ', sub_heading)
+ sheet.write(row, col + 2, data['purchase_total'], sub_heading)
+ row += 1
+ for purchase in data['data']['purchase']:
+ if data['report_type']:
+ if list(data['report_type'].keys())[0] == 'account':
+ if prev_account != purchase['account']:
+ prev_account = purchase['account']
+ sheet.write(row, col, purchase['account'], txt_name)
+ sheet.write(row, col + 1, '', txt_name)
+ sheet.write(row, col + 2, '', txt_name)
+ elif list(data['report_type'].keys())[0] == 'tax':
+ if prev_tax != purchase['name']:
+ prev_tax = purchase['name']
+ sheet.write(row, col, purchase['name'] + '(' + str(
+ purchase['amount']) + '%)', txt_name)
+ sheet.write(row, col + 1, '', txt_name)
+ sheet.write(row, col + 2, '', txt_name)
+ row += 1
+ if data['apply_comparison']:
+ if purchase['dynamic net']:
+ periods = data['comparison_number_range']
+ for num in periods:
+ if purchase['dynamic net'][
+ 'dynamic_total_net_sum' + str(num)]:
+ sheet.write(row, col + j,
+ purchase['dynamic net'][
+ 'dynamic_total_net_sum' + str(
+ num)],
+ txt_name)
+ if purchase['dynamic tax'][
+ 'dynamic_total_tax_sum' + str(num)]:
+ sheet.write(row, col, purchase['dynamic tax'][
+ 'dynamic_total_tax_sum' + str(num)],
+ txt_name)
+ j += 1
+ j = 0
+ sheet.write(row, col + j, purchase['name'], txt_name)
+ sheet.write(row, col + j + 1, purchase['net'], txt_name)
+ sheet.write(row, col + j + 2, purchase['tax'], txt_name)
+ else:
+ j = 0
+ sheet.write(row, col + j, purchase['name'], txt_name)
+ sheet.write(row, col + j + 1, purchase['net'], txt_name)
+ sheet.write(row, col + j + 2, purchase['tax'], txt_name)
+ row += 1
+ row += 1
+ sheet.write(row, col, 'Purchase', sub_heading)
+ sheet.write(row, col + 1, ' ', sub_heading)
+ sheet.write(row, col + 2, data['purchase_total'], sub_heading)
+ row += 1
+ workbook.close()
+ output.seek(0)
+ response.stream.write(output.read())
+ output.close()
diff --git a/third_party_addons/dynamic_accounts_report/report/aged_payable_templates.xml b/third_party_addons/dynamic_accounts_report/report/aged_payable_templates.xml
new file mode 100644
index 000000000..117ff395b
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/aged_payable_templates.xml
@@ -0,0 +1,278 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date Range
+ Partner
+
+
+
+
+
+
+
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Invoice Date
+ Amount Currency
+
+ Currency
+ Account
+ Expected Date
+ At Date
+ 1-30
+ 31-60
+ 61-90
+ 91-120
+ Older
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/report/aged_receivable_templates.xml b/third_party_addons/dynamic_accounts_report/report/aged_receivable_templates.xml
new file mode 100644
index 000000000..499cd14e6
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/aged_receivable_templates.xml
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date Range
+ Partner
+
+
+
+
+
+
+
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Invoice Date
+ Amount Currency
+
+ Currency
+ Account
+ Expected Date
+
+ At Date
+ 1-30
+ 31-60
+ 61-90
+ 91-120
+ Older
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/report/balance_sheet_report_templates.xml b/third_party_addons/dynamic_accounts_report/report/balance_sheet_report_templates.xml
new file mode 100644
index 000000000..b7d5117ac
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/balance_sheet_report_templates.xml
@@ -0,0 +1,922 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balance
+
+
+
+
+
+
+
+
+
+ ASSETS
+
+
+
+
+
+
+
+ Current Assets
+
+
+
+
+
+
+ Bank and Cash
+ Accounts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Receivables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Current
+ Assets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prepayments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Current Assets
+
+
+
+
+
+
+
+
+
+
+
+
+ Plus Fixed
+ Assets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Plus
+ Non-current Assets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Assets
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LIABILITIES
+
+
+
+
+
+
+
+ Current Liabilities
+
+
+
+
+
+
+ Current
+ Liabilities
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Payables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Current Liabilities
+
+
+
+
+
+
+
+
+
+
+
+
+ Plus
+ Non-current Liabilities
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total LIABILITIES
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EQUITY
+
+
+
+
+
+
+
+ Unallocated Earnings
+
+
+
+
+
+
+ Current
+ Earnings
+
+
+
+
+
+
+
+
+
+
+
+
+ Current
+ Allocated Earnings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Unallocated Earnings
+
+
+
+
+
+
+
+
+
+
+
+
+ Retained
+ Earnings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total EQUITY
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LIABILITIES + EQUITY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/report/bank_book_templates.xml b/third_party_addons/dynamic_accounts_report/report/bank_book_templates.xml
new file mode 100644
index 000000000..8505880e4
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/bank_book_templates.xml
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date Range
+ Partner
+ Account
+ Options
+
+
+
+
+
+
+
+ to
+
+
+
+
+
+
+ ,
+
+
+
+
+
+ ,
+
+
+
+
+
+ Posted,
+
+ ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Journal
+ Partner
+ Reference
+ Move
+ Entry label
+
+ Debit
+
+
+ Credit
+
+
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/report/financial_report_template.xml b/third_party_addons/dynamic_accounts_report/report/financial_report_template.xml
new file mode 100644
index 000000000..5d8233f00
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/financial_report_template.xml
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date Range
+ Comparison
+ Account
+ Journal
+ Analytic Account
+ Target move
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balance
+
+
+
+
+
+
+
+
+ Net Profit
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Income
+
+
+
+
+
+
+ Gross Profit
+
+
+
+
+
+ Operating Income
+
+
+
+
+
+
+
+
+
+
+
+ Cost of
+ Revenue
+
+
+
+
+
+
+
+
+
+
+
+
+ Other Income
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Income
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Expenses
+
+
+
+
+
+ Expenses
+
+
+
+
+
+
+
+
+
+
+
+ Depreciation
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Expenses
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/report/financial_reports_views.xml b/third_party_addons/dynamic_accounts_report/report/financial_reports_views.xml
new file mode 100644
index 000000000..4133de75a
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/financial_reports_views.xml
@@ -0,0 +1,76 @@
+
+
+
+
+ Profit And Loss
+ dynamic.balance.sheet.report
+ qweb-pdf
+ dynamic_accounts_report.profit_loss
+ dynamic_accounts_report.profit_loss
+
+
+
+ Balance Sheet
+ dynamic.balance.sheet.report
+ qweb-pdf
+ dynamic_accounts_report.balance_sheet
+ dynamic_accounts_report.balance_sheet
+
+
+
+ Partner Ledger
+ account.partner.ledger
+ qweb-pdf
+ dynamic_accounts_report.partner_ledger
+ dynamic_accounts_report.partner_ledger
+
+
+
+ General Ledger
+ account.general.ledger
+ qweb-pdf
+ dynamic_accounts_report.general_ledger
+ dynamic_accounts_report.general_ledger
+
+
+
+ Bank Book
+ bank.book.report
+ qweb-pdf
+ dynamic_accounts_report.bank_book
+ dynamic_accounts_report.bank_book
+
+
+
+ Age Receivable
+ age.receivable.report
+ qweb-pdf
+ dynamic_accounts_report.aged_receivable
+ dynamic_accounts_report.aged_receivable
+
+
+
+ Age Payable
+ age.payable.report
+ qweb-pdf
+ dynamic_accounts_report.aged_payable
+ dynamic_accounts_report.aged_payable
+
+
+
+ Trial Balance
+ account.trial.balance
+ qweb-pdf
+ dynamic_accounts_report.trial_balance
+ dynamic_accounts_report.trial_balance
+
+ report
+
+
+ Tax Report
+ tax.report
+ qweb-pdf
+ dynamic_accounts_report.tax_report
+ dynamic_accounts_report.tax_report
+
+
diff --git a/third_party_addons/dynamic_accounts_report/report/general_ledger_templates.xml b/third_party_addons/dynamic_accounts_report/report/general_ledger_templates.xml
new file mode 100644
index 000000000..d56dce9e0
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/general_ledger_templates.xml
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date Range
+ Journal
+ Analytic
+ Options
+
+
+
+
+
+
+
+ to
+
+
+
+
+
+
+ ,
+
+
+
+
+
+
+
+ ,
+
+
+
+
+
+
+ Posted ,
+
+
+ Posted
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date
+ Communication
+
+ Partner
+ Debit
+ Credit
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unknown
+ Account
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/report/partner_ledger_templates.xml b/third_party_addons/dynamic_accounts_report/report/partner_ledger_templates.xml
new file mode 100644
index 000000000..a40ebd282
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/partner_ledger_templates.xml
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date Range
+ Partner
+ Account
+ Options
+
+
+
+
+
+
+
+ to
+
+
+
+
+
+
+ ,
+
+
+
+
+ ,
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JRNL
+ Account
+ Ref
+ Due Date
+ Matching Number
+
+ Debit
+ Credit
+ Amount Currency
+
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unknown
+ Partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/report/tax_report_templates.xml b/third_party_addons/dynamic_accounts_report/report/tax_report_templates.xml
new file mode 100644
index 000000000..29360d996
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/tax_report_templates.xml
@@ -0,0 +1,308 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date Range
+ Comparison
+ Options
+ Report
+
+
+
+
+
+
+
+ to
+
+
+
+
+
+
+ :
+
+
+
+
+
+ ,
+
+
+
+
+ Account
+
+
+ Tax
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NET
+ TAX
+
+
+
+ NET
+ TAX
+
+
+
+
+
+
+
+
+
+
+ Sales
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+ %)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+ %)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+ %)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+ %)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/report/trial_balance.xml b/third_party_addons/dynamic_accounts_report/report/trial_balance.xml
new file mode 100644
index 000000000..45c470aa7
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/report/trial_balance.xml
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date Range
+ Comparison
+ Account
+ Journal
+ Options
+
+
+
+
+
+
+
+ to
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+ ,
+
+
+
+
+
+ ,
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Initial Balance
+
+
+
+
+
+ End Balance
+
+
+
+ Debit
+ Credit
+ Debit
+ Credit
+ Debit
+ Credit
+
+
+
+ Debit
+ Credit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/third_party_addons/dynamic_accounts_report/security/ir.model.access.csv b/third_party_addons/dynamic_accounts_report/security/ir.model.access.csv
new file mode 100644
index 000000000..efcbfea5e
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/security/ir.model.access.csv
@@ -0,0 +1,6 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_account_general_ledger,access.account.general.ledger,model_account_general_ledger,account.group_account_user,1,1,1,1
+access_account_trial_balance,access.account.trial.balance,model_account_trial_balance,account.group_account_user,1,1,1,1
+access_cash_book_report,access.cash.book.report,model_cash_book_report,account.group_account_user,1,1,1,1
+access_dynamic_balance_sheet_report,access.dynamic.balance.sheet.report,model_dynamic_balance_sheet_report,account.group_account_user,1,1,1,1
+access_account_partner_ledger,access.account.partner.ledger,model_account_partner_ledger,account.group_account_user,1,1,1,1
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/cybro-icon.png b/third_party_addons/dynamic_accounts_report/static/description/assets/cybro-icon.png
new file mode 100644
index 000000000..06e73e11d
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/cybro-icon.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/cybro-odoo.png b/third_party_addons/dynamic_accounts_report/static/description/assets/cybro-odoo.png
new file mode 100644
index 000000000..ed02e07a4
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/cybro-odoo.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/h2.png b/third_party_addons/dynamic_accounts_report/static/description/assets/h2.png
new file mode 100644
index 000000000..0bfc4707d
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/h2.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/arrows-repeat.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/arrows-repeat.svg
new file mode 100644
index 000000000..1d7efabc5
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/arrows-repeat.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-1.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-1.png
new file mode 100644
index 000000000..c180db172
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-1.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-2.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-2.svg
new file mode 100644
index 000000000..e606d97d9
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-2.svg
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-bg.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-bg.png
new file mode 100644
index 000000000..a8238d3c0
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-bg.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-bg.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-bg.svg
new file mode 100644
index 000000000..b1378103e
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-bg.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-call.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-call.svg
new file mode 100644
index 000000000..96c687e81
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-call.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-mail.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-mail.svg
new file mode 100644
index 000000000..cbf0d158d
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-mail.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-pattern.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-pattern.svg
new file mode 100644
index 000000000..9c1c7e101
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-pattern.svg
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-promo.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-promo.svg
new file mode 100644
index 000000000..d52791b11
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/banner-promo.svg
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/brand-pair.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/brand-pair.svg
new file mode 100644
index 000000000..d8db7fc1e
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/brand-pair.svg
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/check.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/check.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/chevron.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/chevron.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/close-icon.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/close-icon.svg
new file mode 100644
index 000000000..df8cce37a
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/close-icon.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/cogs.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/cogs.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/collabarate-icon.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/collabarate-icon.svg
new file mode 100644
index 000000000..dd4e10518
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/collabarate-icon.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/consultation.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/consultation.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/cybro-logo.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/cybro-logo.png
new file mode 100644
index 000000000..ff4b78220
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/cybro-logo.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/down.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/down.svg
new file mode 100644
index 000000000..f21c36271
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/ecom-black.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/ecom-black.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/education-black.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/education-black.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/faq.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/faq.png
new file mode 100644
index 000000000..4250b5b81
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/faq.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/feature-icon.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/feature-icon.svg
new file mode 100644
index 000000000..fa0ea6850
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/feature-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/feature.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/feature.png
new file mode 100644
index 000000000..ac7a785c0
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/feature.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/gear.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/gear.svg
new file mode 100644
index 000000000..0cc66b6ea
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/gear.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/hero.gif b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/hero.gif
new file mode 100644
index 000000000..380654dfe
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/hero.gif differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/hire-odoo.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/hire-odoo.svg
new file mode 100644
index 000000000..e1ac089b0
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/hire-odoo.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/hotel-black.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/hotel-black.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/license.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/license.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/life-ring-icon.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/life-ring-icon.svg
new file mode 100644
index 000000000..3ae6e1d89
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/life-ring-icon.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/lifebuoy.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/lifebuoy.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/mail.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/mail.svg
new file mode 100644
index 000000000..1eedde695
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/mail.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/manufacturing-black.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/manufacturing-black.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/notes.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/notes.png
new file mode 100644
index 000000000..ee5e95404
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/notes.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/notification icon.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/notification icon.svg
new file mode 100644
index 000000000..053189973
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/notification icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/odoo-consultancy.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/odoo-consultancy.svg
new file mode 100644
index 000000000..e05f65bde
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/odoo-consultancy.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/odoo-licencing.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/odoo-licencing.svg
new file mode 100644
index 000000000..2606c88b0
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/odoo-licencing.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/odoo-logo.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/odoo-logo.png
new file mode 100644
index 000000000..0e4d0eb5a
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/odoo-logo.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/patter.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/patter.svg
new file mode 100644
index 000000000..25c9c0a8f
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/patter.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/pattern1.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/pattern1.png
new file mode 100644
index 000000000..09ab0fb2d
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/pattern1.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/pos-black.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/pos-black.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/puzzle-piece-icon.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/puzzle-piece-icon.svg
new file mode 100644
index 000000000..3e9ad9373
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/puzzle-piece-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/puzzle.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/puzzle.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/replace-icon.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/replace-icon.svg
new file mode 100644
index 000000000..d0e3a7af1
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/replace-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/restaurant-black.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/restaurant-black.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/screenshot-main.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/screenshot-main.png
new file mode 100644
index 000000000..575f8e676
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/screenshot-main.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/screenshot.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/screenshot.png
new file mode 100644
index 000000000..cef272529
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/screenshot.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/service-black.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/service-black.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/skype-fill.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/skype-fill.svg
new file mode 100644
index 000000000..c17423639
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/skype-fill.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/skype.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/skype.png
new file mode 100644
index 000000000..51b409fb3
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/skype.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/skype.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/skype.svg
new file mode 100644
index 000000000..df3dad39b
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/skype.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/star-1.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/star-1.svg
new file mode 100644
index 000000000..7e55ab162
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/star-1.svg
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/star-2.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/star-2.svg
new file mode 100644
index 000000000..5ae9f507a
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/star-2.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/support.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/support.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/test-1 - Copy.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/test-1 - Copy.png
new file mode 100644
index 000000000..f6a902663
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/test-1 - Copy.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/test-1.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/test-1.png
new file mode 100644
index 000000000..0908add2b
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/test-1.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/test-2.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/test-2.png
new file mode 100644
index 000000000..4671fe91e
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/test-2.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/trading-black.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/trading-black.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/training.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/training.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/translate.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/translate.svg
new file mode 100644
index 000000000..af9c8a1aa
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/translate.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/update.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/update.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/user.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/user.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/video.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/video.png
new file mode 100644
index 000000000..576705b17
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/video.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/whatsapp.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/whatsapp.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/wrench-icon.svg b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/wrench-icon.svg
new file mode 100644
index 000000000..174b5a465
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/wrench-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/icons/wrench.png b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/icons/wrench.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/modules/1.gif b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/1.gif
new file mode 100644
index 000000000..ae3a880a2
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/1.gif differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/modules/2.gif b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/2.gif
new file mode 100644
index 000000000..d19e2b352
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/2.gif differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/modules/3.png b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/3.png
new file mode 100644
index 000000000..8513873ea
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/3.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/modules/4.png b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/4.png
new file mode 100644
index 000000000..3bedf7981
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/4.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/modules/5.png b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/5.png
new file mode 100644
index 000000000..0e311ca87
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/5.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/modules/6.jpg b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/6.jpg
new file mode 100644
index 000000000..67c7f7062
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/modules/6.jpg differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/1.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/1.png
new file mode 100644
index 000000000..6b2c895f9
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/1.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/10.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/10.png
new file mode 100644
index 000000000..a10efbc1f
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/10.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/11.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/11.png
new file mode 100644
index 000000000..d870fb625
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/11.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/12.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/12.png
new file mode 100644
index 000000000..c5d320324
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/12.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/13.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/13.png
new file mode 100644
index 000000000..cbd830db3
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/13.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/14.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/14.png
new file mode 100644
index 000000000..efa4a5913
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/14.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/15.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/15.png
new file mode 100644
index 000000000..ba33167b3
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/15.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/16.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/16.png
new file mode 100644
index 000000000..a1102cb38
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/16.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/17.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/17.png
new file mode 100644
index 000000000..dcbfa4496
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/17.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/18.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/18.png
new file mode 100644
index 000000000..9251cbe02
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/18.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/19.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/19.png
new file mode 100644
index 000000000..6f596e897
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/19.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/2.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/2.png
new file mode 100644
index 000000000..2566f161b
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/2.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/20.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/20.png
new file mode 100644
index 000000000..9bedb7a28
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/20.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/21.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/21.png
new file mode 100644
index 000000000..9753a36a2
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/21.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/22.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/22.png
new file mode 100644
index 000000000..d5726c455
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/22.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/23.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/23.png
new file mode 100644
index 000000000..15c9f0823
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/23.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/24.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/24.png
new file mode 100644
index 000000000..c7e14bc35
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/24.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/25.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/25.png
new file mode 100644
index 000000000..4bf610612
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/25.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/26.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/26.png
new file mode 100644
index 000000000..1e8ac14ee
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/26.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/27.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/27.png
new file mode 100644
index 000000000..2a4a4de54
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/27.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/28.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/28.png
new file mode 100644
index 000000000..8d67fac9a
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/28.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/29.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/29.png
new file mode 100644
index 000000000..f6d7ac085
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/29.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/3.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/3.png
new file mode 100644
index 000000000..71f322ece
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/3.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/30.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/30.png
new file mode 100644
index 000000000..7138d400b
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/30.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/31.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/31.png
new file mode 100644
index 000000000..30aec39aa
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/31.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/32.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/32.png
new file mode 100644
index 000000000..5e21565d4
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/32.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/33.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/33.png
new file mode 100644
index 000000000..abcc3ab2a
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/33.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/34.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/34.png
new file mode 100644
index 000000000..32de54863
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/34.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/35.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/35.png
new file mode 100644
index 000000000..cd8a6bb41
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/35.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/36.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/36.png
new file mode 100644
index 000000000..a093775af
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/36.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/37.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/37.png
new file mode 100644
index 000000000..81bae3e6e
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/37.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/38.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/38.png
new file mode 100644
index 000000000..ba1fdb058
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/38.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/39.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/39.png
new file mode 100644
index 000000000..9c0313cd4
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/39.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/4.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/4.png
new file mode 100644
index 000000000..d99022771
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/4.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/40.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/40.png
new file mode 100644
index 000000000..04dd7ae08
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/40.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/41.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/41.png
new file mode 100644
index 000000000..23e82d765
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/41.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/42.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/42.png
new file mode 100644
index 000000000..8a1765a7f
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/42.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/43.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/43.png
new file mode 100644
index 000000000..ff75e1278
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/43.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/44.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/44.png
new file mode 100644
index 000000000..697674965
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/44.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/45.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/45.png
new file mode 100644
index 000000000..e1895cdce
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/45.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/46.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/46.png
new file mode 100644
index 000000000..1c74287df
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/46.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/47.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/47.png
new file mode 100644
index 000000000..5a673f4ac
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/47.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/48.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/48.png
new file mode 100644
index 000000000..22ceb2d44
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/48.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/49.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/49.png
new file mode 100644
index 000000000..a20295e0b
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/49.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/5.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/5.png
new file mode 100644
index 000000000..d6c0e12f7
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/5.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/50.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/50.png
new file mode 100644
index 000000000..d93c5c4a9
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/50.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/51.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/51.png
new file mode 100644
index 000000000..f9c2b1d28
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/51.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/6.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/6.png
new file mode 100644
index 000000000..299397899
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/6.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/7.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/7.png
new file mode 100644
index 000000000..7258f8231
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/7.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/8.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/8.png
new file mode 100644
index 000000000..af709dc78
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/8.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/9.png b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/9.png
new file mode 100644
index 000000000..949756f9f
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/9.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/hero.gif b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..8d013d228
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/screenshots/hero.gif differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/assets/y18.jpg b/third_party_addons/dynamic_accounts_report/static/description/assets/y18.jpg
new file mode 100644
index 000000000..eea1714f2
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/assets/y18.jpg differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/banner.png b/third_party_addons/dynamic_accounts_report/static/description/banner.png
new file mode 100644
index 000000000..00ebf54ad
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/banner.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/icon.png b/third_party_addons/dynamic_accounts_report/static/description/icon.png
new file mode 100644
index 000000000..5b5c45e0f
Binary files /dev/null and b/third_party_addons/dynamic_accounts_report/static/description/icon.png differ
diff --git a/third_party_addons/dynamic_accounts_report/static/description/index.html b/third_party_addons/dynamic_accounts_report/static/description/index.html
new file mode 100644
index 000000000..858e64e33
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/description/index.html
@@ -0,0 +1,2114 @@
+
+
+
+
+
+ Odoo18 Dynamic Accounting Reports
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dynamic Reports for Trial Balance, Profit and
+ Loss, General Ledger, Tax Report, etc.
+
+
Odoo18 Dynamic Accounting Reports
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Key
+ Highlights
+
+
+
+
+
+
+
+ Various Filters to Compare
+
+
+ Option to compare report values with various
+ filtering tools available.
+
+
+
+
+
+
+
+
+ Print reports in PDF and XLSX Format
+
+
+ You can print the reports in both the PDF
+ and XLSX format.
+
+
+
+
+
+
+
+
+ Access the Journal Entries
+
+
+ Easy access to the corresponding journal
+ entries directly from the dynamic report
+ view.
+
+
+
+
+
+
+
+
+ Drill-down Approach in Reports
+
+
+ The user can drill down from the main report
+ to the journal entries. You can open the
+ form view of each journal entry and view the
+ complete details here.
+
+
+
+
+
+
+
+
+
Odoo18 Dynamic Accounting Reports
+
+ Are you ready to make your business more
+ organized?
+ Improve now!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dynamic Financial Reports Menu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ General Ledger Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ General Ledger Drill-Down View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Option to View Journal Entry in
+ General Ledger
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ General Ledger Journal Entry
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Trial Balance Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ General Ledger view from Trial
+ Balance.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Trial Balance PDF Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Trial Balance Excel Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balance sheet Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balance Sheet Drill-Down View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ General Ledger from Balance
+ Sheet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balance Sheet PDF Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balance Sheet Excel Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Profit and Loss Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Profit and Loss Drill-Down View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ General Ledger from Profit and
+ Loss
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Profit and Loss PDF Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Profit and Loss Excel Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Partner Ledger Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Partner Ledger Drill-Down View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open the corresponding partner
+ by clicking Open
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open the corresponding Jornal
+ Items by clicking Jornal Items
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Partner Ledger PDF Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Partner Ledger Excel Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Receivable Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Receivable Drill-Down View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open the corresponding partner
+ by clicking Open
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open the Jornal Items by
+ clicking Jornal Items
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Receivable PDF Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Receivable Excel Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Payable Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Payable Drill-Down View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open the corresponding partner
+ by clicking Open
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open the Jornal Items by
+ clicking Jornal Items
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Payable PDF Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aged Payable Excel Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cash Book Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cash Book Drill-Down View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cash Book PDF Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cash Book Excel Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bank Book Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bank Book Drill-Down View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bank Book PDF Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bank Book Excel Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tax Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tax PDF Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tax Excel Report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Various Filters to Compare.
+
+
+
+
+
+
+
+
+
+
+
+
+ Print reports in PDF Format.
+
+
+
+
+
+
+
+
+
+
+
+ Print reports in XLSX Format.
+
+
+
+
+
+
+
+
+
+
+
+ Access the Journal Entries.
+
+
+
+
+
+
+
+
+
+
+
+ Drill-down Approach in Reports.
+
+
+
+
+
+
+
+
+
+
+
+
+ Real-Time Data Updates.
+
+
+
+
+
+
+
+
+
+
+
+
+ Latest Release 18.0.1.0.0
+
+
+ 16th October, 2024
+
+
+
+
+
+
+
+
+
+
+
+
Related Modules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/css/accounts_report.css b/third_party_addons/dynamic_accounts_report/static/src/css/accounts_report.css
new file mode 100644
index 000000000..583bc064c
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/css/accounts_report.css
@@ -0,0 +1,11 @@
+.report-filter-button {
+ background-color: #dfdada;
+ border: 0.1px solid #f4efef;
+ padding: 2px;
+ margin-top: 2px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/aged_payable_report.js b/third_party_addons/dynamic_accounts_report/static/src/js/aged_payable_report.js
new file mode 100644
index 000000000..819001dcb
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/aged_payable_report.js
@@ -0,0 +1,313 @@
+/** @odoo-module */
+const { Component } = owl;
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState } from "@odoo/owl";
+import { BlockUI,unblockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+const actionRegistry = registry.category("actions");
+const today = luxon.DateTime.now();
+
+class AgedPayable extends owl.Component {
+ async setup() {
+ super.setup(...arguments);
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.tbody = useRef('tbody');
+ this.date_range = useRef('date_to');
+ this.unfoldButton = useRef('unfoldButton');
+ this.state = useState({
+ move_line: null,
+ data: null,
+ total: null,
+ currency: null,
+ total_credit: null,
+ diff0_sum: null,
+ diff1_sum: null,
+ diff2_sum: null,
+ diff3_sum: null,
+ diff4_sum: null,
+ diff5_sum: null,
+ selected_partner: [],
+ selected_partner_rec: [],
+ });
+ this.load_data(self.initial_render = true);
+ }
+ async load_data() {
+ /**
+ * Loads the data for the aged payable report.
+ */
+ let move_line_list = []
+ let move_lines_total = ''
+ let diff0Sum = 0;
+ let diff1Sum = 0;
+ let diff2Sum = 0;
+ let diff3Sum = 0;
+ let diff4Sum = 0;
+ let diff5Sum = 0;
+ let TotalCredit = 0;
+ let currency;
+ var self = this;
+ var action_title = self.props.action.display_name;
+ try {
+ var self = this;
+ self.state.data = await self.orm.call("age.payable.report", "view_report", []);
+ for (const index in self.state.data) {
+ const value = self.state.data[index];
+ if (index !== 'partner_totals') {
+ move_line_list.push(index);
+ } else {
+ move_lines_total = value;
+
+ for (const moveLine of Object.values(move_lines_total)) {
+ currency = moveLine.currency_id;
+ diff0Sum += moveLine.diff0_sum || 0;
+ diff1Sum += moveLine.diff1_sum || 0;
+ diff2Sum += moveLine.diff2_sum || 0;
+ diff3Sum += moveLine.diff3_sum || 0;
+ diff4Sum += moveLine.diff4_sum || 0;
+ diff5Sum += moveLine.diff5_sum || 0;
+ TotalCredit += moveLine.credit_sum || 0;
+ }
+ }
+ }
+ self.state.move_line = move_line_list
+ self.state.total = move_lines_total
+ self.state.currency = currency
+ self.state.total_credit = TotalCredit
+ self.state.diff0_sum = diff0Sum
+ self.state.diff1_sum = diff1Sum
+ self.state.diff2_sum = diff2Sum
+ self.state.diff3_sum = diff3Sum
+ self.state.diff4_sum = diff4Sum
+ self.state.diff5_sum = diff5Sum
+ }
+ catch (el) {
+ window.location.href;
+ }
+ }
+ gotoJournalEntry(ev) {
+ /**
+ * Navigates to the journal entry form view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move',
+ res_id: parseInt(ev.target.attributes["data-id"].value, 10),
+ views: [[false, "form"]],
+ target: "current",
+ });
+ }
+ gotoJournalItem(ev) {
+ /**
+ * Navigates to the journal items list view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move.line',
+ name: "Journal Items",
+ views: [[false, "list"]],
+ domain: [["partner_id", "=", parseInt(ev.target.attributes["data-id"].value, 10)], ['account_type', 'in', ['liability_payable']]],
+ target: "current",
+ });
+ }
+ openPartner(ev) {
+ /**
+ * Opens the partner form view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'res.partner',
+ res_id: parseInt(ev.target.attributes["data-id"].value, 10),
+ views: [[false, "form"]],
+ target: "current",
+ });
+ }
+ async unfoldAll(ev) {
+ /**
+ * Unfolds all items in the table body if the event target does not have the 'selected-filter' class,
+ * or folds all items if the event target has the 'selected-filter' class.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ if (!ev.target.classList.contains("selected-filter")) {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.add('show')
+ }
+ ev.target.classList.add("selected-filter");
+ } else {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.remove('show')
+ }
+ ev.target.classList.remove("selected-filter");
+ }
+ }
+ async printPdf(ev) {
+ /**
+ * Generates and displays a PDF report for the aged payable.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ ev.preventDefault();
+ var self = this;
+ var action_title = self.props.action.display_name;
+ let totals = {
+ 'diff0_sum':this.state.diff0_sum,
+ 'diff1_sum':this.state.diff1_sum,
+ 'diff2_sum':this.state.diff2_sum,
+ 'diff3_sum':this.state.diff3_sum,
+ 'diff4_sum':this.state.diff4_sum,
+ 'diff5_sum':this.state.diff5_sum,
+ 'total_credit':this.state.total_credit,
+ 'currency':this.state.currency,
+ }
+ return self.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.aged_payable',
+ 'report_file': 'dynamic_accounts_report.aged_payable',
+ 'data': {
+ 'move_lines': self.state.move_line,
+ 'data': self.state.data,
+ 'total': self.state.total,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ 'title': action_title,
+ 'report_name': self.props.action.display_name
+ },
+ 'display_name': self.props.action.display_name,
+ });
+ }
+ filter() {
+ let filters = {
+ 'partner': this.state.selected_partner_rec,
+ 'end_date': this.date_range.el.value,
+ };
+ return filters
+ }
+ async print_xlsx() {
+ /**
+ * Generates and downloads an XLSX report for the aged payable.
+ */
+ var self = this;
+ var action_title = self.props.action.display_name;
+ let totals = {
+ 'diff0_sum':this.state.diff0_sum,
+ 'diff1_sum':this.state.diff1_sum,
+ 'diff2_sum':this.state.diff2_sum,
+ 'diff3_sum':this.state.diff3_sum,
+ 'diff4_sum':this.state.diff4_sum,
+ 'diff5_sum':this.state.diff5_sum,
+ 'total_credit':this.state.total_credit,
+ }
+ var datas = {
+ 'move_lines': self.state.move_line,
+ 'data': self.state.data,
+ 'total': self.state.total,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ 'title': action_title,
+ }
+ var action = {
+ 'data': {
+ 'model': 'age.payable.report',
+ 'data': JSON.stringify(datas),
+ 'output_format': 'xlsx',
+ 'report_action': self.props.action.xml_id,
+ 'report_name': action_title,
+ },
+ };
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ async applyFilter(ev, e, is_delete = false) {
+ /**
+ * Applies a filter to retrieve data based on the selected date range and partner(s).
+ *
+ * @param {Event} ev - The event object triggered when the filter is applied.
+ * @param {Event} e - The event object containing input data.
+ * @param {boolean} is_delete - Indicates if the filter is being deleted.
+ * (Default is `false` when not provided explicitly).
+ *
+ * @returns {Promise} - A Promise that resolves after fetching and processing the filtered data.
+ */
+ let move_line_list = []
+ let move_lines_total = ''
+ let diff0Sum = 0;
+ let diff1Sum = 0;
+ let diff2Sum = 0;
+ let diff3Sum = 0;
+ let diff4Sum = 0;
+ let diff5Sum = 0;
+ let TotalCredit = 0;
+ if (ev.target && ev.target.attributes["data-value"]) {
+ if (ev.target.attributes["data-value"].value == 'today') {
+ this.date_range.el.value = today.toFormat('yyyy-MM-dd')
+ } else if (ev.target.attributes["data-value"].value == 'last-month-end') {
+ this.date_range.el.value = today.startOf('month').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ } else if (ev.target.attributes["data-value"].value == 'last-quarter-end') {
+ this.date_range.el.value = today.startOf('quarter').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ } else if (ev.target.attributes["data-value"].value == 'last-year-end') {
+ this.date_range.el.value = today.startOf('year').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ }
+ } else if (e && e.input && e.input.attributes.placeholder.value == 'Partner' && !is_delete) {
+ this.state.selected_partner.push(ev[0].id)
+ this.state.selected_partner_rec.push(ev[0])
+ } else if (is_delete) {
+ let index = this.state.selected_partner_rec.indexOf(ev)
+ this.state.selected_partner_rec.splice(index, 1)
+ this.state.selected_partner = this.state.selected_partner_rec.map((rec) => rec.id)
+ }
+ let filtered_data = await this.orm.call("age.payable.report", "get_filter_values", [this.date_range.el.value, this.state.selected_partner,]);
+ for (const index in filtered_data) {
+ const value = filtered_data[index];
+
+ if (index !== 'partner_totals') {
+ move_line_list.push(index);
+ } else {
+ move_lines_total = value;
+
+ for (const moveLine of Object.values(move_lines_total)) {
+ diff0Sum += moveLine.diff0_sum || 0;
+ diff1Sum += moveLine.diff1_sum || 0;
+ diff2Sum += moveLine.diff2_sum || 0;
+ diff3Sum += moveLine.diff3_sum || 0;
+ diff4Sum += moveLine.diff4_sum || 0;
+ diff5Sum += moveLine.diff5_sum || 0;
+ TotalCredit += moveLine.credit_sum || 0;
+ }
+ }
+ }
+ this.state.data = filtered_data
+ this.state.move_line = move_line_list
+ this.state.total = move_lines_total
+ this.state.total_credit = TotalCredit
+ this.state.diff0_sum = diff0Sum
+ this.state.diff1_sum = diff1Sum
+ this.state.diff2_sum = diff2Sum
+ this.state.diff3_sum = diff3Sum
+ this.state.diff4_sum = diff4Sum
+ this.state.diff5_sum = diff5Sum
+ }
+ getDomain() {
+ return [];
+ }
+}
+AgedPayable.template = 'age_p_template_new';
+actionRegistry.add("age_p", AgedPayable);
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/aged_receivable_report.js b/third_party_addons/dynamic_accounts_report/static/src/js/aged_receivable_report.js
new file mode 100644
index 000000000..32bf41062
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/aged_receivable_report.js
@@ -0,0 +1,318 @@
+/** @odoo-module */
+const { Component } = owl;
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState } from "@odoo/owl";
+import { BlockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+import { formatFloat } from "@web/core/utils/numbers";
+const actionRegistry = registry.category("actions");
+const today = luxon.DateTime.now();
+
+class AgedReceivable extends owl.Component {
+ async setup() {
+ super.setup(...arguments);
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.tbody = useRef('tbody');
+ this.date_range = useRef('date_to');
+ this.unfoldButton = useRef('unfoldButton');
+ this.state = useState({
+ move_line: null,
+ data: null,
+ total: null,
+ currency: null,
+ total_debit: null,
+ diff0_sum: null,
+ diff1_sum: null,
+ diff2_sum: null,
+ diff3_sum: null,
+ diff4_sum: null,
+ diff5_sum: null,
+ selected_partner: [],
+ selected_partner_rec: [],
+ });
+ this.load_data(self.initial_render = true);
+ }
+ async load_data() {
+ /**
+ * Loads the data for the bank book report.
+ */
+ let move_line_list = [];
+ let move_lines_total = '';
+ let diff0Sum = 0;
+ let diff1Sum = 0;
+ let diff2Sum = 0;
+ let diff3Sum = 0;
+ let diff4Sum = 0;
+ let diff5Sum = 0;
+ let TotalDebit = 0;
+ let currency;
+ var self = this;
+ var action_title = self.props.action.display_name;
+ try {
+ self.state.data = await self.orm.call("age.receivable.report", "view_report", []);
+ for (const index in self.state.data) {
+ const value = self.state.data[index];
+ if (index !== 'partner_totals') {
+ move_line_list.push(index);
+ } else {
+ move_lines_total = value;
+ for (const moveLine of Object.values(move_lines_total)) {
+ currency = moveLine.currency_id;
+ // Use raw values for summation
+ diff0Sum += moveLine.diff0_sum || 0;
+ diff1Sum += moveLine.diff1_sum || 0;
+ diff2Sum += moveLine.diff2_sum || 0;
+ diff3Sum += moveLine.diff3_sum || 0;
+ diff4Sum += moveLine.diff4_sum || 0;
+ diff5Sum += moveLine.diff5_sum || 0;
+ TotalDebit += moveLine.debit_sum || 0;
+ }
+ }
+ }
+ self.state.move_line = move_line_list;
+ self.state.total = move_lines_total;
+ self.state.currency = currency;
+ self.state.total_debit = TotalDebit;
+ self.state.diff0_sum = diff0Sum;
+ self.state.diff1_sum = diff1Sum;
+ self.state.diff2_sum = diff2Sum;
+ self.state.diff3_sum = diff3Sum;
+ self.state.diff4_sum = diff4Sum;
+ self.state.diff5_sum = diff5Sum;
+ // Format totals for display
+ self.state.total_debit_display = formatFloat(TotalDebit, { digits: [0, 2] });
+ self.state.diff0_sum_display = formatFloat(diff0Sum, { digits: [0, 2] });
+ self.state.diff1_sum_display = formatFloat(diff1Sum, { digits: [0, 2] });
+ self.state.diff2_sum_display = formatFloat(diff2Sum, { digits: [0, 2] });
+ self.state.diff3_sum_display = formatFloat(diff3Sum, { digits: [0, 2] });
+ self.state.diff4_sum_display = formatFloat(diff4Sum, { digits: [0, 2] });
+ self.state.diff5_sum_display = formatFloat(diff5Sum, { digits: [0, 2] });
+ } catch (el) {
+ window.location.href;
+ }
+ }
+ gotoJournalEntry(ev) {
+ /**
+ * Navigates to the journal entry form view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move',
+ res_id: parseInt(ev.target.attributes["data-id"].value, 10),
+ views: [[false, "form"]],
+ target: "current",
+ });
+ }
+ gotoJournalItem(ev) {
+ /**
+ * Navigates to the journal items list view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move.line',
+ name: "Journal Items",
+ views: [[false, "list"]],
+ domain: [["partner_id", "=", parseInt(ev.target.attributes["data-id"].value, 10)], ['account_type', 'in', ['asset_receivable']]],
+ target: "current",
+ });
+ }
+ openPartner(ev) {
+ /**
+ * Opens the partner form view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'res.partner',
+ res_id: parseInt(ev.target.attributes["data-id"].value, 10),
+ views: [[false, "form"]],
+ target: "current",
+ });
+ }
+ async unfoldAll(ev) {
+ /**
+ * Unfolds all items in the table body if the event target does not have the 'selected-filter' class,
+ * or folds all items if the event target has the 'selected-filter' class.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ if (!ev.target.classList.contains("selected-filter")) {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.add('show');
+ }
+ ev.target.classList.add("selected-filter");
+ } else {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.remove('show')
+ }
+ ev.target.classList.remove("selected-filter");
+ }
+ }
+ async printPdf(ev) {
+ /**
+ * Generates and displays a PDF report for the partner ledger.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ ev.preventDefault();
+ var self = this;
+ var action_title = self.props.action.display_name;
+ let totals = {
+ 'diff0_sum':this.state.diff0_sum,
+ 'diff0_sum_display':this.state.diff0_sum_display,
+ 'diff1_sum':this.state.diff1_sum,
+ 'diff1_sum_display':this.state.diff1_sum_display,
+ 'diff2_sum':this.state.diff2_sum,
+ 'diff2_sum_display':this.state.diff2_sum_display,
+ 'diff3_sum':this.state.diff3_sum,
+ 'diff3_sum_display':this.state.diff3_sum_display,
+ 'diff4_sum':this.state.diff4_sum,
+ 'diff4_sum_display':this.state.diff4_sum_display,
+ 'diff5_sum':this.state.diff5_sum,
+ 'diff5_sum_display':this.state.diff5_sum_display,
+ 'total_debit':this.state.total_debit,
+ 'total_debit_display':this.state.total_debit_display,
+ 'currency':this.state.currency,
+ }
+ return self.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.aged_receivable',
+ 'report_file': 'dynamic_accounts_report.aged_receivable',
+ 'data': {
+ 'move_lines': self.state.move_line,
+ 'data': self.state.data,
+ 'total': self.state.total,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ 'title': action_title,
+ 'report_name': self.props.action.display_name
+ },
+ 'display_name': self.props.action.display_name,
+ });
+ }
+ filter() {
+ let filters = {
+ 'partner': this.state.selected_partner_rec,
+ 'end_date': this.date_range.el.value,
+ };
+ return filters
+ }
+ async print_xlsx() {
+ /**
+ * Generates and downloads an XLSX report for the partner ledger.
+ */
+ var self = this;
+ var action_title = self.props.action.display_name;
+ let totals = {
+ 'diff0_sum':this.state.diff0_sum,
+ 'diff1_sum':this.state.diff1_sum,
+ 'diff2_sum':this.state.diff2_sum,
+ 'diff3_sum':this.state.diff3_sum,
+ 'diff4_sum':this.state.diff4_sum,
+ 'diff5_sum':this.state.diff5_sum,
+ 'total_debit':this.state.total_debit,
+ }
+ var datas = {
+ 'move_lines': self.state.move_line,
+ 'data': self.state.data,
+ 'total': self.state.total,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ 'title': action_title,
+ }
+ var action = {
+ 'data': {
+ 'model': 'age.receivable.report',
+ 'data': JSON.stringify(datas),
+ 'output_format': 'xlsx',
+ 'report_action': self.props.action.xml_id,
+ 'report_name': action_title,
+ },
+ };
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ async applyFilter(ev, e, is_delete = false) {
+ let move_line_list = []
+ let move_lines_total = ''
+ let diff0Sum = 0;
+ let diff1Sum = 0;
+ let diff2Sum = 0;
+ let diff3Sum = 0;
+ let diff4Sum = 0;
+ let diff5Sum = 0;
+ let TotalDebit = 0;
+ if (ev.target && ev.target.attributes["data-value"]) {
+ if (ev.target.attributes["data-value"].value == 'today') {
+ this.date_range.el.value = today.toFormat('yyyy-MM-dd')
+ } else if (ev.target.attributes["data-value"].value == 'last-month-end') {
+ this.date_range.el.value = today.startOf('month').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ } else if (ev.target.attributes["data-value"].value == 'last-quarter-end') {
+ this.date_range.el.value = today.startOf('quarter').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ } else if (ev.target.attributes["data-value"].value == 'last-year-end') {
+ this.date_range.el.value = today.startOf('year').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ }
+ } else if (e && e.input && e.input.attributes.placeholder.value == 'Partner' && !is_delete) {
+ this.state.selected_partner.push(ev[0].id)
+ this.state.selected_partner_rec.push(ev[0])
+ } else if (is_delete) {
+ let index = this.state.selected_partner_rec.indexOf(ev)
+ this.state.selected_partner_rec.splice(index, 1)
+ this.state.selected_partner = this.state.selected_partner_rec.map((rec) => rec.id)
+ }
+ let filtered_data = await this.orm.call("age.receivable.report", "get_filter_values", [this.date_range.el.value, this.state.selected_partner,]);
+ for (const index in filtered_data) {
+ const value = filtered_data[index];
+ if (index !== 'partner_totals') {
+ move_line_list.push(index);
+ } else {
+ move_lines_total = value;
+ for (const moveLine of Object.values(move_lines_total)) {
+ diff0Sum += moveLine.diff0_sum || 0;
+ diff1Sum += moveLine.diff1_sum || 0;
+ diff2Sum += moveLine.diff2_sum || 0;
+ diff3Sum += moveLine.diff3_sum || 0;
+ diff4Sum += moveLine.diff4_sum || 0;
+ diff5Sum += moveLine.diff5_sum || 0;
+ TotalDebit += moveLine.debit_sum || 0;
+ }
+ }
+ }
+ this.state.data = filtered_data
+ this.state.move_line = move_line_list
+ this.state.total = move_lines_total
+ this.state.total_debit = TotalDebit
+ this.state.diff0_sum = diff0Sum
+ this.state.diff1_sum = diff1Sum
+ this.state.diff2_sum = diff2Sum
+ this.state.diff3_sum = diff3Sum
+ this.state.diff4_sum = diff4Sum
+ this.state.diff5_sum = diff5Sum
+ }
+ getDomain() {
+ return [];
+ }
+}
+AgedReceivable.template = 'age_r_template_new';
+AgedReceivable.defaultProps = {
+ resIds: [],
+};
+actionRegistry.add("age_r", AgedReceivable);
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/balance_sheet.js b/third_party_addons/dynamic_accounts_report/static/src/js/balance_sheet.js
new file mode 100644
index 000000000..a47a1d38c
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/balance_sheet.js
@@ -0,0 +1,290 @@
+/** @odoo-module **/
+const { Component } = owl;
+const now = new Date();
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState } from "@odoo/owl";
+import { BlockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+const actionRegistry = registry.category("actions");
+
+class BalanceSheet extends owl.Component {
+ async setup() {
+ super.setup(...arguments);
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.tbody = useRef('tbody');
+ this.posted = useRef('posted');
+ this.period = useRef('periods');
+ this.period_year = useRef('period_year');
+ this.draft = useRef('draft');
+ this.state = useState({
+ data: null,
+ filter_data: null,
+ year : [now.getFullYear()],
+ comparison: false,
+ comparison_type: null,
+ });
+ this.wizard_id = await this.orm.call("dynamic.balance.sheet.report", "create", [{}]) | null;
+ this.load_data(self.initial_render = true);
+ }
+ async load_data() {
+ /**
+ * Loads the data for the balance sheet report.
+ */
+ var self = this;
+ var action_title = self.props.action.display_name;
+ try {
+ var self = this;
+ let data = await self.orm.call("dynamic.balance.sheet.report", "view_report", [this.wizard_id,this.state.comparison,this.state.comparison_type]);
+ self.state.data = data[0]
+ self.state.datas = data[2]
+ self.state.filter_data = data[1]
+ self.state.title = action_title
+ }
+ catch (el) {
+ window.location.href
+ }
+ }
+ async show_gl(ev) {
+ /**
+ * Shows the General Ledger view by triggering an action.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: 'ir.actions.client',
+ name: 'General Ledger',
+ tag: 'gen_l',
+ });
+ }
+ async print_pdf(ev) {
+ /**
+ * Print PDF Method
+ * This method is triggered when the "Print PDF" button is clicked.
+ * It retrieves the report data and performs an action to generate and download a PDF report.
+ */
+ ev.preventDefault();
+ var self = this;
+ let data = await self.orm.call("dynamic.balance.sheet.report", "view_report", [this.wizard_id,this.state.comparison,this.state.comparison_type]);
+ self.state.data = data[0]
+ self.state.datas = data[2]
+ return self.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.balance_sheet',
+ 'report_file': 'dynamic_accounts_report.balance_sheet',
+ 'data': {
+ 'data': self.state,
+ 'report_name': self.props.action.display_name
+ },
+ 'display_name': self.props.action.display_name,
+ });
+ }
+ async print_xlsx(ev) {
+ /**
+ * Generates and downloads an XLSX report based on the profit and loss data.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ var self = this;
+ let data = await self.orm.call("dynamic.balance.sheet.report", "view_report", [this.wizard_id,this.state.comparison,this.state.comparison_type]);
+ self.state.data = data[0]
+ self.state.datas = data[2]
+ var action = {
+ 'data': {
+ 'model': 'dynamic.balance.sheet.report',
+ 'data': JSON.stringify(self.state),
+ 'output_format': 'xlsx',
+ 'report_name': self.props.action.display_name,
+ 'report_action': self.props.action.xml_id,
+ },
+ };
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ async apply_journal(ev) {
+ /**
+ * Applies journal filtering based on the selected option in an event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ self = this
+ if (ev.target.classList.contains("selected-filter")) {
+ ev.target.classList.remove('selected-filter')
+ }
+ else {
+ ev.target.classList.add('selected-filter')
+ }
+ this.filter = ({
+ 'journal_ids': ev.target.querySelector('span').textContent,
+ })
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter,]);
+ ev.delegateTarget.querySelector('.code').innerHTML = res[0].journal_ids;
+ self.initial_render = false;
+ self.load_data(self.initial_render);
+ }
+ async apply_account(ev) {
+ /**
+ * Applies account filtering based on the selected option in an event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ self = this
+ if (ev.target.classList.contains("selected-filter")) {
+ ev.target.classList.remove('selected-filter')
+ }
+ else {
+ ev.target.classList.add('selected-filter')
+ }
+ this.filter = ({
+ 'account_ids': ev.target.querySelector('span').textContent,
+ })
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter,]);
+ ev.delegateTarget.querySelector('.account').innerHTML = res[0].account_ids;
+ self.initial_render = false;
+ self.load_data(self.initial_render);
+ }
+ async apply_analytic_accounts(ev) {
+ /**
+ * Applies analytic accounts filtering based on the selected option in an event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ self = this
+ if (ev.target.classList.contains("selected-filter")) {
+ ev.target.classList.remove('selected-filter')
+ }
+ else {
+ ev.target.classList.add('selected-filter')
+ }
+ this.filter = ({
+ 'analytic_ids': ev.target.querySelector('span').textContent,
+ })
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter,]);
+ ev.delegateTarget.querySelector('.analytic').innerHTML = res[0].analytic_ids;
+ self.initial_render = false;
+ self.load_data(self.initial_render);
+ }
+ async apply_entries(ev) {
+ /**
+ * Applies the selected entries filter and triggers data loading based on the selected filter class.
+ * @param {Event} ev - The event object triggered by the entries filter selection.
+ * @returns {Promise} - A promise that resolves when the data is loaded.
+ */
+ self = this;
+ ev.target.classList.add('selected-filter')
+ if (ev.target.value == 'draft') {
+ this.posted.el.classList.remove('selected-filter')
+ } else {
+ this.draft.el.classList.remove('selected-filter')
+ }
+ this.filter = ({
+ 'target': ev.target.value
+ })
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter,]);
+ ev.delegateTarget.querySelector('.target').innerHTML = res[0].target_move;
+ self.initial_render = false;
+ self.load_data(self.initial_render);
+ }
+ async unfoldAll(ev) {
+ /**
+ * Unfolds or collapses all table rows based on the selected filter class.
+ * @param {Event} ev - The event object triggered by the unfolding action.
+ * @returns {void}
+ */
+ if (!ev.target.classList.contains("selected-filter")) {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.add('show')
+ }
+ ev.target.classList.add("selected-filter");
+ } else {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.remove('show')
+ }
+ ev.target.classList.remove("selected-filter");
+ }
+ }
+ async apply_date(ev){
+ /**
+ * Applies the selected date filter and triggers data loading based on the selected filter value.
+ * @param {Event} ev - The event object triggered by the date selection.
+ * @returns {Promise} - A promise that resolves when the data is loaded.
+ */
+ self = this
+ if (ev.target.name === 'start_date') {
+ this.filter = {
+ ...this.filter,
+ date_from: ev.target.value
+ };
+ } else if (ev.target.name === 'end_date') {
+ this.filter = {
+ ...this.filter,
+ date_to: ev.target.value
+ };
+ } else if (ev.target.attributes["data-value"].value == 'month') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'year') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'quarter') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'last-month') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'last-year') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'last-quarter') {
+ this.filter = ev.target.attributes["data-value"].value
+ }
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter]);
+ self.initial_render = false;
+ self.load_data(self.initial_render);
+ this.load_data(this.initial_render);
+ }
+ onPeriodChange(ev){
+ this.period_year.el.value = ev.target.value
+ }
+ onPeriodYearChange(ev){
+ this.period.el.value = ev.target.value
+ }
+ async applyComparisonPeriod(){
+ this.state.comparison = this.period.el.value
+ this.state.comparison_type = "month"
+ let monthNamesShort = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]
+ let res = await this.orm.call("dynamic.balance.sheet.report", "comparison_filter", [this.wizard_id, this.state.comparison]);
+ this.state.year = [monthNamesShort[now.getMonth()]+' ' + now.getFullYear()]
+ for (var length = 0; length < res.length; length++) {
+ const dateObject = new Date(res[length]['date_to']);
+ this.state.year.push(monthNamesShort[dateObject.getMonth()]+' ' + dateObject.getFullYear())
+ }
+ this.load_data(self.initial_render);
+ }
+ async applyComparisonYear(){
+ this.state.comparison = this.period_year.el.value
+ this.state.comparison_type = "year"
+ let res = await this.orm.call("dynamic.balance.sheet.report", "comparison_filter_year", [this.wizard_id, this.state.comparison]);
+ this.state.year = [now.getFullYear()]
+ for (var length = 0; length < res.length; length++) {
+ const dateObject = new Date(res[length]['date_to']);
+ this.state.year.push(dateObject.getFullYear())
+ }
+ this.load_data(self.initial_render);
+ }
+ apply_comparison() {
+ this.state.comparison = false
+ this.state.comparison_type = null
+ this.state.year = [now.getFullYear()]
+ }
+
+}
+BalanceSheet.template = 'bls_template_new';
+//BalanceSheet.components = {
+// FinancialReportControlPanel
+//}
+actionRegistry.add("bl_s", BalanceSheet);
\ No newline at end of file
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/bank_flow.js b/third_party_addons/dynamic_accounts_report/static/src/js/bank_flow.js
new file mode 100644
index 000000000..407fee1f6
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/bank_flow.js
@@ -0,0 +1,389 @@
+/** @odoo-module */
+const { Component } = owl;
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState } from "@odoo/owl";
+import { BlockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+const actionRegistry = registry.category("actions");
+
+class BankBook extends owl.Component {
+ async setup() {
+ super.setup(...arguments);
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.dialog = useService("dialog");
+ this.tbody = useRef('tbody');
+ this.unfoldButton = useRef('unfoldButton');
+ this.state = useState({
+ move_line: null,
+ data: null,
+ total: null,
+ accounts: null,
+ filter_applied: null,
+ selected_partner: [],
+ selected_partner_rec: [],
+ date_range: null,
+ options: null,
+ selected_account_list: [],
+ total_debit: null,
+ total_debit_display: null,
+ total_credit: null,
+ total_credit_display: null,
+ currency: null,
+ message_list : [],
+ });
+ this.load_data(self.initial_render = true);
+
+ }
+ formatNumberWithSeparators(number) {
+ const parsedNumber = parseFloat(number);
+ if (isNaN(parsedNumber)) {
+ return "0.00"; // Fallback to 0.00 if the input is invalid
+ }
+ return parsedNumber.toLocaleString('en-US', {
+ minimumFractionDigits: 2,
+ maximumFractionDigits: 2
+ });
+ }
+ async load_data() {
+ /**
+ * Loads the data for the bank book report.
+ */
+ let move_line_list = []
+ let move_lines_total = ''
+ let accounts = [];
+ var self = this;
+ let totalDebitSum = 0;
+ let totalCreditSum = 0;
+ let currency;
+ var action_title = self.props.action.display_name;
+ try {
+ var self = this;
+ self.state.data = await self.orm.call("bank.book.report", "view_report", []);
+
+
+ for (const index in self.state.data) {
+ const value = self.state.data[index];
+ if (index !== 'move_lines_total' && index !== 'accounts') {
+ move_line_list.push(index);
+ } else if (index === 'accounts') {
+ self.state.accounts = value;
+ } else {
+ move_lines_total = value;
+ for (const moveLine of Object.values(move_lines_total)) {
+ currency = moveLine.currency_id;
+ totalDebitSum += moveLine.total_debit || 0;
+ totalCreditSum += moveLine.total_credit || 0;
+ moveLine.total_debit_display = this.formatNumberWithSeparators(moveLine.total_debit || 0);
+ moveLine.total_credit_display = this.formatNumberWithSeparators(moveLine.total_credit || 0);
+ moveLine.balance = this.formatNumberWithSeparators(moveLine.total_debit - moveLine.total_credit || 0);
+ }
+
+ }
+ }
+
+
+
+ self.state.move_line = move_line_list
+ for (const key of move_line_list) {
+ for (const line of self.state.data[key]) {
+ if (line.debit !== undefined) {
+ line.debit_display = this.formatNumberWithSeparators(line.debit || 0);
+ }
+ if (line.credit !== undefined) {
+ line.credit_display = this.formatNumberWithSeparators(line.credit || 0);
+ }
+ if (line.balance !== undefined) {
+ line.balance_display = this.formatNumberWithSeparators(line.balance || 0);
+ }
+ }
+ }
+ self.state.total = move_lines_total
+ self.state.currency = currency
+ self.state.total_debit = totalDebitSum.toFixed(2)
+ self.state.total_debit_display = this.formatNumberWithSeparators(self.state.total_debit)
+ self.state.total_credit = totalCreditSum.toFixed(2)
+ self.state.total_credit_display = this.formatNumberWithSeparators(self.state.total_credit)
+ }
+ catch (el) {
+ window.location.href;
+ }
+ }
+ gotoJournalEntry(ev) {
+ /**
+ * Navigates to the journal entry form view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move',
+ res_id: parseInt(ev.target.attributes["data-id"].value, 10),
+ views: [[false, "form"]],
+ target: "current",
+ });
+ }
+ getDomain() {
+ return [];
+ }
+ async printPdf(ev) {
+ /**
+ * Generates and displays a PDF report for the bank book.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ ev.preventDefault();
+ var self = this;
+ let totals = {
+ 'total_debit':this.state.total_debit,
+ 'total_debit_display':this.state.total_debit_display,
+ 'total_credit':this.state.total_credit,
+ 'total_credit_display':this.state.total_credit_display,
+ 'currency':this.state.currency,
+ }
+ var action_title = self.props.action.display_name;
+ return self.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.bank_book',
+ 'report_file': 'dynamic_accounts_report.bank_book',
+ 'data': {
+ 'move_lines': self.state.move_line,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ 'data': self.state.data,
+ 'total': self.state.total,
+ 'title': action_title,
+ 'report_name': self.props.action.display_name
+ },
+ 'display_name': self.props.action.display_name,
+ });
+ }
+ filter() {
+ var self=this;
+ let startDate, endDate;
+ let startYear, startMonth, startDay, endYear, endMonth, endDay;
+ if (self.state.date_range){
+ const today = new Date();
+ if (self.state.date_range === 'year') {
+ startDate = new Date(today.getFullYear(), 0, 1);
+ endDate = new Date(today.getFullYear(), 11, 31);
+ } else if (self.state.date_range === 'quarter') {
+ const currentQuarter = Math.floor(today.getMonth() / 3);
+ startDate = new Date(today.getFullYear(), currentQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (currentQuarter + 1) * 3, 0);
+ } else if (self.state.date_range === 'month') {
+ startDate = new Date(today.getFullYear(), today.getMonth(), 1);
+ endDate = new Date(today.getFullYear(), today.getMonth() + 1, 0);
+ } else if (self.state.date_range === 'last-month') {
+ startDate = new Date(today.getFullYear(), today.getMonth() - 1, 1);
+ endDate = new Date(today.getFullYear(), today.getMonth(), 0);
+ } else if (self.state.date_range === 'last-year') {
+ startDate = new Date(today.getFullYear() - 1, 0, 1);
+ endDate = new Date(today.getFullYear() - 1, 11, 31);
+ } else if (self.state.date_range === 'last-quarter') {
+ const lastQuarter = Math.floor((today.getMonth() - 3) / 3);
+ startDate = new Date(today.getFullYear(), lastQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (lastQuarter + 1) * 3, 0);
+ }
+ else{
+ startDate = new Date(self.state.date_range.start_date);
+ endDate = new Date(self.state.date_range.end_date);
+ }
+ // Get the date components for start and end dates
+ if (startDate) {
+ startYear = startDate.getFullYear();
+ startMonth = startDate.getMonth() + 1;
+ startDay = startDate.getDate();
+ }
+ if (endDate) {
+ endYear = endDate.getFullYear();
+ endMonth = endDate.getMonth() + 1;
+ endDay = endDate.getDate();
+ }
+ }
+ const selectedAccountIDs = Object.values(self.state.selected_account_list);
+ const selectedAccountNames = selectedAccountIDs.map((accountID) => {
+ const matchingAccount = Object.values(self.state.accounts).find(account => account.id === accountID);
+ return matchingAccount ? matchingAccount.display_name : '';
+ });
+ let filters = {
+ 'partner': self.state.selected_partner_rec,
+ 'account': selectedAccountNames,
+ 'options': self.state.options,
+ 'start_date': null,
+ 'end_date': null,
+ };
+ // Check if start and end dates are available before adding them to the filters object
+ if (startYear !== undefined && startMonth !== undefined && startDay !== undefined &&
+ endYear !== undefined && endMonth !== undefined && endDay !== undefined) {
+ filters['start_date'] = `${startYear}-${startMonth < 10 ? '0' : ''}${startMonth}-${startDay < 10 ? '0' : ''}${startDay}`;
+ filters['end_date'] = `${endYear}-${endMonth < 10 ? '0' : ''}${endMonth}-${endDay < 10 ? '0' : ''}${endDay}`;
+ }
+ return filters
+ }
+ async print_xlsx() {
+ /**
+ * Generates and downloads an XLSX report for the bank book.
+ */
+ var self = this;
+ var action_title = self.props.action.display_name;
+ let totals = {
+ 'total_debit':this.state.total_debit,
+ 'total_debit_display':this.state.total_debit_display,
+ 'total_credit':this.state.total_credit,
+ 'total_credit_display':this.state.total_credit_display,
+ 'currency':this.state.currency,
+ }
+ var datas = {
+ 'move_lines': self.state.move_line,
+ 'data': self.state.data,
+ 'total': self.state.total,
+ 'title': action_title,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ }
+ var action = {
+ 'data': {
+ 'model': 'bank.book.report',
+ 'data': JSON.stringify(datas),
+ 'output_format': 'xlsx',
+ 'report_action': self.props.action.xml_id,
+ 'report_name': action_title,
+ },
+ };
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ async applyFilter(val, ev, is_delete = false) {
+ /**
+ * Applies filters to the bank book report based on the provided values.
+ *
+ * @param {any} val - The value of the filter.
+ * @param {Event} ev - The event object triggered by the action.
+ * @param {boolean} is_delete - Indicates whether the filter value is being deleted.
+ * @returns {void}
+ */
+ let move_line_list = []
+ let move_line_value = []
+ let move_line_totals = ''
+ this.state.move_line = null
+ this.state.data = null
+ this.state.total = null
+ this.state.filter_applied = true;
+ let totalDebitSum = 0;
+ let totalCreditSum = 0;
+ if (ev) {
+ if (ev.input && ev.input.attributes.placeholder.value == 'Partner' && !is_delete) {
+ this.state.selected_partner.push(val[0].id)
+ this.state.selected_partner_rec.push(val[0])
+ } else if (is_delete) {
+ let index = this.state.selected_partner_rec.indexOf(val)
+ this.state.selected_partner_rec.splice(index, 1)
+ this.state.selected_partner = this.state.selected_partner_rec.map((rec) => rec.id)
+ }
+ }
+ else {
+ if (val.target.name === 'start_date') {
+ this.state.date_range = {
+ ...this.state.date_range,
+ start_date: val.target.value
+ };
+ } else if (val.target.name === 'end_date') {
+ this.state.date_range = {
+ ...this.state.date_range,
+ end_date: val.target.value
+ };
+ } else if (val.target.attributes["data-value"].value == 'month') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'year') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'quarter') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'last-month') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'last-year') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'last-quarter') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value === 'draft') {
+ if (val.target.classList.contains("selected-filter")) {
+ const { draft, ...updatedAccount } = this.state.options;
+ this.state.options = updatedAccount;
+ val.target.classList.remove("selected-filter");
+ } else {
+ this.state.options = {
+ ...this.state.options,
+ 'draft': true
+ };
+ val.target.classList.add("selected-filter");
+ }
+ } else if (val.target.attributes["data-value"].value == 'account') {
+ if (!val.target.classList.contains("selected-filter")) {
+ this.state.selected_account_list.push(parseInt(val.target.attributes["data-id"].value, 10))
+ val.target.classList.add("selected-filter");
+ } else {
+ const updatedList = this.state.selected_account_list.filter(item => item !== parseInt(val.target.attributes["data-id"].value, 10));
+ this.state.selected_account_list = updatedList
+ val.target.classList.remove("selected-filter");
+ }
+ }
+ }
+ let filtered_data = await this.orm.call("bank.book.report", "get_filter_values", [this.state.selected_partner, this.state.date_range, this.state.selected_account_list, this.state.options,]);
+ for (const index in filtered_data) {
+ const value = filtered_data[index];
+
+ if (index !== 'move_lines_total') {
+ move_line_list.push(index);
+ } else {
+ move_line_totals = value;
+
+ for (const moveLine of Object.values(move_line_totals)) {
+ totalDebitSum += moveLine.total_debit || 0;
+ totalCreditSum += moveLine.total_credit || 0;
+ }
+ }
+ }
+ this.state.move_line = move_line_list
+ this.state.data = filtered_data
+ this.state.total = move_line_totals
+ this.state.total_debit = totalDebitSum.toFixed(2)
+ this.state.total_credit = totalCreditSum.toFixed(2)
+ if (this.unfoldButton.el.classList.contains("selected-filter")) {
+ this.unfoldButton.el.classList.remove("selected-filter");
+ }
+ }
+ async unfoldAll(ev) {
+ /**
+ * Unfolds all items in the table body if the event target does not have the 'selected-filter' class,
+ * or folds all items if the event target has the 'selected-filter' class.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ if (!ev.target.classList.contains("selected-filter")) {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.add('show')
+ }
+ ev.target.classList.add("selected-filter");
+ } else {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.remove('show')
+ }
+ ev.target.classList.remove("selected-filter");
+ }
+ }
+}
+BankBook.defaultProps = {
+ resIds: [],
+};
+BankBook.template = 'bnk_b_template_new';
+actionRegistry.add("bnk_b", BankBook);
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/cash_flow.js b/third_party_addons/dynamic_accounts_report/static/src/js/cash_flow.js
new file mode 100644
index 000000000..0f9e5ad33
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/cash_flow.js
@@ -0,0 +1,339 @@
+/** @odoo-module */
+const { Component } = owl;
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState } from "@odoo/owl";
+import { BlockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+const actionRegistry = registry.category("actions");
+
+class CashBook extends owl.Component {
+ async setup() {
+ super.setup(...arguments);
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.dialog = useService("dialog");
+ this.tbody = useRef('tbody');
+ this.unfoldButton = useRef('unfoldButton');
+ this.state = useState({
+ move_line: null,
+ data: null,
+ total: null,
+ accounts: null,
+ filter_applied: null,
+ selected_partner: [],
+ selected_partner_rec: [],
+ date_range: null,
+ selected_account_list: [],
+ total_debit: null,
+ total_credit: null,
+ currency: null,
+ options: null,
+ message_list : [],
+ });
+ this.load_data(self.initial_render = true);
+
+ }
+ async load_data() {
+ /**
+ * Loads the data for the cash book report.
+ */
+ let move_line_list = []
+ let move_lines_total = ''
+ let accounts = [];
+ var self = this;
+ let totalDebitSum = 0;
+ let totalCreditSum = 0;
+ let currency;
+ var action_title = self.props.action.display_name;
+ try {
+ var self = this;
+ self.state.data = await self.orm.call("cash.book.report", "view_report", []);
+ for (const index in self.state.data) {
+ const value = self.state.data[index];
+ if (index !== 'move_lines_total' && index !== 'accounts') {
+ move_line_list.push(index);
+ } else if (index === 'accounts') {
+ self.state.accounts = value;
+ } else {
+ move_lines_total = value;
+ for (const moveLine of Object.values(move_lines_total)) {
+ currency = moveLine.currency_id;
+ totalDebitSum += moveLine.total_debit || 0;
+ totalCreditSum += moveLine.total_credit || 0;
+ }
+ }
+ }
+ self.state.move_line = move_line_list
+ self.state.total = move_lines_total
+ self.state.currency = currency
+ self.state.total_debit = totalDebitSum.toFixed(2)
+ self.state.total_credit = totalCreditSum.toFixed(2)
+ }
+ catch (el) {
+ window.location.href;
+ }
+ }
+ gotoJournalEntry(ev) {
+ /**
+ * Navigates to the journal entry form view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move',
+ res_id: parseInt(ev.target.attributes["data-id"].value, 10),
+ views: [[false, "form"]],
+ target: "current",
+ });
+ }
+ async printPdf(ev) {
+ /**
+ * Generates and displays a PDF report for the bank book.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ ev.preventDefault();
+ var self = this;
+ var action_title = self.props.action.display_name;
+ let totals = {
+ 'total_debit':this.state.total_debit,
+ 'total_credit':this.state.total_credit,
+ 'currency':this.state.currency || false,
+ }
+ return self.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.bank_book',
+ 'report_file': 'dynamic_accounts_report.bank_book',
+ 'data': {
+ 'move_lines': self.state.move_line,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ 'data': self.state.data,
+ 'total': self.state.total,
+ 'title': action_title,
+ 'report_name': self.props.action.display_name
+ },
+ 'display_name': self.props.action.display_name,
+ });
+ }
+ filter() {
+ var self=this;
+ let startDate, endDate;
+ let startYear, startMonth, startDay, endYear, endMonth, endDay;
+ if (self.state.date_range){
+ const today = new Date();
+ if (self.state.date_range === 'year') {
+ startDate = new Date(today.getFullYear(), 0, 1);
+ endDate = new Date(today.getFullYear(), 11, 31);
+ } else if (self.state.date_range === 'quarter') {
+ const currentQuarter = Math.floor(today.getMonth() / 3);
+ startDate = new Date(today.getFullYear(), currentQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (currentQuarter + 1) * 3, 0);
+ } else if (self.state.date_range === 'month') {
+ startDate = new Date(today.getFullYear(), today.getMonth(), 1);
+ endDate = new Date(today.getFullYear(), today.getMonth() + 1, 0);
+ } else if (self.state.date_range === 'last-month') {
+ startDate = new Date(today.getFullYear(), today.getMonth() - 1, 1);
+ endDate = new Date(today.getFullYear(), today.getMonth(), 0);
+ } else if (self.state.date_range === 'last-year') {
+ startDate = new Date(today.getFullYear() - 1, 0, 1);
+ endDate = new Date(today.getFullYear() - 1, 11, 31);
+ } else if (self.state.date_range === 'last-quarter') {
+ const lastQuarter = Math.floor((today.getMonth() - 3) / 3);
+ startDate = new Date(today.getFullYear(), lastQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (lastQuarter + 1) * 3, 0);
+ }
+ // Get the date components for start and end dates
+ if (startDate) {
+ startYear = startDate.getFullYear();
+ startMonth = startDate.getMonth() + 1;
+ startDay = startDate.getDate();
+ }
+ if (endDate) {
+ endYear = endDate.getFullYear();
+ endMonth = endDate.getMonth() + 1;
+ endDay = endDate.getDate();
+ }
+ }
+ const selectedAccountIDs = Object.values(self.state.selected_account_list);
+ const selectedAccountNames = selectedAccountIDs.map((accountID) => {
+ const matchingAccount = Object.values(self.state.accounts).find(account => account.id === accountID);
+ return matchingAccount ? matchingAccount.display_name : '';
+ });
+ let filters = {
+ 'partner': self.state.selected_partner_rec,
+ 'account': selectedAccountNames,
+ 'options': self.state.options,
+ 'start_date': null,
+ 'end_date': null,
+ };
+ // Check if start and end dates are available before adding them to the filters object
+ if (startYear !== undefined && startMonth !== undefined && startDay !== undefined &&
+ endYear !== undefined && endMonth !== undefined && endDay !== undefined) {
+ filters['start_date'] = `${startYear}-${startMonth < 10 ? '0' : ''}${startMonth}-${startDay < 10 ? '0' : ''}${startDay}`;
+ filters['end_date'] = `${endYear}-${endMonth < 10 ? '0' : ''}${endMonth}-${endDay < 10 ? '0' : ''}${endDay}`;
+ }
+ return filters
+ }
+ async print_xlsx() {
+ /**
+ * Generates and downloads an XLSX report for the bank book.
+ */
+ var self = this;
+ var action_title = self.props.action.display_name;
+ let totals = {
+ 'total_debit':this.state.total_debit,
+ 'total_credit':this.state.total_credit,
+ 'currency':this.state.currency,
+ }
+ var datas = {
+ 'move_lines': self.state.move_line,
+ 'data': self.state.data,
+ 'total': self.state.total,
+ 'title': action_title,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ }
+ var action = {
+ 'data': {
+ 'model': 'cash.book.report',
+ 'data': JSON.stringify(datas),
+ 'output_format': 'xlsx',
+ 'report_action': self.props.action.xml_id,
+ 'report_name': action_title,
+ },
+ };
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ async applyFilter(val, ev, is_delete = false) {
+ /**
+ * Applies filters to the cash book report based on the provided values.
+ *
+ * @param {any} val - The value of the filter.
+ * @param {Event} ev - The event object triggered by the action.
+ * @param {boolean} is_delete - Indicates whether the filter value is being deleted.
+ * @returns {void}
+ */
+ let move_line_list = []
+ let move_line_value = []
+ let move_line_totals = ''
+ this.state.move_line = null
+ this.state.data = null
+ this.state.total = null
+ this.state.filter_applied = true;
+ let totalDebitSum = 0;
+ let totalCreditSum = 0;
+ if (ev) {
+ if (ev.input && ev.input.attributes.placeholder.value == 'Partner' && !is_delete) {
+ this.state.selected_partner.push(val[0].id)
+ this.state.selected_partner_rec.push(val[0])
+ } else if (is_delete) {
+ let index = this.state.selected_partner_rec.indexOf(val)
+ this.state.selected_partner_rec.splice(index, 1)
+ this.state.selected_partner = this.state.selected_partner_rec.map((rec) => rec.id)
+ }
+ }
+ else {
+ if (val.target.name === 'start_date') {
+ this.state.date_range = {
+ ...this.state.date_range,
+ start_date: val.target.value
+ };
+ } else if (val.target.name === 'end_date') {
+ this.state.date_range = {
+ ...this.state.date_range,
+ end_date: val.target.value
+ };
+ } else if (val.target.attributes["data-value"].value == 'month') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'year') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'quarter') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'last-month') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'last-year') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'last-quarter') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ }else if (val.target.attributes["data-value"].value === 'draft') {
+ if (val.target.classList.contains("selected-filter")) {
+ const { draft, ...updatedAccount } = this.state.options;
+ this.state.options = updatedAccount;
+ val.target.classList.remove("selected-filter");
+ } else {
+ this.state.options = {
+ ...this.state.options,
+ 'draft': true
+ };
+ val.target.classList.add("selected-filter");
+ }
+ } else if (val.target.attributes["data-value"].value == 'account') {
+ if (!val.target.classList.contains("selected-filter")) {
+ this.state.selected_account_list.push(parseInt(val.target.attributes["data-id"].value, 10))
+ val.target.classList.add("selected-filter");
+ } else {
+ const updatedList = this.state.selected_account_list.filter(item => item !== parseInt(val.target.attributes["data-id"].value, 10));
+ this.state.selected_account_list = updatedList
+ val.target.classList.remove("selected-filter");
+ }
+ }
+ }
+ let filtered_data = await this.orm.call("cash.book.report", "get_filter_values", [this.state.selected_partner, this.state.date_range, this.state.selected_account_list, this.state.options,]);
+ for (const [index, value] of Object.entries(filtered_data)) {
+ if (index !== 'move_lines_total') {
+ move_line_list.push(index);
+ } else {
+ move_line_totals = value;
+ Object.values(move_line_totals).forEach(move_line => {
+ totalDebitSum += move_line.total_debit || 0;
+ totalCreditSum += move_line.total_credit || 0;
+ });
+ }
+ }
+ this.state.move_line = move_line_list
+ this.state.data = filtered_data
+ this.state.total = move_line_totals
+ this.state.total_debit = totalDebitSum.toFixed(2)
+ this.state.total_credit = totalCreditSum.toFixed(2)
+ if (this.unfoldButton.el.classList.contains("selected-filter")) {
+ this.unfoldButton.el.classList.remove("selected-filter");
+ }
+ }
+ async unfoldAll(ev) {
+ /**
+ * Unfolds all items in the table body if the event target does not have the 'selected-filter' class,
+ * or folds all items if the event target has the 'selected-filter' class.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ if (!ev.target.classList.contains("selected-filter")) {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.add('show')
+ }
+ ev.target.classList.add("selected-filter");
+ } else {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.remove('show')
+ }
+ ev.target.classList.remove("selected-filter");
+ }
+ }
+ getDomain() {
+ return [];
+ }
+}
+CashBook.template = 'csh_b_template_new';
+actionRegistry.add("csh_b", CashBook);
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/general_ledger.js b/third_party_addons/dynamic_accounts_report/static/src/js/general_ledger.js
new file mode 100644
index 000000000..e23530725
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/general_ledger.js
@@ -0,0 +1,419 @@
+/** @odoo-module */
+const { Component } = owl;
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState } from "@odoo/owl";
+import { BlockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+const actionRegistry = registry.category("actions");
+
+class GeneralLedger extends owl.Component {
+ setup() {
+ super.setup(...arguments);
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.tbody = useRef('tbody');
+ this.unfoldButton = useRef('unfoldButton');
+ this.state = useState({
+ account: null,
+ account_data: null,
+ account_data_list: null,
+ account_total: null,
+ total_debit: null,
+ total_debit_display : null,
+ total_credit_display : null,
+ total_credit: null,
+ currency: null,
+ journals: null,
+ selected_journal_list: [],
+ analytics: null,
+ selected_analytic_list: [],
+ title: null,
+ filter_applied: null,
+ account_list: null,
+ account_total_list: null,
+ date_range: null,
+ options: null,
+ method: {
+ 'accural': true
+ },
+ });
+ this.load_data(self.initial_render = true);
+ }
+ formatNumberWithSeparators(number) {
+ const parsedNumber = parseFloat(number);
+ if (isNaN(parsedNumber)) {
+ return "0.00"; // Fallback to 0.00 if the input is invalid
+ }
+ return parsedNumber.toLocaleString('en-US', {
+ minimumFractionDigits: 2,
+ maximumFractionDigits: 2
+ });
+ }
+ async load_data() {
+ let account_list = []
+ let account_totals = ''
+ let totalDebitSum = 0;
+ let totalCreditSum = 0;
+ let currency;
+ var self = this;
+ var action_title = self.props.action.display_name;
+ try {
+ var self = this;
+ let filtered_data = await this.orm.call("account.general.ledger", "get_filter_values", [self.state.selected_journal_list, self.state.date_range, self.state.options, self.state.selected_analytic_list,self.state.method]);
+ self.state.journals = filtered_data['journal_ids']
+ self.state.analytics = filtered_data['analytic_ids']
+ account_totals = filtered_data['account_totals']
+ self.state.account_data = await self.orm.call("account.general.ledger", "view_report", [self.wizard_id, action_title,]);
+ for (const [index, value] of Object.entries(self.state.account_data)){
+ if (index !== 'account_totals' && index !== 'journal_ids' && index !== 'analytic_ids') {
+ account_list.push(index)
+ } else if (index == 'journal_ids') {
+ self.state.journals = value
+ }
+ else if (index == 'analytic_ids') {
+ self.state.analytics = value
+ }
+ else {
+ account_totals = value
+ Object.values(account_totals).forEach(account_list => {
+ currency = account_list.currency_id
+ totalDebitSum += account_list.total_debit || 0;
+ account_list.total_debit_display = this.formatNumberWithSeparators(account_list.total_debit || 0);
+ totalCreditSum += account_list.total_credit || 0;
+ account_list.total_credit_display = this.formatNumberWithSeparators(account_list.total_credit || 0);
+ let balance = account_list.total_debit - account_list.total_credit;
+ account_list.balance_display = this.formatNumberWithSeparators(balance);
+ });
+ }
+ }
+ self.state.account = account_list
+ self.state.account_list = account_list
+ self.state.account_data_list = self.state.account_data
+ self.state.account_total_list = account_totals
+ self.state.account_total = account_totals
+ self.state.currency = currency
+ self.state.total_debit = totalDebitSum.toFixed(2)
+ self.state.total_debit_display = this.formatNumberWithSeparators(self.state.total_debit)
+ self.state.total_credit = totalCreditSum.toFixed(2)
+ self.state.total_credit_display = this.formatNumberWithSeparators(self.state.total_credit)
+ self.state.title = action_title
+ }
+ catch (el) {
+ window.location.href;
+ }
+ }
+ async printPdf(ev) {
+ ev.preventDefault();
+ var self = this;
+ let totals = {
+ 'total_debit':this.state.total_debit || false,
+ 'total_debit_display':this.state.total_debit_display || false,
+ 'total_credit':this.state.total_credit || false,
+ 'total_credit_display':this.state.total_credit_display || false,
+ 'currency':this.state.currency || false,
+ }
+ var action_title = self.props.action.display_name;
+ return self.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.general_ledger',
+ 'report_file': 'dynamic_accounts_report.general_ledger',
+ 'data': {
+ 'account': self.state.account,
+ 'account_data': self.state.account_data,
+ 'total': self.state.account_total,
+ 'title': action_title,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ 'report_name': self.props.action.display_name
+ },
+ 'display_name': self.props.action.display_name,
+ });
+ }
+ async print_xlsx() {
+ var self = this;
+ let totals = {
+ 'total_debit':this.state.total_debit,
+ 'total_debit_display':this.state.total_debit_display || false,
+ 'total_credit':this.state.total_credit,
+ 'total_credit_display':this.state.total_credit_display || false,
+ 'currency':this.state.currency,
+ }
+ var action_title = self.props.action.display_name;
+ var datas = {
+ 'account': self.state.account,
+ 'data': self.state.account_data,
+ 'total': self.state.account_total,
+ 'title': action_title,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ }
+ var action = {
+ 'data': {
+ 'model': 'account.general.ledger',
+ 'data': JSON.stringify(datas),
+ 'output_format': 'xlsx',
+ 'report_action': self.props.action.xml_id,
+ 'report_name': action_title,
+ },
+ };
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ gotoJournalEntry(ev) {
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move',
+ res_id: parseInt(ev.target.attributes["data-id"].value, 10),
+ views: [[false, "form"]],
+ target: "current",
+ });
+ }
+ gotoJournalItem(ev) {
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move.line',
+ name: "Journal Items",
+ views: [[false, "list"]],
+ domain: [["account_id", "=", parseInt(ev.target.attributes["data-id"].value, 10)]],
+ target: "current",
+ });
+ }
+ getDomain() {
+ return [];
+ }
+ async applyFilter(val, ev, is_delete = false) {
+ let account_list = []
+ let account_totals = ''
+ let totalDebitSum = 0;
+ let totalCreditSum = 0;
+ this.state.account = null
+ this.state.account_data = null
+ this.state.account_total = null
+ this.state.filter_applied = true;
+ if (ev) {
+ if (ev.input && ev.input.attributes.placeholder.value == 'Account' && !is_delete) {
+ this.state.selected_analytic.push(val[0].id)
+ this.state.selected_analytic_account_rec.push(val[0])
+ } else if (is_delete) {
+ let index = this.state.selected_analytic_account_rec.indexOf(val)
+ this.state.selected_analytic_account_rec.splice(index, 1)
+ this.state.selected_analytic = this.state.selected_analytic_account_rec.map((rec) => rec.id)
+ }
+ }
+ else {
+ if (val.target.name === 'start_date') {
+ this.state.date_range = {
+ ...this.state.date_range,
+ start_date: val.target.value
+ };
+ } else if (val.target.name === 'end_date') {
+ this.state.date_range = {
+ ...this.state.date_range,
+ end_date: val.target.value
+ };
+ } else if (val.target.attributes["data-value"].value == 'month') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'year') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'quarter') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'last-month') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'last-year') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ } else if (val.target.attributes["data-value"].value == 'last-quarter') {
+ this.state.date_range = val.target.attributes["data-value"].value
+ }
+ else if (val.target.attributes["data-value"].value == 'journal') {
+ if (!val.target.classList.contains("selected-filter")) {
+ this.state.selected_journal_list.push(parseInt(val.target.attributes["data-id"].value, 10))
+ val.target.classList.add("selected-filter");
+ } else {
+ const updatedList = this.state.selected_journal_list.filter(item => item !== parseInt(val.target.attributes["data-id"].value, 10));
+ this.state.selected_journal_list = updatedList
+ val.target.classList.remove("selected-filter");
+ }
+ }
+
+ else if (val.target.attributes["data-value"].value == 'analytic') {
+ if (!val.target.classList.contains("selected-filter")) {
+ this.state.selected_analytic_list.push(parseInt(val.target.attributes["data-id"].value, 10))
+ val.target.classList.add("selected-filter");
+ } else {
+ const updatedList = this.state.selected_analytic_list.filter(item => item !== parseInt(val.target.attributes["data-id"].value, 10));
+ this.state.selected_analytic_list = updatedList
+ val.target.classList.remove("selected-filter");
+ }
+ }
+ else if (val.target.attributes["data-value"].value == 'journal') {
+
+ if (!val.target.classList.contains("selected-filter")) {
+ this.state.selected_journal_list.push(parseInt(val.target.attributes["data-id"].value, 10))
+ val.target.classList.add("selected-filter");
+ } else {
+ const updatedList = this.state.selected_journal_list.filter(item => item !== parseInt(val.target.attributes["data-id"].value, 10));
+ this.state.selected_journal_list = updatedList
+ val.target.classList.remove("selected-filter");
+ }
+ }
+ else if (val.target.attributes["data-value"].value == 'analytic') {
+ if (!val.target.classList.contains("selected-filter")) {
+ this.state.selected_analytic_list.push(parseInt(val.target.attributes["data-id"].value, 10))
+ val.target.classList.add("selected-filter");
+ } else {
+ const updatedList = this.state.selected_analytic_list.filter(item => item !== parseInt(val.target.attributes["data-id"].value, 10));
+ this.state.selected_analytic_list = updatedList
+ val.target.classList.remove("selected-filter");
+ }
+ }
+ else if (val.target.attributes["data-value"].value === 'draft') {
+ if (val.target.classList.contains("selected-filter")) {
+ const { draft, ...updatedAccount } = this.state.options;
+ this.state.options = updatedAccount;
+ val.target.classList.remove("selected-filter");
+ } else {
+ this.state.options = {
+ ...this.state.options,
+ 'draft': true
+ };
+ val.target.classList.add("selected-filter");
+ }
+ }else if (val.target.attributes["data-value"].value === 'cash-basis') {
+ if (val.target.classList.contains("selected-filter")) {
+ const { cash, ...updatedAccount } = this.state.method;
+ this.state.method = updatedAccount;
+ this.state.method = {
+ ...this.state.method,
+ 'accrual': true
+ }
+ val.target.classList.remove("selected-filter");
+ } else {
+ const { accrual, ...updatedAccount } = this.state.method;
+ this.state.method = updatedAccount;
+ this.state.method = {
+ ...this.state.method,
+ 'cash': true
+ };
+ val.target.classList.add("selected-filter");
+ }
+ }
+ }
+ let filtered_data = await this.orm.call("account.general.ledger", "get_filter_values", [this.state.selected_journal_list, this.state.date_range, this.state.options, this.state.selected_analytic_list,this.state.method]);
+ for (let index in filtered_data) {
+ const value = filtered_data[index];
+ if (index !== 'account_totals' && index !== 'journal_ids' && index !== 'analytic_ids') {
+ account_list.push(index)
+ }
+ else {
+ account_totals = value
+ Object.values(account_totals).forEach(account_list => {
+ totalDebitSum += account_list.total_debit || 0;
+ totalCreditSum += account_list.total_credit || 0;
+ });
+ }
+ }
+ this.state.account = account_list
+ this.state.account_data = filtered_data
+ this.state.account_total = account_totals
+ this.state.total_debit = totalDebitSum.toFixed(2)
+ this.state.total_credit = totalCreditSum.toFixed(2)
+ if (this.unfoldButton.el.classList.contains("selected-filter")) {
+ this.unfoldButton.el.classList.remove("selected-filter");
+ }
+ }
+ async unfoldAll(ev) {
+ if (!ev.target.classList.contains("selected-filter")) {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.add('show')
+ }
+ ev.target.classList.add("selected-filter");
+ } else {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.remove('show')
+ }
+ ev.target.classList.remove("selected-filter");
+ }
+ }
+ filter() {
+ var self=this;
+ let startDate, endDate;
+ let startYear, startMonth, startDay, endYear, endMonth, endDay;
+ if (self.state.date_range){
+ const today = new Date();
+ if (self.state.date_range === 'year') {
+ startDate = new Date(today.getFullYear(), 0, 1);
+ endDate = new Date(today.getFullYear(), 11, 31);
+ } else if (self.state.date_range === 'quarter') {
+ const currentQuarter = Math.floor(today.getMonth() / 3);
+ startDate = new Date(today.getFullYear(), currentQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (currentQuarter + 1) * 3, 0);
+ } else if (self.state.date_range === 'month') {
+ startDate = new Date(today.getFullYear(), today.getMonth(), 1);
+ endDate = new Date(today.getFullYear(), today.getMonth() + 1, 0);
+ } else if (self.state.date_range === 'last-month') {
+ startDate = new Date(today.getFullYear(), today.getMonth() - 1, 1);
+ endDate = new Date(today.getFullYear(), today.getMonth(), 0);
+ } else if (self.state.date_range === 'last-year') {
+ startDate = new Date(today.getFullYear() - 1, 0, 1);
+ endDate = new Date(today.getFullYear() - 1, 11, 31);
+ } else if (self.state.date_range === 'last-quarter') {
+ const lastQuarter = Math.floor((today.getMonth() - 3) / 3);
+ startDate = new Date(today.getFullYear(), lastQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (lastQuarter + 1) * 3, 0);
+ }
+ else{
+ startDate = new Date(self.state.date_range.start_date);
+ endDate = new Date(self.state.date_range.end_date);
+ }
+ // Get the date components for start and end dates
+ if (startDate) {
+ startYear = startDate.getFullYear();
+ startMonth = startDate.getMonth() + 1;
+ startDay = startDate.getDate();
+ }
+ if (endDate) {
+ endYear = endDate.getFullYear();
+ endMonth = endDate.getMonth() + 1;
+ endDay = endDate.getDate();
+ }
+ }
+ const selectedJournalIDs = Object.values(self.state.selected_journal_list);
+ const selectedJournalNames = selectedJournalIDs.map((journalID) => {
+ const journal = self.state.journals.find((journal) => journal.id === journalID);
+ return journal ? journal.name : '';
+ });
+ const selectedAnalyticIDs = Object.values(self.state.selected_analytic_list);
+ const selectedAnalyticNames = selectedAnalyticIDs.map((analyticID) => {
+ const analytic = self.state.analytics.find((analytic) => analytic.id === analyticID);
+ return analytic ? analytic.name : '';
+ });
+ let filters = {
+ 'journal': selectedJournalNames,
+ 'analytic': selectedAnalyticNames,
+ 'account': self.state.selected_analytic_account_rec,
+ 'options': self.state.options,
+ 'start_date': null,
+ 'end_date': null,
+ };
+ // Check if start and end dates are available before adding them to the filters object
+ if (startYear !== undefined && startMonth !== undefined && startDay !== undefined &&
+ endYear !== undefined && endMonth !== undefined && endDay !== undefined) {
+ filters['start_date'] = `${startYear}-${startMonth < 10 ? '0' : ''}${startMonth}-${startDay < 10 ? '0' : ''}${startDay}`;
+ filters['end_date'] = `${endYear}-${endMonth < 10 ? '0' : ''}${endMonth}-${endDay < 10 ? '0' : ''}${endDay}`;
+ }
+ return filters
+ }
+}
+GeneralLedger.defaultProps = {
+ resIds: [],
+};
+GeneralLedger.template = 'gl_template_new';
+actionRegistry.add("gen_l", GeneralLedger);
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/partner_ledger.js b/third_party_addons/dynamic_accounts_report/static/src/js/partner_ledger.js
new file mode 100644
index 000000000..906079805
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/partner_ledger.js
@@ -0,0 +1,740 @@
+/** @odoo-module */
+const { Component } = owl;
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState } from "@odoo/owl";
+import { BlockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+const actionRegistry = registry.category("actions");
+class PartnerLedger extends owl.Component {
+ setup() {
+ super.setup(...arguments);
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.tbody = useRef('tbody');
+ this.unfoldButton = useRef('unfoldButton');
+ this.dialog = useService("dialog");
+ this.state = useState({
+ partners: null,
+ data: null,
+ total: null,
+ title: null,
+ currency: null,
+ filter_applied: null,
+ selected_partner: [],
+ selected_partner_rec: [],
+ all_partners: [],
+ filtered_partners: [],
+ total_debit: null,
+ total_debit_display:null,
+ total_credit: null,
+ partner_list: null,
+ total_list: null,
+ date_range: null,
+ account: null,
+ options: null,
+ message_list : [],
+ selected_tags: [],
+ selected_tag_ids: [],
+ all_tags: [],
+ filtered_tags: [],
+ selected_accounts: [],
+ selected_account_ids: [],
+ all_accounts: [],
+ filtered_accounts: [],
+
+ });
+ this.load_data(self.initial_render = true);
+ this.loadPartners();
+ this.loadTags();
+ this.loadAccounts();
+ }
+
+ async loadPartners() {
+ /**
+ * Loads all available partners from the database
+ */
+ try {
+ const partners = await this.orm.searchRead(
+ 'res.partner',
+ [],
+ ['id', 'name', 'display_name'],
+ { limit: 100 }
+ );
+ this.state.all_partners = partners;
+ this.state.filtered_partners = partners;
+ } catch (error) {
+ console.error('Error loading partners:', error);
+ }
+}
+
+ searchPartners(ev) {
+ /**
+ * Filters the partner list based on search input
+ * @param {Event} ev - The input event
+ */
+ const searchTerm = ev.target.value.toLowerCase();
+
+ if (!searchTerm) {
+ this.state.filtered_partners = this.state.all_partners;
+ } else {
+ this.state.filtered_partners = this.state.all_partners.filter(partner => {
+ const name = (partner.display_name || partner.name || '').toLowerCase();
+ return name.includes(searchTerm);
+ });
+ }
+ }
+
+ selectPartner(ev) {
+ /**
+ * Adds a partner to the selected list
+ */
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ const partnerId = parseInt(ev.target.dataset.partnerId, 10);
+
+ if (this.state.selected_partner.includes(partnerId)) {
+ return;
+ }
+
+ const partner = this.state.all_partners.find(p => p.id === partnerId);
+
+ if (partner) {
+ this.state.selected_partner.push(partnerId);
+ this.state.selected_partner_rec.push(partner);
+ this.applyAllFilters();
+ }
+ }
+
+ removePartner(ev) {
+ /**
+ * Removes a partner from the selected list
+ */
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ const partnerId = parseInt(ev.target.dataset.partnerId, 10);
+ const partnerIndex = this.state.selected_partner.indexOf(partnerId);
+
+ if (partnerIndex > -1) {
+ this.state.selected_partner.splice(partnerIndex, 1);
+ this.state.selected_partner_rec.splice(partnerIndex, 1);
+ this.applyAllFilters();
+ }
+ }
+
+ clearAllPartners(ev) {
+ /**
+ * Clears all selected partners
+ */
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ this.state.selected_partner = [];
+ this.state.selected_partner_rec = [];
+ this.applyAllFilters();
+ }
+ // ==================== PARTNER TAGS METHODS ====================
+ async loadTags() {
+ /**
+ * Loads all partner tags (categories) from the database
+ */
+ try {
+ const tags = await this.orm.searchRead(
+ 'res.partner.category',
+ [],
+ ['id', 'name'],
+ { limit: 200, order: 'name' }
+ );
+ this.state.all_tags = tags;
+ this.state.filtered_tags = tags;
+ } catch (error) {
+ console.error('Error loading tags:', error);
+ }
+ }
+
+ searchTags(ev) {
+ /**
+ * Filters the tag list based on search input
+ */
+ const searchTerm = ev.target.value.toLowerCase();
+
+ if (!searchTerm) {
+ this.state.filtered_tags = this.state.all_tags;
+ } else {
+ this.state.filtered_tags = this.state.all_tags.filter(tag => {
+ const name = (tag.name || '').toLowerCase();
+ return name.includes(searchTerm);
+ });
+ }
+ }
+
+ selectTag(ev) {
+ /**
+ * Adds a tag to the selected list
+ */
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ const tagId = parseInt(ev.target.dataset.tagId, 10);
+
+ if (this.state.selected_tag_ids.includes(tagId)) {
+ return;
+ }
+
+ const tag = this.state.all_tags.find(t => t.id === tagId);
+
+ if (tag) {
+ this.state.selected_tag_ids.push(tagId);
+ this.state.selected_tags.push(tag);
+ this.applyAllFilters();
+ }
+ }
+
+ removeTag(ev) {
+ /**
+ * Removes a tag from the selected list
+ */
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ const tagId = parseInt(ev.target.dataset.tagId, 10);
+ const tagIndex = this.state.selected_tag_ids.indexOf(tagId);
+
+ if (tagIndex > -1) {
+ this.state.selected_tag_ids.splice(tagIndex, 1);
+ this.state.selected_tags.splice(tagIndex, 1);
+ this.applyAllFilters();
+ }
+ }
+
+ clearAllTags(ev) {
+ /**
+ * Clears all selected tags
+ */
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ this.state.selected_tag_ids = [];
+ this.state.selected_tags = [];
+ this.applyAllFilters();
+ }
+
+// ==================== ACCOUNTS METHODS ====================
+ async loadAccounts() {
+ /**
+ * Loads all accounts from the database
+ */
+ try {
+ const accounts = await this.orm.searchRead(
+ 'account.account',
+ [],
+ ['id', 'code', 'name'],
+ { limit: 500, order: 'code' }
+ );
+ this.state.all_accounts = accounts;
+ this.state.filtered_accounts = accounts;
+ } catch (error) {
+ console.error('Error loading accounts:', error);
+ }
+ }
+
+ searchAccounts(ev) {
+ /**
+ * Filters the account list based on search input
+ */
+ const searchTerm = ev.target.value.toLowerCase();
+
+ if (!searchTerm) {
+ this.state.filtered_accounts = this.state.all_accounts;
+ } else {
+ this.state.filtered_accounts = this.state.all_accounts.filter(account => {
+ const code = (account.code || '').toLowerCase();
+ const name = (account.name || '').toLowerCase();
+ return code.includes(searchTerm) || name.includes(searchTerm);
+ });
+ }
+ }
+
+ selectAccount(ev) {
+ /**
+ * Adds an account to the selected list
+ */
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ const accountId = parseInt(ev.target.dataset.accountId, 10);
+
+ if (this.state.selected_account_ids.includes(accountId)) {
+ return;
+ }
+
+ const account = this.state.all_accounts.find(a => a.id === accountId);
+
+ if (account) {
+ this.state.selected_account_ids.push(accountId);
+ this.state.selected_accounts.push(account);
+ this.applyAllFilters();
+ }
+ }
+
+ removeAccount(ev) {
+ /**
+ * Removes an account from the selected list
+ */
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ const accountId = parseInt(ev.target.dataset.accountId, 10);
+ const accountIndex = this.state.selected_account_ids.indexOf(accountId);
+
+ if (accountIndex > -1) {
+ this.state.selected_account_ids.splice(accountIndex, 1);
+ this.state.selected_accounts.splice(accountIndex, 1);
+ this.applyAllFilters();
+ }
+ }
+
+ clearAllAccounts(ev) {
+ /**
+ * Clears all selected accounts
+ */
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ this.state.selected_account_ids = [];
+ this.state.selected_accounts = [];
+ this.applyAllFilters();
+ }
+
+
+ formatNumberWithSeparators(number) {
+ const parsedNumber = parseFloat(number);
+ if (isNaN(parsedNumber)) {
+ return "0.00"; // Fallback to 0.00 if the input is invalid
+ }
+ return parsedNumber.toLocaleString('en-US', {
+ minimumFractionDigits: 2,
+ maximumFractionDigits: 2
+ });
+ }
+
+ async load_data() {
+ /**
+ * Loads the data for the partner ledger report.
+ */
+ let partner_list = []
+ let partner_totals = ''
+ let totalDebitSum = 0;
+ let totalCreditSum = 0;
+ let currency;
+ var self = this;
+ var action_title = self.props.action.display_name;
+ try {
+ var self = this;
+ self.state.data = await self.orm.call("account.partner.ledger", "view_report", [[this.wizard_id], action_title,]);
+ const dataArray = self.state.data;
+ Object.entries(dataArray).forEach(([key, value]) => {
+ if (key !== 'partner_totals') {
+ partner_list.push(key);
+ value.forEach(entry => {
+ entry[0].debit_display = this.formatNumberWithSeparators(entry[0].debit || 0);
+ entry[0].credit_display = this.formatNumberWithSeparators(entry[0].credit || 0);
+ entry[0].amount_currency_display = this.formatNumberWithSeparators(entry[0].amount_currency || 0);
+ });
+ } else {
+ partner_totals = value;
+ }
+ });
+ Object.values(partner_totals).forEach(partner => {
+ currency = partner.currency_id;
+ totalDebitSum += partner.total_debit || 0;
+ totalCreditSum += partner.total_credit || 0;
+ partner.total_debit_display = this.formatNumberWithSeparators(partner.total_debit || 0)
+ partner.total_credit_display = this.formatNumberWithSeparators(partner.total_credit || 0)
+ });
+ self.state.partners = partner_list
+ self.state.partner_list = partner_list
+ self.state.total_list = partner_totals
+ self.state.total = partner_totals
+ self.state.currency = currency
+ self.state.total_debit = totalDebitSum
+ self.state.total_debit_display = this.formatNumberWithSeparators(self.state.total_debit || 0)
+ self.state.total_credit = totalCreditSum
+ self.state.total_credit_display = this.formatNumberWithSeparators(self.state.total_credit || 0)
+ self.state.title = action_title
+ }
+ catch (el) {
+ window.location.href;
+ }
+ }
+ async printPdf(ev) {
+ /**
+ * Generates and displays a PDF report for the partner ledger.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ ev.preventDefault();
+ let partner_list = []
+ let partner_value = []
+ let partner_totals = ''
+ let totals = {
+ 'total_debit':this.state.total_debit,
+ 'total_debit_display':this.state.total_debit_display,
+ 'total_credit':this.state.total_credit,
+ 'total_credit_display':this.state.total_credit_display,
+ 'currency':this.state.currency,
+ }
+ var action_title = this.props.action.display_name;
+ return this.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.partner_ledger',
+ 'report_file': 'dynamic_accounts_report.partner_ledger',
+ 'data': {
+ 'partners': this.state.partners,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ 'data': this.state.data,
+ 'total': this.state.total,
+ 'title': action_title,
+ 'report_name': this.props.action.display_name
+ },
+ 'display_name': this.props.action.display_name,
+ });
+ }
+ filter() {
+ var self=this;
+ let startDate, endDate;
+ let startYear, startMonth, startDay, endYear, endMonth, endDay;
+ if (self.state.date_range){
+ const today = new Date();
+ if (self.state.date_range === 'year') {
+ startDate = new Date(today.getFullYear(), 0, 1);
+ endDate = new Date(today.getFullYear(), 11, 31);
+ } else if (self.state.date_range === 'quarter') {
+ const currentQuarter = Math.floor(today.getMonth() / 3);
+ startDate = new Date(today.getFullYear(), currentQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (currentQuarter + 1) * 3, 0);
+ } else if (self.state.date_range === 'month') {
+ startDate = new Date(today.getFullYear(), today.getMonth(), 1);
+ endDate = new Date(today.getFullYear(), today.getMonth() + 1, 0);
+ } else if (self.state.date_range === 'last-month') {
+ startDate = new Date(today.getFullYear(), today.getMonth() - 1, 1);
+ endDate = new Date(today.getFullYear(), today.getMonth(), 0);
+ } else if (self.state.date_range === 'last-year') {
+ startDate = new Date(today.getFullYear() - 1, 0, 1);
+ endDate = new Date(today.getFullYear() - 1, 11, 31);
+ } else if (self.state.date_range === 'last-quarter') {
+ const lastQuarter = Math.floor((today.getMonth() - 3) / 3);
+ startDate = new Date(today.getFullYear(), lastQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (lastQuarter + 1) * 3, 0);
+ }
+ // Get the date components for start and end dates
+ if (startDate) {
+ startYear = startDate.getFullYear();
+ startMonth = startDate.getMonth() + 1;
+ startDay = startDate.getDate();
+ }
+ if (endDate) {
+ endYear = endDate.getFullYear();
+ endMonth = endDate.getMonth() + 1;
+ endDay = endDate.getDate();
+ }
+ }
+ let filters = {
+ 'partner': self.state.selected_partner_rec,
+ 'account': self.state.account,
+ 'options': self.state.options,
+ 'start_date': null,
+ 'end_date': null,
+ };
+ // Check if start and end dates are available before adding them to the filters object
+ if (startYear !== undefined && startMonth !== undefined && startDay !== undefined &&
+ endYear !== undefined && endMonth !== undefined && endDay !== undefined) {
+ filters['start_date'] = `${startYear}-${startMonth < 10 ? '0' : ''}${startMonth}-${startDay < 10 ? '0' : ''}${startDay}`;
+ filters['end_date'] = `${endYear}-${endMonth < 10 ? '0' : ''}${endMonth}-${endDay < 10 ? '0' : ''}${endDay}`;
+ }
+ return filters
+ }
+ async print_xlsx() {
+ /**
+ * Generates and downloads an XLSX report for the partner ledger.
+ */
+ var self = this;
+
+ let partner_list = []
+ let partner_value = []
+ let partner_totals = ''
+ let totals = {
+ 'total_debit':this.state.total_debit,
+ 'total_credit':this.state.total_credit,
+ 'currency':this.state.currency,
+ }
+ var action_title = self.props.action.display_name;
+ var datas = {
+ 'partners': self.state.partners,
+ 'data': self.state.data,
+ 'total': self.state.total,
+ 'title': action_title,
+ 'filters': this.filter(),
+ 'grand_total': totals,
+ }
+ var action = {
+ 'data': {
+ 'model': 'account.partner.ledger',
+ 'data': JSON.stringify(datas),
+ 'output_format': 'xlsx',
+ 'report_action': self.props.action.xml_id,
+ 'report_name': action_title,
+ },
+ };
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ gotoJournalEntry(ev) {
+ /**
+ * Navigates to the journal entry form view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move',
+ res_id: parseInt(ev.target.attributes["data-id"].value, 10),
+ views: [[false, "form"]],
+ target: "current",
+ });
+ }
+ gotoJournalItem(ev) {
+ /**
+ * Navigates to the journal items list view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move.line',
+ name: "Journal Items",
+ views: [[false, "list"]],
+ domain: [["partner_id", "=", parseInt(ev.target.attributes["data-id"].value, 10)], ['account_type', 'in', ['liability_payable', 'asset_receivable']]],
+ target: "current",
+ });
+ }
+ openPartner(ev) {
+ /**
+ * Opens the partner form view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'res.partner',
+ res_id: parseInt(ev.target.attributes["data-id"].value, 10),
+ views: [[false, "form"]],
+ target: "current",
+ });
+ }
+
+ async applyFilter(val, ev, is_delete = false) {
+ /**
+ * Applies filters to the partner ledger report based on the provided values.
+ * This method handles date ranges, account types, and options filters.
+ * Partner, tag, and account filters are handled by their respective methods.
+ *
+ * @param {any} val - The value of the filter.
+ * @param {Event} ev - The event object triggered by the action (can be null).
+ * @param {boolean} is_delete - Indicates whether the filter value is being deleted.
+ */
+
+ // Handle date range and other button-based filters
+ let partner_list = []
+ let partner_value = []
+ let partner_totals = ''
+ let month = null
+ this.state.partners = null
+ this.state.data = null
+ this.state.total = null
+ this.state.filter_applied = true;
+ let totalDebitSum = 0;
+ let totalCreditSum = 0;
+ if (val && val.target) {
+ const target = val.target;
+
+ if (target.name === 'start_date') {
+ this.state.date_range = {
+ ...this.state.date_range,
+ start_date: target.value
+ };
+ } else if (target.name === 'end_date') {
+ this.state.date_range = {
+ ...this.state.date_range,
+ end_date: target.value
+ };
+ } else if (target.attributes["data-value"]) {
+ const dataValue = target.attributes["data-value"].value;
+
+ // Handle date range presets
+ if (['month', 'year', 'quarter', 'last-month', 'last-year', 'last-quarter'].includes(dataValue)) {
+ this.state.date_range = dataValue;
+ }
+ // Handle account types (Receivable/Payable)
+ else if (dataValue === 'receivable') {
+ if (target.classList.contains("selected-filter")) {
+ const { Receivable, ...updatedAccount } = this.state.account || {};
+ this.state.account = updatedAccount;
+ target.classList.remove("selected-filter");
+ } else {
+ this.state.account = {
+ ...this.state.account,
+ 'Receivable': true
+ };
+ target.classList.add("selected-filter");
+ }
+ } else if (dataValue === 'payable') {
+ if (target.classList.contains("selected-filter")) {
+ const { Payable, ...updatedAccount } = this.state.account || {};
+ this.state.account = updatedAccount;
+ target.classList.remove("selected-filter");
+ } else {
+ this.state.account = {
+ ...this.state.account,
+ 'Payable': true
+ };
+ target.classList.add("selected-filter");
+ }
+ }
+ // Handle options (Draft entries, etc.)
+ else if (dataValue === 'draft') {
+ if (target.classList.contains("selected-filter")) {
+ const { draft, ...updatedOptions } = this.state.options || {};
+ this.state.options = updatedOptions;
+ target.classList.remove("selected-filter");
+ } else {
+ this.state.options = {
+ ...this.state.options,
+ 'draft': true
+ };
+ target.classList.add("selected-filter");
+ }
+ }
+ }
+
+ // Apply all filters after any change
+ await this.applyAllFilters();
+ }
+ }
+
+ async applyAllFilters() {
+ /**
+ * Applies all selected filters (partners, tags, accounts, date range, etc.)
+ */
+ this.state.partners = null;
+ this.state.data = null;
+ this.state.total = null;
+ this.state.filter_applied = true;
+
+ let totalDebitSum = 0;
+ let totalCreditSum = 0;
+ let partner_list = [];
+ let partner_totals = '';
+
+ try {
+ // Call backend with all filter parameters
+ let filtered_data = await this.orm.call(
+ "account.partner.ledger",
+ "get_filter_values",
+ [
+ this.state.selected_partner, // partner IDs
+ this.state.date_range, // date range
+ this.state.account, // account type (receivable/payable)
+ this.state.options, // options (draft entries, etc.)
+ this.state.selected_tag_ids, // partner tag IDs
+ this.state.selected_account_ids // account IDs
+ ]
+ );
+ // Process filtered data
+ for (let index in filtered_data) {
+ const value = filtered_data[index];
+ if (index !== 'partner_totals') {
+ partner_list.push(index);
+ } else {
+ partner_totals = value;
+ Object.values(partner_totals).forEach(partner_data => {
+ totalDebitSum += partner_data.total_debit || 0;
+ totalCreditSum += partner_data.total_credit || 0;
+ partner_data.total_debit_display = this.formatNumberWithSeparators(partner_data.total_debit || 0);
+ partner_data.total_credit_display = this.formatNumberWithSeparators(partner_data.total_credit || 0);
+ });
+ }
+ }
+
+ // Format entries
+ Object.entries(filtered_data).forEach(([key, value]) => {
+ if (key !== 'partner_totals') {
+ value.forEach(entry => {
+ entry[0].debit_display = this.formatNumberWithSeparators(entry[0].debit || 0);
+ entry[0].credit_display = this.formatNumberWithSeparators(entry[0].credit || 0);
+ entry[0].amount_currency_display = this.formatNumberWithSeparators(entry[0].amount_currency || 0);
+ });
+ }
+ });
+
+ // Update state
+ this.state.partners = partner_list;
+ this.state.data = filtered_data;
+ this.state.total = partner_totals;
+ this.state.total_debit = totalDebitSum;
+ this.state.total_debit_display = this.formatNumberWithSeparators(totalDebitSum);
+ this.state.total_credit = totalCreditSum;
+ this.state.total_credit_display = this.formatNumberWithSeparators(totalCreditSum);
+
+ if (this.unfoldButton.el && this.unfoldButton.el.classList.contains("selected-filter")) {
+ this.unfoldButton.el.classList.remove("selected-filter");
+ }
+ } catch (error) {
+ console.error('Error applying filters:', error);
+ }
+ }
+
+
+
+ getDomain() {
+ return [];
+ }
+ async unfoldAll(ev) {
+ /**
+ * Unfolds all items in the table body if the event target does not have the 'selected-filter' class,
+ * or folds all items if the event target has the 'selected-filter' class.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ if (!ev.target.classList.contains("selected-filter")) {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.add('show')
+ }
+ ev.target.classList.add("selected-filter");
+ } else {
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.remove('show')
+ }
+ ev.target.classList.remove("selected-filter");
+ }
+ }
+}
+PartnerLedger.defaultProps = {
+ resIds: [],
+};
+PartnerLedger.template = 'pl_template_new';
+actionRegistry.add("p_l", PartnerLedger);
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/profit_and_loss.js b/third_party_addons/dynamic_accounts_report/static/src/js/profit_and_loss.js
new file mode 100644
index 000000000..830c51352
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/profit_and_loss.js
@@ -0,0 +1,317 @@
+/** @odoo-module **/
+const { Component } = owl;
+const now = new Date();
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState } from "@odoo/owl";
+import { BlockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+const actionRegistry = registry.category("actions");
+
+class ProfitAndLoss extends owl.Component {
+ async setup() {
+ super.setup(...arguments);
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.tbody = useRef('tbody');
+ this.posted = useRef('posted');
+ this.period = useRef('periods');
+ this.period_year = useRef('period_year');
+ this.draft = useRef('draft');
+ this.state = useState({
+ data: null,
+ filter_data: null,
+ year : [now.getFullYear()],
+ comparison: false,
+ comparison_type: null,
+ });
+ this.wizard_id = await this.orm.call("dynamic.balance.sheet.report", "create", [{}]) | null;
+ this.load_data(self.initial_render = true);
+ }
+ async load_data() {
+ /**
+ * Loads the data for the profit and loss report.
+ */
+ var self = this;
+ var action_title = self.props.action.display_name;
+ try {
+ var self = this;
+ let data = await self.orm.call("dynamic.balance.sheet.report", "view_report", [this.wizard_id,this.state.comparison,this.state.comparison_type]);
+ self.state.data = data[0]
+ self.state.datas = data[2]
+ self.state.filter_data = data[1]
+ self.state.title = action_title
+ }
+ catch (el) {
+ window.location.href
+ }
+ }
+ async print_pdf(ev) {
+ /**
+ * Generates and displays a PDF report based on the profit and loss data.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ ev.preventDefault();
+ var self = this;
+ let data = await self.orm.call("dynamic.balance.sheet.report", "view_report", [this.wizard_id,this.state.comparison,this.state.comparison_type]);
+ self.state.data = data[0];
+ self.state.datas = data[2];
+ return self.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.profit_loss',
+ 'report_file': 'dynamic_accounts_report.profit_loss',
+ 'data': {
+ 'data': self.state,
+ 'report_name': self.props.action.display_name
+ },
+ 'display_name': self.props.action.display_name,
+ });
+ }
+ async print_xlsx(ev) {
+ /**
+ * Generates and downloads an XLSX report based on the profit and loss data.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ var self = this;
+ let data = await self.orm.call("dynamic.balance.sheet.report", "view_report", [this.wizard_id,this.state.comparison,this.state.comparison_type]);
+ self.state.data = data[0];
+ self.state.datas = data[2];
+
+ var action = {
+ 'data': {
+ 'model': 'dynamic.balance.sheet.report',
+ 'data': JSON.stringify(self.state),
+ 'output_format': 'xlsx',
+ 'report_action': self.props.action.xml_id,
+ 'report_name': self.props.action.display_name,
+ },
+ };
+
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ async apply_journal(ev) {
+ /**
+ * Applies journal filtering based on the selected option in an event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ self = this;
+ // Toggle the 'selected-filter' class on the event target
+ if (ev.target.classList.contains("selected-filter")) {
+ ev.target.classList.remove('selected-filter');
+ } else {
+ ev.target.classList.add('selected-filter');
+ }
+ // Set the filter object with the 'journal_ids' based on the content of the target span
+ this.filter = {
+ 'journal_ids': ev.target.querySelector('span').textContent,
+ };
+ // Call the 'dynamic.balance.sheet.report' method with the filter parameter
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter]);
+ // Update the innerHTML of the code target element with the result value
+ ev.delegateTarget.querySelector('.code').innerHTML = res[0].journal_ids;
+ self.initial_render = false;
+ self.load_data(self.initial_render);
+ }
+ async apply_account(ev) {
+ /**
+ * Applies account filtering based on the selected option in an event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ self = this;
+ // Toggle the 'selected-filter' class on the event target
+ if (ev.target.classList.contains("selected-filter")) {
+ ev.target.classList.remove('selected-filter');
+ } else {
+ ev.target.classList.add('selected-filter');
+ }
+ // Set the filter object with the 'account_ids' based on the content of the target span
+ this.filter = {
+ 'account_ids': ev.target.querySelector('span').textContent,
+ };
+ // Call the 'dynamic.balance.sheet.report' method with the filter parameter
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter]);
+ // Update the innerHTML of the account target element with the result value
+ ev.delegateTarget.querySelector('.account').innerHTML = res[0].account_ids;
+ self.initial_render = false;
+ self.load_data(self.initial_render);
+ }
+ async show_gl(ev) {
+ /**
+ * Shows the General Ledger view by triggering an action.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: 'ir.actions.client',
+ name: 'General Ledger',
+ tag: 'gen_l',
+ });
+ }
+ async apply_analytic_accounts(ev) {
+ /**
+ * Applies analytic accounts filtering based on the selected option in an event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ self = this;
+ // Toggle the 'selected-filter' class on the event target
+ if (ev.target.classList.contains("selected-filter")) {
+ ev.target.classList.remove('selected-filter');
+ } else {
+ ev.target.classList.add('selected-filter');
+ }
+ // Set the filter object with the 'analytic_ids' based on the content of the target span
+ this.filter = {
+ 'analytic_ids': ev.target.querySelector('span').textContent,
+ };
+ // Call the 'dynamic.balance.sheet.report' method with the filter parameter
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter]);
+ // Update the innerHTML of the analytic target element with the result value
+ ev.delegateTarget.querySelector('.analytic').innerHTML = res[0].analytic_ids;
+ self.initial_render = false;
+ self.load_data(self.initial_render);
+ }
+ async apply_entries(ev) {
+ /**
+ * Applies entries filtering based on the selected option in an event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ self = this;
+ // Add 'selected-filter' class to the event target
+ ev.target.classList.add('selected-filter');
+ if (ev.target.value == 'draft') {
+ // Remove 'selected-filter' class from the 'posted' element
+ this.posted.el.classList.remove('selected-filter');
+ } else {
+ // Remove 'selected-filter' class from the 'draft' element
+ this.draft.el.classList.remove('selected-filter');
+ }
+ // Set the filter object based on the target value
+ this.filter = {
+ 'target': ev.target.value
+ };
+ // Call the 'dynamic.balance.sheet.report' method with the filter parameter
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter]);
+ // Update the innerHTML of the target element with the result value
+ ev.delegateTarget.querySelector('.target').innerHTML = res[0].target_move;
+ self.initial_render = false;
+ self.load_data(self.initial_render);
+ }
+ async unfoldAll(ev) {
+ /**
+ * Unfolds or collapses all elements in a table body based on the given event target's class.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ */
+ if (!ev.target.classList.contains("selected-filter")) {
+ // Unfold all elements
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.add('show')
+ }
+ ev.target.classList.add("selected-filter");
+ } else {
+ // Collapse all elements
+ for (var length = 0; length < this.tbody.el.children.length; length++) {
+ this.tbody.el.children[length].classList.remove('show')
+ }
+ ev.target.classList.remove("selected-filter");
+ }
+ }
+ async apply_date(ev){
+ /**
+ * Applies the selected date filter and triggers data loading based on the selected filter value.
+ * @param {Event} ev - The event object triggered by the date selection.
+ * @returns {Promise} - A promise that resolves when the data is loaded.
+ */
+ self = this
+ if (ev.target.name === 'start_date') {
+ this.filter = {
+ ...this.filter,
+ date_from: ev.target.value
+ };
+ } else if (ev.target.name === 'end_date') {
+ this.filter = {
+ ...this.filter,
+ date_to: ev.target.value
+ };
+ } else if (ev.target.attributes["data-value"].value == 'month') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'year') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'quarter') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'last-month') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'last-year') {
+ this.filter = ev.target.attributes["data-value"].value
+ } else if (ev.target.attributes["data-value"].value == 'last-quarter') {
+ this.filter = ev.target.attributes["data-value"].value
+ }
+ let res = await self.orm.call("dynamic.balance.sheet.report", "filter", [this.wizard_id, this.filter]);
+ self.initial_render = false;
+ this.load_data(this.initial_render);
+ }
+ onPeriodChange(ev){
+ this.period_year.el.value = ev.target.value
+ }
+ onPeriodYearChange(ev){
+ this.period.el.value = ev.target.value
+ }
+ async applyComparisonPeriod(){
+ this.state.comparison = this.period.el.value
+ this.state.comparison_type = "month"
+ let monthNamesShort = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]
+ let res = await this.orm.call("dynamic.balance.sheet.report", "comparison_filter", [this.wizard_id, this.state.comparison]);
+ this.state.year = [monthNamesShort[now.getMonth()]+' ' + now.getFullYear()]
+ for (var length = 0; length < res.length; length++) {
+ const dateObject = new Date(res[length]['date_to']);
+ this.state.year.push(monthNamesShort[dateObject.getMonth()]+' ' + dateObject.getFullYear())
+ }
+ this.load_data(self.initial_render);
+ }
+ sumGrossProfit(op_inc, cor) {
+ /**
+ * Calculates the sum of values in an array of objects by a specified key.
+ *
+ * @param {Array} data - Array of objects containing numeric values.
+ * @param {string} key - The key to access the numeric value in each object.
+ * @returns {number} The sum of the numeric values.
+ */
+ const stringValue = cor;
+ const floatValue = parseFloat(stringValue.replace(/,/g, ''));
+ return parseFloat(op_inc) + floatValue;
+ }
+ async applyComparisonYear(){
+ this.state.comparison = this.period_year.el.value
+ this.state.comparison_type = "year"
+ let res = await this.orm.call("dynamic.balance.sheet.report", "comparison_filter_year", [this.wizard_id, this.state.comparison]);
+ this.state.year = [now.getFullYear()]
+ for (var length = 0; length < res.length; length++) {
+ const dateObject = new Date(res[length]['date_to']);
+ this.state.year.push(dateObject.getFullYear())
+ }
+ this.load_data(self.initial_render);
+ }
+ apply_comparison() {
+ this.state.comparison = false
+ this.state.comparison_type = null
+ this.state.year = [now.getFullYear()]
+ }
+}
+ProfitAndLoss.template = 'dfr_template_new';
+actionRegistry.add("dfr_n", ProfitAndLoss);
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/tax_report.js b/third_party_addons/dynamic_accounts_report/static/src/js/tax_report.js
new file mode 100644
index 000000000..bb1e03ad2
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/tax_report.js
@@ -0,0 +1,485 @@
+/** @odoo-module */
+const { Component } = owl;
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState } from "@odoo/owl";
+import { BlockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+const actionRegistry = registry.category("actions");
+const today = luxon.DateTime.now();
+let monthNamesShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+
+class TaxReport extends owl.Component {
+ async setup() {
+ super.setup(...arguments);
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.tbody = useRef('tbody');
+ this.end_date = useRef('date_to');
+ this.start_date = useRef('date_from');
+ this.global = useRef('global');
+ this.account = useRef('account');
+ this.tax = useRef('tax');
+ this.period = useRef('periods');
+ this.period_year = useRef('period_year');
+ this.unfoldButton = useRef('unfoldButton');
+ this.state = useState({
+ move_line: null,
+ data: null,
+ sale_total: 0.0,
+ purchase_total: 0.0,
+ total: null,
+ journals: null,
+ selected_analytic: [],
+ analytic_account: null,
+ selected_journal_list: [],
+ selected_analytic_account_rec: [],
+ date_range: 'month',
+ date_type: 'month',
+ apply_comparison: false,
+ comparison_type: null,
+ date_viewed: [],
+ comparison_number: null,
+ options: null,
+ report_type: null,
+ method: {
+ 'accural': true
+ },
+ });
+ this.load_data(self.initial_render = true);
+ }
+ async load_data() {
+ /**
+ * Loads the data for the trial balance report.
+ */
+ let move_line_list = []
+ let move_lines_total = ''
+ var self = this;
+ var action_title = self.props.action.display_name;
+ try {
+ var self = this;
+ var today = new Date();
+ var startOfMonth = new Date(today.getFullYear(), today.getMonth(), 1);
+ var endOfMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0);
+ self.state.data = await self.orm.call("tax.report", "view_report", []);
+ self.start_date.el.value = startOfMonth.getFullYear() + '-' + String(startOfMonth.getMonth() + 1).padStart(2, '0') + '-' + String(startOfMonth.getDate()).padStart(2, '0');
+ self.end_date.el.value = endOfMonth.getFullYear() + '-' + String(endOfMonth.getMonth() + 1).padStart(2, '0') + '-' + String(endOfMonth.getDate()).padStart(2, '0');
+ self.state.date_viewed.push(monthNamesShort[today.getMonth()] + ' ' + today.getFullYear())
+ self.state.data.sale.forEach((value) => {
+ self.state.sale_total += value.tax;
+ });
+ self.state.data.purchase.forEach((value) => {
+ self.state.purchase_total += value.tax
+ });
+ }
+ catch (el) {
+ window.location.href;
+ }
+ }
+ async applyFilter(val, ev, is_delete) {
+ if (ev && ev.target && ev.target.attributes["data-value"] && ev.target.attributes["data-value"].value == 'no comparison') {
+ const lastIndex = this.state.date_viewed.length - 1;
+ this.state.date_viewed.splice(0, lastIndex);
+ }
+ if (val && val.target.name === 'start_date') {
+ this.state.date_viewed = []
+ this.state.date_viewed.push('From' + ' ' + this.formatDate(this.start_date.el.value) + ' ' + 'To' + ' ' + this.formatDate(this.end_date.el.value))
+ this.state.date_range = {
+ ...this.state.date_range,
+ start_date: val.target.value
+ };
+ } else if (val && val.target.name === 'end_date') {
+ this.state.date_viewed = []
+ this.state.date_viewed.push('From' + ' ' + this.formatDate(this.start_date.el.value) + 'To' + ' ' + this.formatDate(this.end_date.el.value))
+ this.state.date_range = {
+ ...this.state.date_range,
+ end_date: val.target.value
+ };
+ } else if (val && val.target.attributes["data-value"].value == 'month') {
+ this.start_date.el.value = today.startOf('month').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.endOf('month').toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push(today.monthShort + ' ' + today.c.year)
+ this.state.date_type = val.target.attributes["data-value"].value
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ } else if (val && val.target.attributes["data-value"].value == 'year') {
+ this.start_date.el.value = today.startOf('year').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.endOf('year').toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push(today.c.year)
+ this.state.date_type = val.target.attributes["data-value"].value
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ } else if (val && val.target.attributes["data-value"].value == 'quarter') {
+ this.start_date.el.value = today.startOf('quarter').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.endOf('quarter').toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push('Q' + ' ' + today.quarter)
+ this.state.comparison_type = 'quarter'
+ this.state.date_type = val.target.attributes["data-value"].value
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ } else if (val && val.target.attributes["data-value"].value == 'last-month') {
+ this.start_date.el.value = today.startOf('month').minus({ days: 1 }).startOf('month').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.startOf('month').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push(today.startOf('month').minus({ days: 1 }).monthShort + ' ' + today.startOf('month').minus({ days: 1 }).c.year)
+ this.state.date_type = 'month'
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ } else if (val && val.target.attributes["data-value"].value == 'last-year') {
+ this.start_date.el.value = today.startOf('year').minus({ days: 1 }).startOf('year').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.startOf('year').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push(today.startOf('year').minus({ days: 1 }).c.year)
+ this.state.date_type = 'year'
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ } else if (val && val.target.attributes["data-value"].value == 'last-quarter') {
+ this.start_date.el.value = today.startOf('quarter').minus({ days: 1 }).startOf('quarter').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.startOf('quarter').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push('Q' + ' ' + today.startOf('quarter').minus({ days: 1 }).quarter)
+ this.state.date_type = 'quarter'
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ } else if (val && val.target.attributes["data-value"].value === 'draft') {
+ if (val.target.classList.contains("selected-filter")) {
+ const { draft, ...updatedAccount } = this.state.options;
+ this.state.options = updatedAccount;
+ val.target.classList.remove("selected-filter");
+ } else {
+ this.state.options = {
+ ...this.state.options,
+ 'draft': true
+ };
+ val.target.classList.add("selected-filter");
+ }
+ } else if (val && val.target.attributes["data-value"].value === 'account tax') {
+ if (val.target.classList.contains("selected-filter")) {
+ const { account, ...updatedAccount } = this.state.report_type;
+ this.state.report_type = updatedAccount;
+ val.target.classList.remove("selected-filter");
+ } else {
+ this.state.report_type = {
+ 'account': true
+ };
+ val.target.classList.add("selected-filter");
+ if(this.tax.el.classList.contains("selected-filter")) {
+ this.tax.el.classList.remove("selected-filter");
+ }
+ if(this.global.el.classList.contains("selected-filter")) {
+ this.global.el.classList.remove("selected-filter");
+ }
+ }
+ } else if (val && val.target.attributes["data-value"].value === 'tax account') {
+ if (val.target.classList.contains("selected-filter")) {
+ const { tax, ...updatedAccount } = this.state.report_type;
+ this.state.report_type = updatedAccount;
+ val.target.classList.remove("selected-filter");
+ } else {
+ this.state.report_type = {
+ 'tax': true
+ };
+ val.target.classList.add("selected-filter");
+ if(this.account.el.classList.contains("selected-filter")) {
+ this.account.el.classList.remove("selected-filter");
+ }
+ if(this.global.el.classList.contains("selected-filter")) {
+ this.global.el.classList.remove("selected-filter");
+ }
+ }
+ } else if (val && val.target.attributes["data-value"].value === 'global') {
+ if (val.target.classList.contains("selected-filter")) {
+ const { global, ...updatedAccount } = this.state.report_type;
+ this.state.report_type = updatedAccount;
+ val.target.classList.remove("selected-filter");
+ } else {
+ this.state.report_type = null
+ val.target.classList.add("selected-filter");
+ if(this.account.el.classList.contains("selected-filter")) {
+ this.account.el.classList.remove("selected-filter");
+ }
+ if(this.tax.el.classList.contains("selected-filter")) {
+ this.tax.el.classList.remove("selected-filter");
+ }
+ }
+ }
+ if (this.state.apply_comparison == true) {
+ if (this.state.comparison_type == 'year') {
+ this.state.date_viewed = []
+ if (this.start_date.el.value) {
+ var current_year = new Date(this.start_date.el.value).getFullYear();
+ var month = new Date(this.start_date.el.value).getMonth();
+ } else {
+ var current_year = new Date(today).getFullYear();
+ var month = new Date(today).getMonth()
+ }
+ this.state.comparison_number = this.period_year.el.value
+ for (var i = this.state.comparison_number; i >= 0; i--) {
+ var date = monthNamesShort[month] + ' ' + (current_year - i);
+ this.state.date_viewed.push(date);
+ }
+ } else if (this.state.comparison_type == 'month') {
+ this.state.date_viewed = []
+ this.state.comparison_number = this.period.el.value
+ } else if (this.state.comparison_type == 'quarter') {
+ this.state.date_viewed = []
+ this.state.comparison_number = this.period.el.value
+ }
+ }
+ this.state.data = await this.orm.call("tax.report", "get_filter_values", [this.start_date.el.value, this.end_date.el.value, this.state.comparison_number, this.state.comparison_type, this.state.options,this.state.report_type,]);
+ var date_viewed = []
+ var sale_total = 0.0
+ var purchase_total = 0.0
+ this.state.data.sale.forEach((value) => {
+ sale_total += value.tax;
+ });
+ this.state.data.purchase.forEach((value) => {
+ purchase_total += value.tax;
+ });
+ var date_viewed = []
+ let iterable = Array.isArray(this.state.data.dynamic_date_num)
+ ? this.state.data.dynamic_date_num
+ : Object.values(this.state.data.dynamic_date_num);
+ for (const date_num of iterable) {
+ if (!date_viewed.includes(date_num)) {
+ date_viewed.push(date_num);
+ }
+ }
+ if (date_viewed.length !== 0) {
+ this.state.date_viewed = date_viewed.reverse()
+ }
+ this.state.sale_total = sale_total
+ this.state.purchase_total = purchase_total
+ }
+ async printPdf(ev) {
+ /**
+ * Asynchronously generates and prints a PDF report.
+ * Triggers an action to generate a PDF report based on the current state and settings.
+ *
+ * @param {Event} ev - Event object triggering the PDF report generation.
+ * @returns {Promise} A promise that resolves after the PDF report action is triggered.
+ */
+ ev.preventDefault();
+ var self = this;
+ var action_title = self.props.action.display_name;
+ let comparison_number_range = self.comparison_number_range
+ let date_viewed = self.state.date_viewed
+ if (self.state.apply_comparison) {
+ if (self.comparison_number_range.length > 10) {
+ comparison_number_range = self.comparison_number_range.slice(-10);
+ date_viewed = self.state.date_viewed.slice(-11);
+ }
+ }
+ return self.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.tax_report',
+ 'report_file': 'dynamic_accounts_report.tax_report',
+ 'data': {
+ 'data': self.state.data,
+ 'sale_total': self.state.sale_total,
+ 'purchase_total': self.state.purchase_total,
+ 'date_viewed': date_viewed,
+ 'apply_comparison': self.state.apply_comparison,
+ 'comparison_number_range': comparison_number_range,
+ 'report_type': self.state.report_type,
+ 'filters': this.filter(),
+ 'title': action_title,
+ 'report_name': self.props.action.display_name
+ },
+ 'display_name': self.props.action.display_name,
+ });
+ }
+ async print_xlsx() {
+ /**
+ * Asynchronously generates and downloads an XLSX report.
+ * Triggers an action to generate an XLSX report based on the current state and settings,
+ * and initiates the download of the generated XLSX file.
+ *
+ * @returns {void} No explicit return value.
+ */
+ var self = this;
+ var action_title = self.props.action.display_name;
+ var datas = {
+ 'data': self.state.data,
+ 'sale_total': self.state.sale_total,
+ 'purchase_total': self.state.purchase_total,
+ 'date_viewed': self.state.date_viewed,
+ 'apply_comparison': self.state.apply_comparison,
+ 'comparison_number_range': self.comparison_number_range,
+ 'report_type': self.state.report_type,
+ 'filters': this.filter(),
+ 'title': action_title,
+ 'report_name': self.props.action.display_name
+ }
+ var action = {
+ 'data': {
+ 'model': 'tax.report',
+ 'data': JSON.stringify(datas),
+ 'output_format': 'xlsx',
+ 'report_action': self.props.action.id,
+ 'report_name': action_title,
+ },
+ };
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ filter() {
+ var self=this;
+ let startDate, endDate;
+ let startYear, startMonth, startDay, endYear, endMonth, endDay;
+ if (self.state.date_range){
+ const today = new Date();
+ if (self.state.date_range === 'year') {
+ startDate = new Date(today.getFullYear(), 0, 1);
+ endDate = new Date(today.getFullYear(), 11, 31);
+ } else if (self.state.date_range === 'quarter') {
+ const currentQuarter = Math.floor(today.getMonth() / 3);
+ startDate = new Date(today.getFullYear(), currentQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (currentQuarter + 1) * 3, 0);
+ } else if (self.state.date_range === 'month') {
+ startDate = new Date(today.getFullYear(), today.getMonth(), 1);
+ endDate = new Date(today.getFullYear(), today.getMonth() + 1, 0);
+ } else if (self.state.date_range === 'last-month') {
+ startDate = new Date(today.getFullYear(), today.getMonth() - 1, 1);
+ endDate = new Date(today.getFullYear(), today.getMonth(), 0);
+ } else if (self.state.date_range === 'last-year') {
+ startDate = new Date(today.getFullYear() - 1, 0, 1);
+ endDate = new Date(today.getFullYear() - 1, 11, 31);
+ } else if (self.state.date_range === 'last-quarter') {
+ const lastQuarter = Math.floor((today.getMonth() - 3) / 3);
+ startDate = new Date(today.getFullYear(), lastQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (lastQuarter + 1) * 3, 0);
+ }
+ // Get the date components for start and end dates
+ if (startDate) {
+ startYear = startDate.getFullYear();
+ startMonth = startDate.getMonth() + 1;
+ startDay = startDate.getDate();
+ }
+ if (endDate) {
+ endYear = endDate.getFullYear();
+ endMonth = endDate.getMonth() + 1;
+ endDay = endDate.getDate();
+ }
+ }
+ let filters = {
+ 'options': self.state.options,
+ 'comparison_type': self.state.comparison_type,
+ 'comparison_number_range': self.state.comparison_number,
+ 'start_date': null,
+ 'end_date': null,
+ };
+ // Check if start and end dates are available before adding them to the filters object
+ if (startYear !== undefined && startMonth !== undefined && startDay !== undefined &&
+ endYear !== undefined && endMonth !== undefined && endDay !== undefined) {
+ filters['start_date'] = `${startYear}-${startMonth < 10 ? '0' : ''}${startMonth}-${startDay < 10 ? '0' : ''}${startDay}`;
+ filters['end_date'] = `${endYear}-${endMonth < 10 ? '0' : ''}${endMonth}-${endDay < 10 ? '0' : ''}${endDay}`;
+ }
+ return filters
+ }
+ onPeriodChange(ev) {
+ /**
+ * Event handler for period change.
+ * Updates the value of 'period_year' element based on the event target value.
+ *
+ * @param {Event} ev - Event object triggered by the period change.
+ * @returns {void} No explicit return value.
+ */
+ this.period_year.el.value = ev.target.value
+ }
+ onPeriodYearChange(ev) {
+ /**
+ * Event handler for period year change.
+ * Updates the value of 'period' element based on the event target value.
+ *
+ * @param {Event} ev - Event object triggered by the period year change.
+ * @returns {void} No explicit return value.
+ */
+ this.period.el.value = ev.target.value
+ }
+ applyComparisonPeriod(ev) {
+ /**
+ * Applies a comparison period and triggers data filtering.
+ * Sets 'apply_comparison' flag to true and updates 'comparison_type'.
+ * Invokes 'applyFilter' method to apply filters and load data.
+ *
+ * @param {Event} ev - Event object triggering the comparison period application.
+ * @returns {void} No explicit return value.
+ */
+ this.state.apply_comparison = true
+ this.state.comparison_type = this.state.date_type
+ this.applyFilter(null, ev)
+ }
+ applyComparisonYear(ev) {
+ /**
+ * Applies a comparison year and triggers data filtering.
+ * Sets 'apply_comparison' flag to true and updates 'comparison_type' to 'year'.
+ * Invokes 'applyFilter' method to apply filters and load data.
+ *
+ * @param {Event} ev - Event object triggering the comparison year application.
+ * @returns {void} No explicit return value.
+ */
+ this.state.apply_comparison = true
+ this.state.comparison_type = 'year'
+ this.applyFilter(null, ev)
+ }
+ async applyComparison(ev) {
+ /**
+ * Disables comparison mode, resets comparison settings, and triggers data filtering.
+ * Sets 'apply_comparison' flag to false and clears 'comparison_type' and 'comparison_number'.
+ * Removes all date view entries except the current month/year.
+ * Invokes 'applyFilter' method to apply filters and load data.
+ *
+ * @param {Event} ev - Event object triggering the comparison mode removal.
+ * @returns {void} No explicit return value.
+ */
+ this.state.apply_comparison = false
+ this.state.comparison_type = null
+ this.state.comparison_number = null
+ const lastIndex = this.state.date_viewed.length - 1;
+ this.state.date_viewed.splice(0, lastIndex);
+ this.applyFilter(null, ev)
+ }
+ get comparison_number_range() {
+ /**
+ * Generates an array of numbers representing a comparison number range.
+ * The range includes numbers from 1 up to the 'comparison_number' value in the state.
+ *
+ * @returns {Array} An array of numbers representing the comparison number range.
+ */
+ const range = [];
+ for (let i = 1; i <= this.state.comparison_number; i++) {
+ range.push(i);
+ }
+ return range.reverse();
+ }
+}
+TaxReport.template = 'tax_r_template_new';
+actionRegistry.add("tax_r", TaxReport);
diff --git a/third_party_addons/dynamic_accounts_report/static/src/js/trial_balance.js b/third_party_addons/dynamic_accounts_report/static/src/js/trial_balance.js
new file mode 100644
index 000000000..414ad71b7
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/js/trial_balance.js
@@ -0,0 +1,591 @@
+/** @odoo-module */
+const { Component } = owl;
+import { registry } from "@web/core/registry";
+import { useService } from "@web/core/utils/hooks";
+import { useRef, useState, useEffect } from "@odoo/owl";
+import { BlockUI } from "@web/core/ui/block_ui";
+import { download } from "@web/core/network/download";
+const actionRegistry = registry.category("actions");
+const today = luxon.DateTime.now();
+let monthNamesShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+
+class TrialBalance extends owl.Component {
+ async setup() {
+ this.initial_render = true;
+ this.orm = useService('orm');
+ this.action = useService('action');
+ this.tbody = useRef('tbody');
+ this.end_date = useRef('date_to');
+ this.start_date = useRef('date_from');
+ this.period = useRef('periods');
+ this.period_year = useRef('period_year');
+ this.unfoldButton = useRef('unfoldButton');
+ this.state = useState({
+ move_line: null,
+ default_report: true,
+ data: null,
+ totals: null,
+ journals: null,
+ accounts: null,
+ selected_analytic: [],
+ analytic_account: null,
+ selected_journal_list: [],
+ selected_analytic_account_rec: [],
+ date_range: 'month',
+ date_type: 'month',
+ apply_comparison: false,
+ comparison_type: null,
+ date_viewed: [],
+ comparison_number: null,
+ options: null,
+ has_filters: false,
+ filter_version: 0, // Add this to force re-render
+ method: {
+ 'accural': true
+ },
+ });
+ this.load_data(self.initial_render = true);
+ }
+ async load_data() {
+ /**
+ * Asynchronously loads initial data for the trial balance report.
+ * Fetches default trial balance data and populates the component state.
+ */
+ let move_line_list = []
+ let move_lines_total = ''
+ var self = this;
+ var action_title = self.props.action.display_name;
+ try {
+ var self = this;
+ var today = new Date();
+ var startOfMonth = new Date(today.getFullYear(), today.getMonth(), 1);
+ var endOfMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0);
+ let result = await self.orm.call("account.trial.balance", "view_report", []);
+ self.state.data = result[0];
+ self.state.totals = result[2];
+ self.start_date.el.value = startOfMonth.getFullYear() + '-' + String(startOfMonth.getMonth() + 1).padStart(2, '0') + '-' + String(startOfMonth.getDate()).padStart(2, '0');
+ self.end_date.el.value = endOfMonth.getFullYear() + '-' + String(endOfMonth.getMonth() + 1).padStart(2, '0') + '-' + String(endOfMonth.getDate()).padStart(2, '0');
+ self.state.date_viewed.push(monthNamesShort[today.getMonth()] + ' ' + today.getFullYear())
+ self.state.journals = result[1]['journal_ids']
+ self.state.accounts = self.state.data
+ // Reset to default report state when loading initial data
+ self.state.default_report = true;
+ self.state.has_filters = false; // Reset filters flag
+ $.each(self.state.data, function (index, value) {
+ self.state.journals = value.journal_ids
+ })
+ }
+ catch (el) {
+ window.location.href;
+ }
+ }
+ async applyFilter(val, ev, is_delete) {
+ /**
+ * Asynchronously applies filters to the trial balance report.
+ * Fetches data based on selected filters and updates the component state.
+ * Updates 'state.data' with the retrieved data.
+ * Handles the comparison logic and updates 'state.date_viewed' accordingly.
+ * Reverses the order of 'state.date_viewed' if data exists.
+ *
+ * @param {any} val - The selected filter value or event.
+ * @param {Event} ev - The event object triggered by the filter.
+ * @param {boolean} is_delete - Flag indicating if the filter is being deleted.
+ * @returns {Promise} Resolves when the filter is applied and data is loaded.
+ */
+
+ // Set filter flags for ANY filter operation (including date changes)
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1; // Force re-render
+
+ if (ev && ev.target && ev.target.attributes["data-value"] && ev.target.attributes["data-value"].value == 'no comparison') {
+ const lastIndex = this.state.date_viewed.length - 1;
+ this.state.date_viewed.splice(0, lastIndex);
+ }
+
+ if (ev) {
+ if (ev.input && ev.input.attributes.placeholder.value == 'Account' && !is_delete) {
+ this.state.selected_analytic.push(val[0].id)
+ this.state.selected_analytic_account_rec.push(val[0])
+ } else if (is_delete) {
+ let index = this.state.selected_analytic_account_rec.indexOf(val)
+ this.state.selected_analytic_account_rec.splice(index, 1)
+ this.state.selected_analytic = this.state.selected_analytic_account_rec.map((rec) => rec.id)
+ }
+ }
+ else {
+ if (val && val.target.name === 'start_date') {
+ this.state.date_viewed = []
+ this.state.date_viewed.push('From' + ' ' + this.formatDate(this.start_date.el.value) + ' ' + 'To' + ' ' + this.formatDate(this.end_date.el.value))
+ this.state.date_range = {
+ ...this.state.date_range,
+ start_date: val.target.value
+ };
+ } else if (val && val.target.name === 'end_date') {
+ this.state.date_viewed = []
+ this.state.date_viewed.push('From' + ' ' + this.formatDate(this.start_date.el.value) + 'To' + ' ' + this.formatDate(this.end_date.el.value))
+ this.state.date_range = {
+ ...this.state.date_range,
+ end_date: val.target.value
+ };
+ } else if (val && val.target.attributes["data-value"].value == 'month') {
+ this.start_date.el.value = today.startOf('month').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.endOf('month').toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push(today.monthShort + ' ' + today.c.year)
+ this.state.date_type = val.target.attributes["data-value"].value
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ // Set filter flags for date range selection
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1;
+ } else if (val && val.target.attributes["data-value"].value == 'year') {
+ this.start_date.el.value = today.startOf('year').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.endOf('year').toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push(today.c.year)
+ this.state.date_type = val.target.attributes["data-value"].value
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ // Set filter flags for date range selection
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1;
+ } else if (val && val.target.attributes["data-value"].value == 'quarter') {
+ this.start_date.el.value = today.startOf('quarter').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.endOf('quarter').toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push('Q' + ' ' + today.quarter)
+ this.state.date_type = val.target.attributes["data-value"].value
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ // Set filter flags for date range selection
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1;
+ } else if (val && val.target.attributes["data-value"].value == 'last-month') {
+ this.start_date.el.value = today.startOf('month').minus({ days: 1 }).startOf('month').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.startOf('month').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push(today.startOf('month').minus({ days: 1 }).monthShort + ' ' + today.startOf('month').minus({ days: 1 }).c.year)
+ this.state.date_type = 'month'
+ this.state.comparison_type = this.state.date_type
+ console.log("amrutha test")
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ // Set filter flags for date range selection
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1;
+ } else if (val && val.target.attributes["data-value"].value == 'last-year') {
+ this.start_date.el.value = today.startOf('year').minus({ days: 1 }).startOf('year').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.startOf('year').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push(today.startOf('year').minus({ days: 1 }).c.year)
+ this.state.date_type = 'year'
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ // Set filter flags for date range selection
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1;
+ } else if (val && val.target.attributes["data-value"].value == 'last-quarter') {
+ this.start_date.el.value = today.startOf('quarter').minus({ days: 1 }).startOf('quarter').toFormat('yyyy-MM-dd')
+ this.end_date.el.value = today.startOf('quarter').minus({ days: 1 }).toFormat('yyyy-MM-dd')
+ this.state.date_viewed = []
+ this.state.date_viewed.push('Q' + ' ' + today.startOf('quarter').minus({ days: 1 }).quarter)
+ this.state.date_type = 'quarter'
+ this.state.comparison_type = this.state.date_type
+ this.state.date_range = {
+ start_date: this.start_date.el.value,
+ end_date: this.end_date.el.value
+ };
+ // Set filter flags for date range selection
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1;
+ } else if (val && val.target.attributes["data-value"].value == 'journal') {
+ if (!val.target.classList.contains("selected-filter")) {
+ this.state.selected_journal_list.push(parseInt(val.target.attributes["data-id"].value, 10))
+ val.target.classList.add("selected-filter");
+ } else {
+ const updatedList = this.state.selected_journal_list.filter(item => item !== parseInt(val.target.attributes["data-id"].value, 10));
+ this.state.selected_journal_list = updatedList
+ val.target.classList.remove("selected-filter");
+ }
+ // Set filter flags for journal selection
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1;
+ } else if (val && val.target.attributes["data-value"].value === 'draft') {
+ if (val.target.classList.contains("selected-filter")) {
+ const { draft, ...updatedAccount } = this.state.options;
+ this.state.options = updatedAccount;
+ val.target.classList.remove("selected-filter");
+ } else {
+ this.state.options = {
+ ...this.state.options,
+ 'draft': true
+ };
+ val.target.classList.add("selected-filter");
+ }
+ // Set filter flags for draft selection
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1;
+ }else if (val.target.attributes["data-value"].value === 'cash-basis') {
+ if (this.start_date.el.value) {
+ var current_year = new Date(this.start_date.el.value).getFullYear();
+ var month = new Date(this.start_date.el.value).getMonth();
+ } else {
+ var current_year = new Date(today).getFullYear();
+ var month = new Date(today).getMonth()
+ }
+ // Set filter flags for cash-basis selection
+ this.state.has_filters = true;
+ this.state.default_report = false;
+ this.state.filter_version += 1;
+ }
+ }
+ if (this.state.apply_comparison == true) {
+ if (this.state.comparison_type == 'year') {
+ this.state.date_viewed = []
+ if (this.start_date.el.value) {
+ var current_year = new Date(this.start_date.el.value).getFullYear();
+ var month = new Date(this.start_date.el.value).getMonth();
+ } else {
+ var current_year = new Date(today).getFullYear();
+ var month = new Date(today).getMonth()
+ }
+ this.state.comparison_number = this.period_year.el.value
+ for (var i = this.state.comparison_number; i >= 0; i--) {
+ var date = monthNamesShort[month] + ' ' + (current_year - i);
+ this.state.date_viewed.push(date);
+ }
+ } else if (this.state.comparison_type == 'month') {
+ this.state.date_viewed = []
+ this.state.comparison_number = this.period.el.value
+ } else if (this.state.comparison_type == 'quarter') {
+ this.state.date_viewed = []
+ this.state.comparison_number = this.period.el.value
+ }
+ }
+ this.state.data = await this.orm.call("account.trial.balance", "get_filter_values", [this.start_date.el.value, this.end_date.el.value, this.state.comparison_number, this.state.comparison_type, this.state.selected_journal_list, this.state.selected_analytic, this.state.options,this.state.method,]);
+ this.state.totals = this.state.data[1];
+ this.state.data = this.state.data[0];
+ var date_viewed = []
+ if (date_viewed.length !== 0) {
+ this.state.date_viewed = date_viewed.reverse()
+ }
+ }
+ onPeriodChange(ev) {
+ /**
+ * Event handler for period change.
+ * Updates the value of 'period_year' element based on the event target value.
+ *
+ * @param {Event} ev - Event object triggered by the period change.
+ * @returns {void} No explicit return value.
+ */
+ this.period_year.el.value = ev.target.value
+ }
+ onPeriodYearChange(ev) {
+ /**
+ * Event handler for period year change.
+ * Updates the value of 'period' element based on the event target value.
+ *
+ * @param {Event} ev - Event object triggered by the period year change.
+ * @returns {void} No explicit return value.
+ */
+ this.period.el.value = ev.target.value
+ }
+ applyComparisonPeriod(ev) {
+ /**
+ * Applies a comparison period and triggers data filtering.
+ * Sets 'apply_comparison' flag to true and updates 'comparison_type'.
+ * Invokes 'applyFilter' method to apply filters and load data.
+ *
+ * @param {Event} ev - Event object triggering the comparison period application.
+ * @returns {void} No explicit return value.
+ */
+ this.state.apply_comparison = true
+ this.state.comparison_type = this.state.date_type
+ this.applyFilter(null, ev)
+ }
+ applyComparisonYear(ev) {
+ /**
+ * Applies a comparison year and triggers data filtering.
+ * Sets 'apply_comparison' flag to true and updates 'comparison_type' to 'year'.
+ * Invokes 'applyFilter' method to apply filters and load data.
+ *
+ * @param {Event} ev - Event object triggering the comparison year application.
+ * @returns {void} No explicit return value.
+ */
+ this.state.apply_comparison = true
+ this.state.comparison_type = 'year'
+ this.applyFilter(null, ev)
+ }
+ sumByKey(data, key) {
+ if (!Array.isArray(data)) return 0;
+ const total = data.reduce((acc, item) => {
+ let raw = item[key];
+ if (typeof raw === 'string') {
+ raw = raw.replace(/,/g, ''); // remove commas
+ }
+ const val = parseFloat(raw);
+ return acc + (isNaN(val) ? 0 : val);
+ }, 0);
+ // Format with commas and 2 decimal places
+ return total.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
+ }
+ get comparison_number_range() {
+ /**
+ * Generates an array of numbers representing a comparison number range.
+ * The range includes numbers from 1 up to the 'comparison_number' value in the state.
+ *
+ * @returns {Array} An array of numbers representing the comparison number range.
+ */
+ const range = [];
+ for (let i = 1; i <= this.state.comparison_number; i++) {
+ range.push(i);
+ }
+ return range;
+ }
+ async applyComparison(ev) {
+ /**
+ * Disables comparison mode, resets comparison settings, and triggers data filtering.
+ * Sets 'apply_comparison' flag to false and clears 'comparison_type' and 'comparison_number'.
+ * Removes all date view entries except the current month/year.
+ * Invokes 'applyFilter' method to apply filters and load data.
+ *
+ * @param {Event} ev - Event object triggering the comparison mode removal.
+ * @returns {void} No explicit return value.
+ */
+ this.state.apply_comparison = false
+ this.state.comparison_type = null
+ this.state.comparison_number = null
+ const lastIndex = this.state.date_viewed.length - 1;
+ this.state.date_viewed.splice(0, lastIndex);
+ this.applyFilter(null, ev)
+ }
+ getDomain() {
+ return [];
+ }
+
+ normalizeReportData(rawData) {
+ // 1️⃣ If rawData is nested (like [[{...}, {...}], {...}]), flatten it
+ let accounts = Array.isArray(rawData) && Array.isArray(rawData[0])
+ ? rawData[0] // extract the inner array
+ : rawData;
+
+ // 2️⃣ Ensure numeric fields are actual numbers, not strings
+ accounts = accounts.map(acc => ({
+ ...acc,
+ initial_total_debit: Number(acc.initial_total_debit) || 0,
+ initial_total_credit: Number(acc.initial_total_credit) || 0,
+ total_debit: Number(acc.total_debit) || 0,
+ total_credit: Number(acc.total_credit) || 0,
+ end_total_debit: Number(acc.end_total_debit) || 0,
+ end_total_credit: Number(acc.end_total_credit) || 0
+ }));
+
+ return accounts;
+ }
+
+ async printPdf(ev) {
+ /**
+ * Asynchronously generates and prints a PDF report.
+ * Triggers an action to generate a PDF report based on the current state and settings.
+ *
+ * @param {Event} ev - Event object triggering the PDF report generation.
+ * @returns {Promise} A promise that resolves after the PDF report action is triggered.
+ */
+ ev.preventDefault();
+ var self = this;
+ var action_title = self.props.action.display_name;
+ let comparison_number_range = self.comparison_number_range
+ let data_viewed = self.state.date_viewed
+
+ if (self.state.apply_comparison) {
+ if (self.comparison_number_range.length > 10) {
+ comparison_number_range = self.comparison_number_range.slice(-10);
+ data_viewed = self.state.date_viewed.slice(-11);
+ }
+ }
+ return self.action.doAction({
+ 'type': 'ir.actions.report',
+ 'report_type': 'qweb-pdf',
+ 'report_name': 'dynamic_accounts_report.trial_balance',
+ 'report_file': 'dynamic_accounts_report.trial_balance',
+ 'data': {
+ 'data': this.normalizeReportData(self.state.data),
+ 'totals': self.state.totals,
+ 'date_viewed': data_viewed,
+ 'filters': this.filter(),
+ 'apply_comparison': self.state.apply_comparison,
+ 'comparison_number_range': comparison_number_range,
+ 'title': action_title,
+ 'report_name': self.props.action.display_name
+ },
+ 'display_name': self.props.action.display_name,
+ });
+ }
+ filter() {
+ var self=this;
+ let startDate, endDate;
+ let startYear, startMonth, startDay, endYear, endMonth, endDay;
+ if (self.state.date_type){
+ const today = new Date();
+ if (self.state.date_type === 'year') {
+ startDate = new Date(today.getFullYear(), 0, 1);
+ endDate = new Date(today.getFullYear(), 11, 31);
+ } else if (self.state.date_type === 'quarter') {
+ const currentQuarter = Math.floor(today.getMonth() / 3);
+ startDate = new Date(today.getFullYear(), currentQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (currentQuarter + 1) * 3, 0);
+ } else if (self.state.date_type === 'month') {
+ startDate = new Date(today.getFullYear(), today.getMonth(), 1);
+ endDate = new Date(today.getFullYear(), today.getMonth() + 1, 0);
+ } else if (self.state.date_type === 'last-month') {
+ startDate = new Date(today.getFullYear(), today.getMonth() - 1, 1);
+ endDate = new Date(today.getFullYear(), today.getMonth(), 0);
+ } else if (self.state.date_type === 'last-year') {
+ startDate = new Date(today.getFullYear() - 1, 0, 1);
+ endDate = new Date(today.getFullYear() - 1, 11, 31);
+ } else if (self.state.date_type === 'last-quarter') {
+ const lastQuarter = Math.floor((today.getMonth() - 3) / 3);
+ startDate = new Date(today.getFullYear(), lastQuarter * 3, 1);
+ endDate = new Date(today.getFullYear(), (lastQuarter + 1) * 3, 0);
+ }
+ // Get the date components for start and end dates
+ if (startDate) {
+ startYear = startDate.getFullYear();
+ startMonth = startDate.getMonth() + 1;
+ startDay = startDate.getDate();
+ }
+ if (endDate) {
+ endYear = endDate.getFullYear();
+ endMonth = endDate.getMonth() + 1;
+ endDay = endDate.getDate();
+ }
+ }
+ const selectedJournalIDs = Object.values(self.state.selected_journal_list);
+ const selectedJournalNames = selectedJournalIDs.map((journalID) => {
+ const journal = self.state.journals[journalID];
+ return journal ? journal.name : ''; // Return the name if journal exists, otherwise an empty string
+ });
+ let filters = {
+ 'journal': selectedJournalNames,
+ 'account': self.state.selected_analytic_account_rec,
+ 'options': self.state.options,
+ 'comparison_type': self.state.comparison_type,
+ 'comparison_number_range': self.state.comparison_number,
+ 'start_date': null,
+ 'end_date': null,
+ };
+ // Check if start and end dates are available before adding them to the filters object
+ if (startYear !== undefined && startMonth !== undefined && startDay !== undefined &&
+ endYear !== undefined && endMonth !== undefined && endDay !== undefined) {
+ filters['start_date'] = `${startYear}-${startMonth < 10 ? '0' : ''}${startMonth}-${startDay < 10 ? '0' : ''}${startDay}`;
+ filters['end_date'] = `${endYear}-${endMonth < 10 ? '0' : ''}${endMonth}-${endDay < 10 ? '0' : ''}${endDay}`;
+ }
+ return filters
+ }
+
+ async print_xlsx() {
+ /**
+ * Asynchronously generates and downloads an XLSX report.
+ * Triggers an action to generate an XLSX report based on the current state and settings,
+ * and initiates the download of the generated XLSX file.
+ *
+ * @returns {void} No explicit return value.
+ */
+ var self = this;
+ var action_title = self.props.action.display_name;
+ var datas = {
+ 'data': this.normalizeReportData(self.state.data),
+ 'totals': self.state.totals,
+ 'date_viewed': self.state.date_viewed,
+ 'filters': this.filter(),
+ 'apply_comparison': self.state.apply_comparison,
+ 'comparison_number_range': self.comparison_number_range,
+ 'title': action_title,
+ 'report_name': self.props.action.display_name
+ }
+ var action = {
+ 'data': {
+ 'model': 'account.trial.balance',
+ 'data': JSON.stringify(datas),
+ 'output_format': 'xlsx',
+ 'report_action': self.props.action.xml_id,
+ 'report_name': action_title,
+ },
+ };
+ BlockUI;
+ await download({
+ url: '/xlsx_report',
+ data: action.data,
+ complete: () => unblockUI,
+ error: (error) => self.call('crash_manager', 'rpc_error', error),
+ });
+ }
+ async show_gl(ev) {
+ /**
+ * Shows the General Ledger view by triggering an action.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: 'ir.actions.client',
+ name: 'General Ledger',
+ tag: 'gen_l',
+ });
+ }
+ formatDate(dateString) {
+ /**
+ * Formats a date string in "YYYY-MM-DD" format to "DD/MM/YYYY" format.
+ *
+ * @param {string} dateString - The date string to be formatted.
+ * @returns {string} The formatted date in "DD/MM/YYYY" format.
+ */
+ const date = new Date(dateString);
+ const day = date.getDate().toString().padStart(2, '0');
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
+ const year = date.getFullYear();
+ return `${day}/${month}/${year}`;
+ }
+ gotoJournalItem(ev) {
+ /**
+ * Navigates to the journal items list view based on the selected event target.
+ *
+ * @param {Event} ev - The event object triggered by the action.
+ * @returns {Promise} - A promise that resolves to the result of the action.
+ */
+ return this.action.doAction({
+ type: "ir.actions.act_window",
+ res_model: 'account.move.line',
+ name: "Journal Items",
+ views: [[false, "list"]],
+ domain: [["account_id", "=", parseInt(ev.target.attributes["data-id"].value, 10)]],
+ context: { group_by: ["account_id"] },
+ target: "current",
+ });
+ }
+}
+TrialBalance.template = 'trl_b_template_new';
+actionRegistry.add("trl_b", TrialBalance);
\ No newline at end of file
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml
new file mode 100644
index 000000000..521ab0d42
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/aged_payable_report_views.xml
@@ -0,0 +1,398 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Invoice Date
+ Amount Currency
+ Currency
+ Account
+ Expected Date
+ At Date
+ 1-30
+ 31-60
+ 61-90
+ 91-120
+ Older
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open
+
+
+
+
+ Journal Items
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml
new file mode 100644
index 000000000..64b6ae51e
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/aged_receivable_report_views.xml
@@ -0,0 +1,403 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Invoice Date
+ Amount Currency
+ Currency
+ Account
+ Expected Date
+ At Date
+ 1-30
+ 31-60
+ 61-90
+ 91-120
+ Older
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open
+
+
+
+
+ Journal Items
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml
new file mode 100644
index 000000000..0be7b21c0
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/balance_sheet_template.xml
@@ -0,0 +1,1709 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balance
+
+
+
+
+
+
+
+
+
+ ASSETS
+
+
+
+
+
+
+ Current Assets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bank and
+ Cash Accounts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Receivables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Current
+ Assets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prepayments
+
+
+
+
+
+
+
+ Total Current Assets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Plus Fixed
+ Assets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Plus
+ Non-current Assets
+
+
+
+
+
+
+
+ Total ASSETS
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LIABILITIES
+
+
+
+
+
+
+ Current Liabilities
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Current Liabilities
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Payables
+
+
+
+
+
+
+
+ Total Current Liabilities
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Plus
+ Non-current Liabilities
+
+
+
+
+
+
+
+ Total LIABILITIES
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EQUITY
+
+
+
+
+
+
+ Unallocated Earnings
+
+
+
+
+
+
+ Current
+ Earnings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Current
+ Allocated Earnings
+
+
+
+
+
+
+
+ Total Unallocated Earnings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Retained
+ Earnings
+
+
+
+
+
+
+
+ Total EQUITY
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LIABILITIES + EQUITY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml
new file mode 100644
index 000000000..e2bc09f88
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/bank_flow_templates.xml
@@ -0,0 +1,379 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Journal
+ Partner
+ Reference
+ Move
+ Entry label
+
+ Debit
+
+
+ Credit
+
+
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml
new file mode 100644
index 000000000..cd690ef0f
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/cash_flow_templates.xml
@@ -0,0 +1,383 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Journal
+ Partner
+ Reference
+ Move
+ Entry label
+
+ Debit
+
+
+ Credit
+
+
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml
new file mode 100644
index 000000000..df536ae5d
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/general_ledger_view.xml
@@ -0,0 +1,425 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date
+ Communication
+ Partner
+ Debit
+ Credit
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Journal Items
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml
new file mode 100644
index 000000000..9fe2c8d2d
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml
@@ -0,0 +1,726 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JRNL
+ Account
+ Ref
+ Due Date
+ Matching Number
+ Debit
+ Credit
+ Amount Currency
+ Balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open Partner
+
+
+
+ Journal Items
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml
new file mode 100644
index 000000000..820f28355
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/profit_and_loss_templates.xml
@@ -0,0 +1,992 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Balance
+
+
+
+
+
+
+
+
+
+
+ Net Profit
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Income
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gross Profit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Operating
+ Income
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cost of
+ Revenue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Other
+ Income
+
+
+
+
+
+
+
+ Total Income
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Expenses
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Expenses
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Depreciation
+
+
+
+
+
+
+
+ Total
+ Expenses
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml
new file mode 100644
index 000000000..b89f7e4f8
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/tax_report_views.xml
@@ -0,0 +1,507 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NET
+ TAX
+
+
+ NET
+ TAX
+
+
+
+
+
+
+
+
+
+ Sales
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+ %)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+ %)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+ %)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (
+
+ %)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party_addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml b/third_party_addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml
new file mode 100644
index 000000000..1eac0ece5
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/static/src/xml/trial_balance_view.xml
@@ -0,0 +1,559 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print (PDF)
+
+
+
+ Export (XLSX)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Initial Balance
+
+
+
+
+
+
+
+ End Balance
+
+
+
+ Debit
+ Credit
+ Debit
+ Credit
+ Debit
+ Credit
+
+
+
+ Debit
+ Credit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/third_party_addons/dynamic_accounts_report/views/accounting_report_views.xml b/third_party_addons/dynamic_accounts_report/views/accounting_report_views.xml
new file mode 100644
index 000000000..b6405448f
--- /dev/null
+++ b/third_party_addons/dynamic_accounts_report/views/accounting_report_views.xml
@@ -0,0 +1,80 @@
+
+
+
+
+ General Ledger
+ gen_l
+
+
+ Trial Balance
+ trl_b
+
+
+ Partner Ledger
+ p_l
+
+
+ Bank Book
+ bnk_b
+
+
+ Cash Book
+ csh_b
+
+
+ Balance Sheet
+ bl_s
+
+
+ Profit and Loss
+ dfr_n
+
+
+ Aged Payable
+ age_p
+
+
+ Tax Report
+ tax_r
+
+
+ Aged Receivable
+ age_r
+
+
+
+
+
+
+
+
+
+
+
+
+
+