Browse Source

[FIX] Bug Fixed 'dynamic_accounts_report'

pull/192/merge
Ajmal Cybro 3 years ago
parent
commit
004b848162
  1. 1
      dynamic_accounts_report/__init__.py
  2. 2
      dynamic_accounts_report/__manifest__.py
  3. 7
      dynamic_accounts_report/doc/RELEASE_NOTES.md
  4. 566
      dynamic_accounts_report/i18n/de_CH.po
  5. 1473
      dynamic_accounts_report/i18n/es_AR.po
  6. 1471
      dynamic_accounts_report/i18n/fr_BE.po
  7. 1472
      dynamic_accounts_report/i18n/uk_UA.po
  8. 1
      dynamic_accounts_report/models/__init__.py
  9. 103
      dynamic_accounts_report/models/move_line.py
  10. 4
      dynamic_accounts_report/report/cash_flow_report.xml
  11. 2
      dynamic_accounts_report/report/financial_report_template.xml
  12. 2
      dynamic_accounts_report/static/src/js/financial_reports.js
  13. 2
      dynamic_accounts_report/static/src/xml/ageing.xml
  14. 46
      dynamic_accounts_report/static/src/xml/cash_flow_view.xml
  15. 42
      dynamic_accounts_report/static/src/xml/daybook.xml
  16. 32
      dynamic_accounts_report/static/src/xml/financial_reports_view.xml
  17. 43
      dynamic_accounts_report/static/src/xml/general_ledger_view.xml
  18. 61
      dynamic_accounts_report/static/src/xml/partner_ledger_view.xml
  19. 50
      dynamic_accounts_report/static/src/xml/trial_balance_view.xml
  20. 41
      dynamic_accounts_report/wizard/ageing.py
  21. 141
      dynamic_accounts_report/wizard/balance_sheet.py
  22. 3
      dynamic_accounts_report/wizard/balance_sheet_config.py
  23. 121
      dynamic_accounts_report/wizard/cash_flow.py
  24. 82
      dynamic_accounts_report/wizard/daybook.py
  25. 96
      dynamic_accounts_report/wizard/general_ledger.py
  26. 82
      dynamic_accounts_report/wizard/partner_leadger.py
  27. 87
      dynamic_accounts_report/wizard/trial_balance.py

1
dynamic_accounts_report/__init__.py

@ -23,4 +23,5 @@
from . import controllers
from . import wizard
from . import report
from . import models

2
dynamic_accounts_report/__manifest__.py

@ -22,7 +22,7 @@
{
'name': 'Dynamic Financial Reports',
'version': '15.0.1.1.2',
'version': '15.0.1.0.3',
'category': 'Accounting',
'live_test_url': 'https://www.youtube.com/watch?v=gVQi9q9Rs-E&t=5s',
'summary': """Dynamic Financial Reports with drill

7
dynamic_accounts_report/doc/RELEASE_NOTES.md

@ -15,4 +15,9 @@
#### 15.01.2022
#### Version 15.0.1.0.2
#### UPDT
- Arabic Translation added
- Arabic Translation added
#### 01.02.2022
#### Version 15.0.1.0.3
#### UPDT AND BUGFIX
- Multi-company and Translation Update and Bugfix

566
dynamic_accounts_report/i18n/zh_CN.po → dynamic_accounts_report/i18n/de_CH.po

File diff suppressed because it is too large

1473
dynamic_accounts_report/i18n/es_AR.po

File diff suppressed because it is too large

1471
dynamic_accounts_report/i18n/fr_BE.po

File diff suppressed because it is too large

1472
dynamic_accounts_report/i18n/uk_UA.po

File diff suppressed because it is too large

1
dynamic_accounts_report/models/__init__.py

@ -0,0 +1 @@
from . import move_line

103
dynamic_accounts_report/models/move_line.py

@ -0,0 +1,103 @@
from odoo import fields, models, api, _
from odoo.http import request
import ast
from odoo.exceptions import AccessError, UserError, AccessDenied
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
"""Function is updated to avoid conflict for new and old odoo V15 addons"""
@api.model
def _query_get(self, domain=None):
self.check_access_rights('read')
context = dict(self._context or {})
domain = domain or []
if not isinstance(domain, (list, tuple)):
domain = ast.literal_eval(domain)
date_field = 'date'
if context.get('aged_balance'):
date_field = 'date_maturity'
if context.get('date_to'):
domain += [(date_field, '<=', context['date_to'])]
if context.get('date_from'):
if not context.get('strict_range'):
domain += ['|', (date_field, '>=', context['date_from']), ('account_id.user_type_id.include_initial_balance', '=', True)]
elif context.get('initial_bal'):
domain += [(date_field, '<', context['date_from'])]
else:
domain += [(date_field, '>=', context['date_from'])]
if context.get('journal_ids'):
domain += [('journal_id', 'in', context['journal_ids'])]
state = context.get('state')
if state and state.lower() != 'all':
domain += [('parent_state', '=', state)]
# if context.get('company_id'):
# domain += [('company_id', '=', context['company_id'])]
# elif context.get('allowed_company_ids'):
# domain += [('company_id', 'in', self.env.companies.ids)]
# else:
# domain += [('company_id', '=', self.env.company.id)]
if context.get('reconcile_date'):
domain += ['|', ('reconciled', '=', False), '|', ('matched_debit_ids.max_date', '>', context['reconcile_date']), ('matched_credit_ids.max_date', '>', context['reconcile_date'])]
if context.get('account_tag_ids'):
domain += [('account_id.tag_ids', 'in', context['account_tag_ids'].ids)]
if context.get('account_ids'):
domain += [('account_id', 'in', context['account_ids'].ids)]
if context.get('analytic_tag_ids'):
domain += [('analytic_tag_ids', 'in', context['analytic_tag_ids'].ids)]
if context.get('analytic_account_ids'):
domain += [('analytic_account_id', 'in', context['analytic_account_ids'].ids)]
if context.get('partner_ids'):
domain += [('partner_id', 'in', context['partner_ids'].ids)]
if context.get('partner_categories'):
domain += [('partner_id.category_id', 'in', context['partner_categories'].ids)]
company_ids = self.get_current_company_value()
domain += [('company_id', 'in', company_ids)]
where_clause = ""
where_clause_params = []
tables = ''
if domain:
domain.append(('display_type', 'not in', ('line_section', 'line_note')))
domain.append(('parent_state', '!=', 'cancel'))
query = self._where_calc(domain)
# Wrap the query with 'company_id IN (...)' to avoid bypassing company access rights.
self._apply_ir_rules(query)
tables, where_clause, where_clause_params = query.get_sql()
return tables, where_clause, where_clause_params
def get_current_company_value(self):
cookies_cids = [int(r) for r in request.httprequest.cookies.get('cids').split(",")] \
if request.httprequest.cookies.get('cids') \
else [request.env.user.company_id.id]
for company_id in cookies_cids:
if company_id not in self.env.user.company_ids.ids:
cookies_cids.remove(company_id)
if not cookies_cids:
cookies_cids = [self.env.company.id]
if len(cookies_cids) == 1:
cookies_cids.append(0)
return cookies_cids

4
dynamic_accounts_report/report/cash_flow_report.xml

@ -112,7 +112,7 @@
</tbody>
<tbody style="font-size:12px" t-if="Filters['levels' ] == 'detailed' " t-foreach="account_data['journal_res']" t-as="res">
<tr t-if="fet['name'] == res['account']" t-foreach="account_data['fetched_data']" t-as="fet">
<tr t-if="fet['id'] == res['id']" t-foreach="account_data['fetched_data']" t-as="fet">
<td>
<strong>
<span t-esc="fet['code']"/>
@ -163,7 +163,7 @@
</tr>
</tbody>
<tbody style="font-size:12px" t-if="Filters['levels' ] == 'very' or Filters['levels' ] ==false " t-foreach="account_data['account_res']" t-as="res">
<tr t-if="fet['name'] == res['account']" t-foreach="account_data['fetched_data']" t-as="fet">
<tr t-if="fet['id'] == res['id']" t-foreach="account_data['fetched_data']" t-as="fet">
<td>
<strong>
<span t-esc="fet['code']"/>

2
dynamic_accounts_report/report/financial_report_template.xml

@ -100,7 +100,7 @@
</t>
<t t-if="a.get('code')">
<t t-foreach="account_data" t-as="line">
<t t-if="line['code'] == a.get('code')">
<t t-if="line['id'] == a.get('account')">
<tr>
<td>
<span style="color: white;" t-esc="'..' * a.get('level', 0) * 3"/>

2
dynamic_accounts_report/static/src/js/financial_reports.js

@ -86,6 +86,8 @@ odoo.define('dynamic_accounts_report.financial_reports', function (require) {
args: [[this.wizard_id], action_title, self.searchModel.config.context.lang],
}).then(function(datas) {
if (initial_render) {
self.$('.filter_view_dfr').html(QWeb.render('DfrFilterView', {
filter_data: datas['filters'],

2
dynamic_accounts_report/static/src/xml/ageing.xml

@ -219,7 +219,7 @@
<t t-name="AgeingFilterView">
<div class="row" style="margin-right: 10px; margin-left: 10px;">
<div class="row" style="margin-right: 10px; margin-left: 10px;">
<div class="sub_container_left" style="width:70%;">
<div class="report_print">
<button type="button" class="btn btn-primary" id="pdf"

46
dynamic_accounts_report/static/src/xml/cash_flow_view.xml

@ -52,25 +52,25 @@
</td>
<t t-if="currency[1] == 'before'">
<td class="cf_fld">
<t t-esc="currency[0]"/> <t t-out="account['total_debit']"/>
<t t-esc="currency[0]"/> <t t-raw="account['total_debit']"/>
</td>
<td class="cf_fld">
<t t-esc="currency[0]"/> <t t-out="account['total_credit']"/>
<t t-esc="currency[0]"/> <t t-raw="account['total_credit']"/>
</td>
<td class="cf_fld">
<t t-esc="currency[0]"/> <t t-out="account['total_balance']"/>
<t t-esc="currency[0]"/> <t t-raw="account['total_balance']"/>
</td>
</t>
<t t-else="">
<td class="cf_fld">
<t t-out="account['total_debit']"/><t t-esc="currency[0]"/>
<t t-raw="account['total_debit']"/><t t-esc="currency[0]"/>
</td>
<td class="cf_fld">
<t t-out="account['total_credit']"/><t t-esc="currency[0]"/>
<t t-raw="account['total_credit']"/><t t-esc="currency[0]"/>
</td>
<td class="cf_fld">
<t t-out="account['total_balance']"/><t t-esc="currency[0]"/>
<t t-raw="account['total_balance']"/><t t-esc="currency[0]"/>
</td>
</t>
</tr>
@ -95,25 +95,25 @@
</td>
<t t-if="currency[1] == 'before'">
<td class="cf_fld">
<t t-esc="currency[0]"/> <t t-out="account['total_debit']"/>
<t t-esc="currency[0]"/> <t t-raw="account['total_debit']"/>
</td>
<td class="cf_fld">
<t t-esc="currency[0]"/> <t t-out="account['total_credit']"/>
<t t-esc="currency[0]"/> <t t-raw="account['total_credit']"/>
</td>
<td class="cf_fld">
<t t-esc="currency[0]"/> <t t-out="account['total_balance']"/>
<t t-esc="currency[0]"/> <t t-raw="account['total_balance']"/>
</td>
</t>
<t t-else="">
<td class="cf_fld">
<t t-out="account['total_debit']"/><t t-esc="currency[0]"/>
<t t-raw="account['total_debit']"/><t t-esc="currency[0]"/>
</td>
<td class="cf_fld">
<t t-out="account['total_credit']"/><t t-esc="currency[0]"/>
<t t-raw="account['total_credit']"/><t t-esc="currency[0]"/>
</td>
<td class="cf_fld">
<t t-out="account['total_balance']"/><t t-esc="currency[0]"/>
<t t-raw="account['total_balance']"/><t t-esc="currency[0]"/>
</td>
</t>
</tr>
@ -255,24 +255,24 @@ Level:
</td>
<t t-if="currency[1] == 'before'">
<td class="cf_fld">
<t t-esc="currency[0]"/><t t-out="account_line.total_debit"/>
<t t-esc="currency[0]"/><t t-raw="account_line.total_debit"/>
</td>
<td class="cf_fld">
<t t-esc="currency[0]"/><t t-out="account_line.total_credit"/>
<t t-esc="currency[0]"/><t t-raw="account_line.total_credit"/>
</td>
<td class="cf_fld">
<t t-esc="currency[0]"/><t t-out="account_line.balance"/>
<t t-esc="currency[0]"/><t t-raw="account_line.balance"/>
</td>
</t>
<t t-else="">
<td class="cf_fld">
<t t-out="account_line.total_debit"/><t t-esc="currency[0]"/>
<t t-raw="account_line.total_debit"/><t t-esc="currency[0]"/>
</td>
<td class="cf_fld">
<t t-out="account_line.total_credit"/><t t-esc="currency[0]"/>
<t t-raw="account_line.total_credit"/><t t-esc="currency[0]"/>
</td>
<td class="cf_fld">
<t t-out="account_line.balance"/><t t-esc="currency[0]"/>
<t t-raw="account_line.balance"/><t t-esc="currency[0]"/>
</td>
</t>
</tr>
@ -318,15 +318,15 @@ Level:
<t t-if="currency[1] == 'before'">
<td class="cf_fld">
<t t-esc="currency[0]"/>
<t t-out="account_line.total_debit"/>
<t t-raw="account_line.total_debit"/>
</td>
<td class="cf_fld">
<t t-esc="currency[0]"/>
<t t-out="account_line.total_credit"/>
<t t-raw="account_line.total_credit"/>
</td>
<td class="cf_fld">
<t t-esc="currency[0]"/>
<t t-out="account_line.balance"/>
<t t-raw="account_line.balance"/>
</td>
</t>
<t t-else="">
@ -336,12 +336,12 @@ Level:
</td>
<td class="cf_fld">
<t t-out="account_line.total_credit"/>
<t t-raw="account_line.total_credit"/>
<t t-esc="currency[0]"/>
</td>
<td class="cf_fld">
<t t-out="account_line.balance"/>
<t t-raw="account_line.balance"/>
<t t-esc="currency[0]"/>
</td>
</t>

42
dynamic_accounts_report/static/src/xml/daybook.xml

@ -50,17 +50,17 @@
<td class="mon_fld">
<t t-esc="currency[0]"/>
<t t-out="account['debit']"/>
<t t-raw="account['debit']"/>
</td>
<td class="mon_fld">
<t t-esc="currency[0]"/>
<t t-out="account['credit']"/>
<t t-raw="account['credit']"/>
</td>
<td class="mon_fld">
<t t-esc="currency[0]"/>
<t t-out="account['balance']"/>
<t t-raw="account['balance']"/>
</td>
<t t-set="common_id" t-value="'a'+account['id']"/>
</td>
@ -74,19 +74,19 @@
</span>
<td class="mon_fld">
<t t-out="account['debit']"/>
<t t-raw="account['debit']"/>
<t t-esc="currency[0]"/>
</td>
<td class="mon_fld">
<t t-out="account['credit']"/>
<t t-raw="account['credit']"/>
<t t-esc="currency[0]"/>
</td>
<td class="mon_fld">
<t t-out="account['balance']"/>
<t t-raw="account['balance']"/>
<t t-esc="currency[0]"/>
</td>
@ -111,7 +111,7 @@
<t t-name="DayFilterView">
<div class="row" style="margin-right: 10px; margin-left: 10px;">
<div class="row" style="margin-right: 10px; margin-left: 10px;">
<div class="sub_container_left" style="width:70%;">
<div class="report_print">
<button type="button" class="btn btn-primary" id="pdf"
@ -166,9 +166,25 @@
<select class="dropdown-menu journals" name="states[]" multiple="multiple">
<div role="separator" class="dropdown-divider"></div>
<t t-foreach="filter_data.journals_list" t-as="journal">
<t t-if="journal[0]=='divider'">
<div role="separator" class="dropdown-divider"/>
<option disabled="disabled" role="menuitem" t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<t t-else="">
<option t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
</t>
</t>
</select>
<span id="journal_res"></span>
@ -180,9 +196,21 @@
</a>
<select class="dropdown-menu account" name="states[]" multiple="multiple">
<t t-foreach="filter_data.accounts_list" t-as="account">
<t t-if="account[0]=='divider'">
<div role="separator" class="dropdown-divider"/>
<option disabled="disabled" role="menuitem" t-attf-value="{{account[0]}}">
<t t-esc="account[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<t t-else="">
<option t-attf-value="{{account[0]}}">
<t t-esc="account[1]"/>
</option>
</t>
</t>
</select>
<span id="acc_res"></span>

32
dynamic_accounts_report/static/src/xml/financial_reports_view.xml

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='utf-8'?>
<templates>
<t t-name="dfr_template_new">
<div class="">
@ -33,7 +33,7 @@
<t t-set="common_id" t-value="0"/>
<t t-if="account['code'] == a['code']">
<t t-if="account['id'] == a['account']">
<tr style="border: 1.5px solid black;" class="gl-line"
data-toggle="collapse"
t-att-data-account-id="account['id']"
@ -45,7 +45,7 @@
<t t-esc="account['name']"/>
</span>
<div class="" style="display: inline-block;">
<a type="button" class="fa fa-caret-down" data-toggle="dropdown" aria-expanded="false">
<a type="button" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
</a>
<div class="dropdown-menu " role="menu">
<div class="o_foldable_menu o_closed_menu " >
@ -172,8 +172,21 @@ Journals:
<select class="dropdown-menu journals" name="states[]" multiple="multiple">
<div role="separator" class="dropdown-divider"></div>
<t t-foreach="filter_data.journals_list" t-as="journal">
<t t-if="journal[0]=='divider'">
<div role="separator" class="dropdown-divider"/>
<option disabled="disabled" role="menuitem" t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<t t-else="">
<option t-attf-value="{{journal[0]}}"><t t-esc="journal[1]"/>
</option>
</t>
</t>
</select>
<span id="journal_res"></span>
@ -186,9 +199,22 @@ Journals:
</a>
<select class="dropdown-menu account" name="states[]" multiple="multiple">
<t t-foreach="filter_data.accounts_list" t-as="account">
<t t-if="account[0]=='divider'">
<div role="separator" class="dropdown-divider"/>
<option disabled="disabled" role="menuitem" t-attf-value="{{account[0]}}">
<t t-esc="account[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<t t-else="">
<option t-attf-value="{{account[0]}}">
<t t-esc="account[1]"/>
</option>
</t>
</t>
</select>
<span id="acc_res"></span>

43
dynamic_accounts_report/static/src/xml/general_ledger_view.xml

@ -47,6 +47,7 @@
<t t-else="">
<t t-esc="currency[0]"/>
<t t-esc="account['debit']"/>
<!-- <t t-raw="Math.round(account['debit'] * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
</t>
</td>
<td class="mon_fld">
@ -56,6 +57,7 @@
<t t-else="">
<t t-esc="currency[0]"/>
<t t-esc="account['credit']"/>
<!-- <t t-raw="Math.round(account['credit'] * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
</t>
</td>
<td class="mon_fld">
@ -65,6 +67,7 @@
<t t-else="">
<t t-esc="currency[0]"/>
<t t-esc="account['balance']"/>
<!-- <t t-raw="Math.round(account['balance'] * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
</t>
</td>
@ -76,6 +79,7 @@
</t>
<t t-else="">
<t t-esc="account['debit']"/>
<!-- <t t-raw="Math.round(account['debit'] * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
<t t-esc="currency[0]"/>
</t>
</td>
@ -85,6 +89,7 @@
</t>
<t t-else="">
<t t-esc="account['credit']"/>
<!-- <t t-raw="Math.round(account['credit'] * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
<t t-esc="currency[0]"/>
</t>
</td>
@ -129,7 +134,7 @@
</h1>
</div>
<div class="row" style="margin-right: 10px; margin-left: 10px;">
<div class="row" style="margin-right: 10px; margin-left: 10px;">
<div class="sub_container_left" style="width:70%;">
<div class="report_print">
<button type="button" class="btn btn-primary" id="pdf"
@ -185,9 +190,24 @@
<select class="dropdown-menu journals" name="states[]" multiple="multiple">
<div role="separator" class="dropdown-divider"></div>
<t t-foreach="filter_data.journals_list" t-as="journal">
<t t-if="journal[0]=='divider'">
<div role="separator" class="dropdown-divider"/>
<option disabled="disabled" role="menuitem" t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<t t-else="">
<option t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
</t>
</t>
</select>
<span id="journal_res"></span>
@ -201,9 +221,24 @@
</a>
<select class="dropdown-menu account" name="states[]" multiple="multiple">
<t t-foreach="filter_data.accounts_list" t-as="account">
<t t-if="account[0]=='divider'">
<div role="separator" class="dropdown-divider"/>
<option disabled="disabled" role="menuitem" t-attf-value="{{account[0]}}">
<t t-esc="account[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<t t-else="">
<option t-attf-value="{{account[0]}}">
<t t-esc="account[1]"/>
</option>
</t>
</t>
</select>
<span id="acc_res"></span>
@ -336,6 +371,7 @@
<t t-else="">
<t t-esc="account_line.currency_code"/>
<t t-esc="account_line.debit"/>
<!-- <t t-esc="Math.round(account_line.debit * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
</t>
</td>
<td t-att-style="style_right" class="amt">
@ -345,6 +381,7 @@
<t t-else="">
<t t-esc="account_line.currency_code"/>
<t t-esc="account_line.credit"/>
<!-- <t t-esc="Math.round(account_line.credit * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
</t>
</td>
<td t-att-style="style_right" class="amt">
@ -354,6 +391,7 @@
<t t-else="">
<t t-esc="account_line.currency_code"/>
<t t-esc="account_line.balance"/>
<!-- <t t-esc="Math.round(account_line.balance * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
</t>
</td>
</t>
@ -364,6 +402,7 @@
</t>
<t t-else="">
<t t-esc="account_line.debit"/>
<!-- <t t-esc="Math.round(account_line.debit * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
<t t-esc="account_line.currency_code"/>
</t>
</td>
@ -373,6 +412,7 @@
</t>
<t t-else="">
<t t-esc="account_line.credit"/>
<!-- <t t-esc="Math.round(account_line.credit * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
<t t-esc="account_line.currency_code"/>
</t>
</td>
@ -382,6 +422,7 @@
</t>
<t t-else="">
<t t-esc="account_line.balance"/>
<!-- <t t-esc="Math.round(account_line.balance * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
<t t-esc="account_line.currency_code"/>
</t>
</td>

61
dynamic_accounts_report/static/src/xml/partner_ledger_view.xml

@ -47,29 +47,29 @@
<t t-if="currency[1] == 'before'">
<td style="text-align:right;">
<t t-esc="currency[0]"/>
<t t-out="account['debit']"/>
<t t-raw="account['debit']"/>
</td>
<td style="text-align:right;">
<t t-esc="currency[0]"/>
<t t-out="account['credit']"/>
<t t-raw="account['credit']"/>
</td>
<td style="text-align:right;">
<t t-esc="currency[0]"/>
<t t-out="account['balance']"/>
<t t-raw="account['balance']"/>
</td>
</t>
<t t-else="">
<td style="text-align:right;">
<t t-out="account['debit']"/>
<t t-raw="account['debit']"/>
<t t-esc="currency[0]"/>
</td>
<td style="text-align:right;">
<t t-out="account['credit']"/>
<t t-raw="account['credit']"/>
<t t-esc="currency[0]"/>
</td>
<td style="text-align:right;">
<t t-out="account['balance']"/>
<t t-raw="account['balance']"/>
<t t-esc="currency[0]"/>
</td>
@ -193,9 +193,22 @@
<select class="dropdown-menu journals" name="states[]" multiple="multiple">
<div role="separator" class="dropdown-divider"></div>
<t t-foreach="filter_data.journals_list" t-as="journal">
<t t-if="journal[0]=='divider'">
<div role="separator" class="dropdown-divider"/>
<option disabled="disabled" role="menuitem" t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<t t-else="">
<option t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
</t>
</t>
</select>
<span id="journal_res"></span>
@ -207,9 +220,21 @@
</a>
<select class="dropdown-menu account" name="states[]" multiple="multiple">
<t t-foreach="filter_data.accounts_list" t-as="account">
<t t-if="account[0]=='divider'">
<div role="separator" class="dropdown-divider"/>
<option disabled="disabled" role="menuitem" t-attf-value="{{account[0]}}">
<t t-esc="account[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<t t-else="">
<option t-attf-value="{{account[0]}}">
<t t-esc="account[1]"/>
</option>
</t>
</t>
</select>
<span id="account_res"></span>
@ -305,34 +330,34 @@
</td>
<t t-if="account_line.currency_position == 'before'">
<td t-att-style="style" class="amt">
<t t-out="account_line.currency_code"/>
<t t-out="account_line.debit"/>
<t t-raw="account_line.currency_code"/>
<t t-raw="account_line.debit"/>
</td>
<td t-att-style="style" class="amt">
<t t-out="account_line.currency_code"/>
<t t-out="account_line.credit"/>
<t t-raw="account_line.currency_code"/>
<t t-raw="account_line.credit"/>
</td>
<td t-att-style="style" class="amt">
<t t-out="account_line.currency_code"/>
<t t-out="account_line.balance"/>
<t t-raw="account_line.currency_code"/>
<t t-raw="account_line.balance"/>
</td>
</t>
<t t-else="">
<td t-att-style="style" class="amt">
<t t-out="account_line.debit"/>
<t t-out="account_line.currency_code"/>
<t t-raw="account_line.debit"/>
<t t-raw="account_line.currency_code"/>
</td>
<td t-att-style="style" class="amt">
<t t-out="account_line.credit"/>
<t t-out="account_line.currency_code"/>
<t t-raw="account_line.credit"/>
<t t-raw="account_line.currency_code"/>
</td>
<td t-att-style="style" class="amt">
<t t-out="account_line.balance"/>
<t t-out="account_line.currency_code"/>
<t t-raw="account_line.balance"/>
<t t-raw="account_line.currency_code"/>
</td>
</t>

50
dynamic_accounts_report/static/src/xml/trial_balance_view.xml

@ -1,5 +1,5 @@
<templates>
<t t-name="TrialTemp" >
<t t-name="TrialTemp">
<div class="">
<div class="">
<h1 style="padding:10px">
@ -49,8 +49,8 @@
-
<t t-esc="account['name']"/>
</span>
<div class="dropdown" style="display: inline-block;">
<a type="button" class="fa fa-caret-down" data-toggle="dropdown"
<div class="" style="display: inline-block;">
<a type="button" class="dropdown-toggle" data-toggle="dropdown"
aria-expanded="false">
</a>
<div class="dropdown-menu " role="menu">
@ -76,20 +76,20 @@
<td class="mon_fld">
<t t-esc="currency[0]"/>
<t t-out="account['Init_balance']['debit']"/>
<t t-raw="account['Init_balance']['debit']"/>
</td>
<td class="mon_fld">
<t t-esc="currency[0]"/>
<t t-out="account['Init_balance']['credit']"/>
<t t-raw="account['Init_balance']['credit']"/>
</td>
</t>
<t t-else="">
<td class="mon_fld">
<t t-out="account['Init_balance']['debit']"/>
<t t-raw="account['Init_balance']['debit']"/>
<t t-esc="currency[0]"/>
</td>
<td class="mon_fld">
<t t-out="account['Init_balance']['credit']"/>
<t t-raw="account['Init_balance']['credit']"/>
<t t-esc="currency[0]"/>
</td>
@ -120,21 +120,21 @@
<t t-if="currency[1] == 'before'">
<td class="mon_fld">
<t t-esc="currency[0]"/>
<t t-out="account['debit']"/>
<t t-raw="account['debit']"/>
</td>
<td class="mon_fld">
<t t-esc="currency[0]"/>
<t t-out="account['credit']"/>
<t t-raw="account['credit']"/>
</td>
</t>
<t t-else="">
<td class="mon_fld">
<t t-out="account['debit']"/>
<t t-raw="account['debit']"/>
<t t-esc="currency[0]"/>
</td>
<td class="mon_fld">
<t t-out="account['credit']"/>
<t t-raw="account['credit']"/>
<t t-esc="currency[0]"/>
</td>
@ -159,14 +159,14 @@
<td class="mon_fld" style="">
<strong>
<t t-esc="currency[0]"/>
<!-- <t t-out="Math.round(debit_total * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
<!-- <t t-raw="Math.round(debit_total * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
<t t-esc="debit_total"/>
</strong>
</td>
<td class="mon_fld" style="">
<strong>
<t t-esc="currency[0]"/>
<!-- <t t-out="Math.round(credit_total * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
<!-- <t t-raw="Math.round(credit_total * Math.pow(10, 2)) / Math.pow(10, 2)"/>-->
<t t-esc="credit_total"/>
</strong>
</td>
@ -175,13 +175,13 @@
<td class="mon_fld" style="">
<strong>
<t t-out="Math.round(debit_total * Math.pow(10, 2)) / Math.pow(10, 2)"/>
<t t-raw="Math.round(debit_total * Math.pow(10, 2)) / Math.pow(10, 2)"/>
<t t-esc="currency[0]"/>
</strong>
</td>
<td class="mon_fld" style="">
<strong>
<t t-out="Math.round(credit_total * Math.pow(10, 2)) / Math.pow(10, 2)"/>
<t t-raw="Math.round(credit_total * Math.pow(10, 2)) / Math.pow(10, 2)"/>
<t t-esc="currency[0]"/>
</strong>
</td>
@ -254,9 +254,23 @@
<select class="dropdown-menu journals" name="states[]" multiple="multiple">
<div role="separator" class="dropdown-divider"></div>
<t t-foreach="filter_data.journals_list" t-as="journal">
<option t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
<t t-if="journal[0]=='divider'">
<div role="separator" class="dropdown-divider"/>
<option disabled="disabled" role="menuitem" t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<t t-else="">
<option t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
</t>
</t>
</select>
<span id="journal_res"></span>

41
dynamic_accounts_report/wizard/ageing.py

@ -4,7 +4,7 @@ from datetime import datetime
from dateutil.relativedelta import relativedelta
from odoo import fields, models, api, _
from odoo.tools import float_is_zero
from odoo.http import request
import io
import json
@ -109,9 +109,7 @@ class AgeingView(models.TransientModel):
def get_filter_data(self, option):
r = self.env['account.partner.ageing'].search([('id', '=', option[0])])
default_filters = {}
company = self.get_current_company_value()
company_id = self.env['res.company'].search([('id', 'in', company)])
# company_id = self.env.company
company_id = self.env.companies
company_domain = [('company_id', 'in', company_id.ids)]
partner = r.partner_ids if r.partner_ids else self.env[
'res.partner'].search([])
@ -121,14 +119,14 @@ class AgeingView(models.TransientModel):
filter_dict = {
'partners': r.partner_ids.ids,
'partner_tags': r.partner_category_ids.ids,
'company_id': company_id[0].id,
'company_id': company_id.ids,
'date_from': r.date_from,
'target_move': r.target_move,
'result_selection': r.result_selection,
'partners_list': [(p.id, p.name) for p in partner],
'category_list': [(c.id, c.name) for c in categories],
'company_name': company_id and company_id[0].name,
'company_name': ', '.join(self.env.companies.mapped('name')),
}
filter_dict.update(default_filters)
return filter_dict
@ -161,19 +159,6 @@ class AgeingView(models.TransientModel):
}
def get_current_company_value(self):
cookies_cids = [int(r) for r in request.httprequest.cookies.get('cids').split(",")] \
if request.httprequest.cookies.get('cids') \
else [request.env.user.company_id.id]
for company_id in cookies_cids:
if company_id not in self.env.user.company_ids.ids:
cookies_cids.remove(company_id)
if not cookies_cids:
cookies_cids = [self.env.company.id]
if len(cookies_cids) == 1:
cookies_cids.append(0)
return cookies_cids
@api.model
def create(self, vals):
vals['target_move'] = 'posted'
@ -221,14 +206,13 @@ class AgeingView(models.TransientModel):
res = []
total = []
cr = self.env.cr
company = self.get_current_company_value()[0]
user_company = self.env['res.company'].search([('id', '=', int(company))])
# user_company = self.env.company
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]
company_ids = self._context.get('company_ids') or [user_company.id]
company_ids = self.env.companies.ids
move_state = ['draft', 'posted']
if target_move == 'posted':
move_state = ['posted']
@ -244,7 +228,6 @@ class AgeingView(models.TransientModel):
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),)
partner_list = '(l.partner_id IS NOT NULL)'
if partners:
@ -301,7 +284,6 @@ class AgeingView(models.TransientModel):
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):
print("skljskl", line.partner_id)
partner_id = line.partner_id.id or False
move_id = line.move_id.id
move_name = line.move_id.name
@ -561,8 +543,6 @@ class AgeingView(models.TransientModel):
@api.model
def _get_currency(self):
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
journal = self.env['account.journal'].browse(
self.env.context.get('default_journal_id', False))
if journal.currency_id:
@ -571,11 +551,8 @@ class AgeingView(models.TransientModel):
if not lang:
lang = 'en_US'
lang = lang.replace("_", '-')
# currency_array = [self.env.company.currency_id.symbol,
# self.env.company.currency_id.position, lang]
currency_array = [company_id.currency_id.symbol,
company_id.currency_id.position, lang]
currency_array = [self.env.company.currency_id.symbol,
self.env.company.currency_id.position, lang]
return currency_array
def get_dynamic_xlsx_report(self, data, response, report_data, dfr_data ):

141
dynamic_accounts_report/wizard/balance_sheet.py

@ -4,7 +4,7 @@ from odoo import fields, models, api, _
import io
import json
from odoo.exceptions import AccessError, UserError, AccessDenied
from odoo.http import request
try:
from odoo.tools.misc import xlsxwriter
except ImportError:
@ -59,10 +59,8 @@ class BalanceSheetView(models.TransientModel):
'date_to': r.date_to,
})
# company_id = self.env.company
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
company_domain = [('company_id', '=', company_id.id)]
company_ids = self.env.companies.ids
company_domain = [('company_id', 'in', company_ids)]
if r.account_tag_ids:
company_domain.append(
('tag_ids', 'in', r.account_tag_ids.ids))
@ -85,32 +83,29 @@ class BalanceSheetView(models.TransientModel):
new_records = list(filter(filter_code, records['Accounts']))
records['Accounts'] = new_records
trans_tag = self.env['ir.translation'].search([('value', '=', tag), ('module', '=', 'dynamic_accounts_report')],limit=1).src
trans_tag = self.env['ir.translation'].search([('value', '=', tag), ('module', '=', 'dynamic_accounts_report')],
limit=1).src
if trans_tag:
tag_upd = trans_tag
else:
tag_upd = tag
account_report_id = self.env['account.financial.report'].search([
account_report_id = self.env['account.financial.report'].with_context(lang='en_US').search([
('name', 'ilike', tag_upd)])
new_data = {'id': self.id, 'date_from': False,
'enable_filter': True,
'debit_credit': True,
'date_to': False, 'account_report_id': account_report_id,
'target_move': filters['target_move'],
'view_format': 'vertical',
'company_id': company_id.id,
'company_id': self.company_id,
'used_context': {'journal_ids': False,
'state': filters['target_move'].lower(),
'date_from': filters['date_from'],
'date_to': filters['date_to'],
'strict_range': False,
'company_id': company_id.id,
'company_id': self.company_id,
'lang': 'en_US'}}
account_lines = self.get_account_lines(new_data)
@ -120,19 +115,18 @@ class BalanceSheetView(models.TransientModel):
move_lines_dict = {}
for rec in records['Accounts']:
move_line_accounts.append(rec['code'])
move_lines_dict[rec['code']] = {}
move_lines_dict[rec['code']]['debit'] = rec['debit']
move_lines_dict[rec['code']]['credit'] = rec['credit']
move_lines_dict[rec['code']]['balance'] = rec['balance']
move_line_accounts.append(rec['id'])
move_lines_dict[rec['id']] = {}
move_lines_dict[rec['id']]['debit'] = rec['debit']
move_lines_dict[rec['id']]['credit'] = rec['credit']
move_lines_dict[rec['id']]['balance'] = rec['balance']
report_lines_move = []
parent_list = []
def filter_movelines_parents(obj):
for each in obj:
if each['report_type'] == 'accounts':
if each['code'] in move_line_accounts:
if each['account'] in move_line_accounts:
report_lines_move.append(each)
parent_list.append(each['p_id'])
@ -145,10 +139,10 @@ class BalanceSheetView(models.TransientModel):
for rec in report_lines_move:
if rec['report_type'] == 'accounts':
if rec['code'] in move_line_accounts:
rec['debit'] = move_lines_dict[rec['code']]['debit']
rec['credit'] = move_lines_dict[rec['code']]['credit']
rec['balance'] = move_lines_dict[rec['code']]['balance']
if rec['account'] in move_line_accounts:
rec['debit'] = move_lines_dict[rec['account']]['debit']
rec['credit'] = move_lines_dict[rec['account']]['credit']
rec['balance'] = move_lines_dict[rec['account']]['balance']
parent_list = list(set(parent_list))
max_level = 0
@ -206,9 +200,7 @@ class BalanceSheetView(models.TransientModel):
sum_list_new = filter_sum(final_report_lines)
assign_sum(final_report_lines)
# company_id = self.env.company
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
company_id = self.env.company
currency = company_id.currency_id
symbol = currency.symbol
rounding = currency.rounding
@ -234,8 +226,6 @@ class BalanceSheetView(models.TransientModel):
rec['m_balance'] = "{:,.2f}".format(
rec['balance']) + " " + symbol
return {
'name': tag,
'type': 'ir.actions.client',
@ -306,12 +296,11 @@ class BalanceSheetView(models.TransientModel):
r = self.env['dynamic.balance.sheet.report'].search(
[('id', '=', option[0])])
default_filters = {}
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
# company_id = self.env.company
company_domain = [('company_id', '=', company_id.id)]
journals = r.journal_ids if r.journal_ids else self.env[
'account.journal'].search(company_domain)
company_ids = self.env.companies.ids
company_domain = [('company_id', 'in', company_ids)]
company_names = ', '.join(self.env.companies.mapped('name'))
journal_ids = r.journal_ids if r.journal_ids else self.env[
'account.journal'].search(company_domain, order="company_id, name")
analytics = self.analytic_ids if self.analytic_ids else self.env[
'account.analytic.account'].search(
company_domain)
@ -321,27 +310,48 @@ class BalanceSheetView(models.TransientModel):
analytic_tags = self.analytic_tag_ids if self.analytic_tag_ids else \
self.env[
'account.analytic.tag'].sudo().search(
['|', ('company_id', '=', company_id.id),
['|', ('company_id', 'in', company_ids),
('company_id', '=', False)])
if r.account_tag_ids:
company_domain.append(
('tag_ids', 'in', r.account_tag_ids.ids))
accounts = self.account_ids if self.account_ids else self.env[
'account.account'].search(company_domain)
accounts_ids = self.account_ids if self.account_ids else self.env[
'account.account'].search(company_domain, order="company_id, name")
journals = []
o_company = False
for j in journal_ids:
if j.company_id != o_company:
journals.append(('divider', j.company_id.name))
o_company = j.company_id
journals.append((j.id, j.name, j.code))
accounts = []
o_company = False
for j in accounts_ids:
if j.company_id != o_company:
accounts.append(('divider', j.company_id.name))
o_company = j.company_id
accounts.append((j.id, j.name))
filter_dict = {
'journal_ids': r.journal_ids.ids,
'account_ids': r.account_ids.ids,
'analytic_ids': r.analytic_ids.ids,
'company_id': company_id.id,
'company_id': company_ids,
'date_from': r.date_from,
'date_to': r.date_to,
'target_move': r.target_move,
'journals_list': [(j.id, j.name, j.code) for j in journals],
'accounts_list': [(a.id, a.name) for a in accounts],
'journals_list': journals,
'accounts_list': accounts,
'analytic_list': [(anl.id, anl.name) for anl in analytics],
'company_name': company_id and company_id.name,
'company_name': company_names,
'analytic_tag_ids': r.analytic_tag_ids.ids,
'analytic_tag_list': [(anltag.id, anltag.name) for anltag in
analytic_tags],
@ -355,11 +365,8 @@ class BalanceSheetView(models.TransientModel):
docs = data['model']
display_account = data['display_account']
init_balance = True
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
company_domain = [('company_id', '=', company_id.id)]
journals = data['journals']
accounts = self.env['account.account'].search(company_domain)
accounts = self.env['account.account'].search([])
if not accounts:
raise UserError(_("No Accounts Found! Please Add One"))
account_res = self._get_accounts(accounts, init_balance,
@ -422,15 +429,11 @@ class BalanceSheetView(models.TransientModel):
cr = self.env.cr
MoveLine = self.env['account.move.line']
move_lines = {x: [] for x in accounts.ids}
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
# currency_id = self.env.company.currency_id
currency_id = company_id.currency_id
currency_id = self.env.company.currency_id
# Prepare sql query base on selected parameters from wizard
tables, where_clause, where_params = MoveLine._query_get()
wheres = [""]
where_params[0] = int(company_id.id)
if where_clause.strip():
wheres.append(where_clause.strip())
final_filters = " AND ".join(wheres)
@ -519,47 +522,15 @@ class BalanceSheetView(models.TransientModel):
return account_res
# @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
# currency_array = [self.env.company.currency_id.symbol,
# self.env.company.currency_id.position]
# return currency_array
@api.model
def _get_currency(self):
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
journal = self.env['account.journal'].browse(
self.env.context.get('default_journal_id', False))
if journal.currency_id:
return journal.currency_id.id
lang = self.env.user.lang
if not lang:
lang = 'en_US'
lang = lang.replace("_", '-')
# currency_array = [self.env.company.currency_id.symbol,
# self.env.company.currency_id.position, lang]
currency_array = [company_id.currency_id.symbol,
company_id.currency_id.position, lang]
currency_array = [self.env.company.currency_id.symbol,
self.env.company.currency_id.position]
return currency_array
def get_current_company_value(self):
cookies_cids = [int(r) for r in request.httprequest.cookies.get('cids').split(",")] \
if request.httprequest.cookies.get('cids') \
else [request.env.user.company_id.id]
for company_id in cookies_cids:
if company_id not in self.env.user.company_ids.ids:
cookies_cids.remove(company_id)
if not cookies_cids:
cookies_cids = [self.env.company.id]
if len(cookies_cids) == 1:
cookies_cids.append(0)
return cookies_cids
def get_dynamic_xlsx_report(self, options, response, report_data, dfr_data):
i_data = str(report_data)

3
dynamic_accounts_report/wizard/balance_sheet_config.py

@ -6,7 +6,6 @@ class BalanceSheet(models.TransientModel):
_inherit = "dynamic.balance.sheet.report"
def view_report_pdf(self, acc, form):
data = dict()
report_lines = acc
data['form'] = form
@ -40,7 +39,6 @@ class BalanceSheet(models.TransientModel):
item['level'] = set_report_level(item)
data['journal_items'] = journal_items
data['report_lines'] = report_lines
return data
def _compute_account_balance(self, accounts):
@ -137,7 +135,6 @@ class BalanceSheet(models.TransientModel):
def get_account_lines(self, data):
lines = []
account_report = data['account_report_id']
child_reports = account_report._get_children_by_order()

121
dynamic_accounts_report/wizard/cash_flow.py

@ -2,7 +2,6 @@ import time
from datetime import datetime
from odoo import models, api, fields
from odoo.http import request
FETCH_RANGE = 2000
import io
import json
@ -77,20 +76,6 @@ class AccountCasgFlow(models.TransientModel):
'currency': currency,
}
def get_current_company_value(self):
cookies_cids = [int(r) for r in request.httprequest.cookies.get('cids').split(",")] \
if request.httprequest.cookies.get('cids') \
else [request.env.user.company_id.id]
for company_id in cookies_cids:
if company_id not in self.env.user.company_ids.ids:
cookies_cids.remove(company_id)
if not cookies_cids:
cookies_cids = [self.env.company.id]
if len(cookies_cids) == 1:
cookies_cids.append(0)
return cookies_cids
def get_filter(self, option):
data = self.get_filter_data(option)
filters = {}
@ -122,24 +107,22 @@ class AccountCasgFlow(models.TransientModel):
def get_filter_data(self, option):
r = self.env['account.cash.flow'].search([('id', '=', option[0])])
default_filters = {}
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
# company_id = self.env.company
company_domain = [('company_id', '=', company_id.id)]
company_id = self.env.companies
company_domain = [('company_id', 'in', company_id.ids)]
journals = r.journal_ids if r.journal_ids else self.env['account.journal'].search(company_domain)
accounts = self.account_ids if self.account_ids else self.env['account.account'].search(company_domain)
filter_dict = {
'journal_ids': r.journal_ids.ids,
'account_ids': self.account_ids.ids,
'company_id': company_id.id,
'company_id': company_id.ids,
'date_from': r.date_from,
'date_to': r.date_to,
'levels': r.levels,
'target_move': r.target_move,
'journals_list': [(j.id, j.name, j.code) for j in journals],
'accounts_list': [(a.id, a.name) for a in accounts],
'company_name': company_id and company_id.name,
'company_name': ', '.join(self.env.companies.mapped('name')),
}
filter_dict.update(default_filters)
return filter_dict
@ -147,9 +130,7 @@ class AccountCasgFlow(models.TransientModel):
def _get_report_values(self, data, option):
cr = self.env.cr
data = self.get_filter(option)
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
# company_id = self.env.company
company_id = self.env.company
currency = company_id.currency_id
symbol = company_id.currency_id.symbol
rounding = company_id.currency_id.rounding
@ -159,27 +140,25 @@ class AccountCasgFlow(models.TransientModel):
account_res = []
journal_res = []
fetched = []
account_type_id = self.env.ref('account.data_account_type_liquidity').id
model = self.env.context.get('active_model')
if data.get('levels') == 'summary':
state = """ WHERE am.state = 'posted' """ if data.get('target_move') == 'posted' else ''
state = """ AND am.state = 'posted' """ if data.get('target_move') == 'Posted' else ''
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
query3 = """SELECT to_char(am.date, 'Month') as month_part, extract(YEAR from am.date) as year_part,
sum(aml.debit) AS total_debit, sum(aml.credit) AS total_credit,
sum(aml.balance) AS total_balance FROM (SELECT am.date, am.id, am.state FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
LEFT JOIN res_company cmp ON cmp.id = am.company_id
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' AND cmp.id='""" + str(
company_id.id) + """' ) am
account_type_id) + """' """ + state + state2 +""") am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
""" + state + """GROUP BY month_part,year_part"""
GROUP BY month_part,year_part"""
cr = self._cr
cr.execute(query3)
fetched_data = cr.dictfetchall()
@ -187,19 +166,19 @@ class AccountCasgFlow(models.TransientModel):
account_type_id = self.env.ref(
'account.data_account_type_liquidity').id
state = """AND am.state = 'posted' """ if data.get(
'target_move') == 'posted' else ''
'target_move') == 'Posted' else """AND am.state in ('draft','posted') """
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
sql = """SELECT DISTINCT aa.id, aa.name,aa.code, sum(aml.debit) AS total_debit,
sum(aml.credit) AS total_credit,sum(aml.balance) AS total_balance
FROM (SELECT am.* FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
LEFT JOIN res_company cmp ON cmp.id = am.company_id
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' AND cmp.id='""" + str(
company_id.id) + """' """ + state + """) am
account_type_id) + """' """ + state + state2 +""") am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
@ -211,19 +190,19 @@ class AccountCasgFlow(models.TransientModel):
account_type_id = self.env.ref(
'account.data_account_type_liquidity').id
state = """AND am.state = 'posted' """ if data.get(
'target_move') == 'posted' else ''
'target_move') == 'Posted' else """AND am.state in ('draft','posted') """
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
sql = """SELECT DISTINCT aa.id, aa.name,aa.code, sum(aml.debit) AS total_debit,
sum(aml.credit) AS total_credit,sum(aml.balance) AS total_balance
FROM (SELECT am.* FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
LEFT JOIN res_company cmp ON cmp.id = am.company_id
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' AND cmp.id='""" + str(
company_id.id) + """' """ + state + """) am
account_type_id) + """' """ + state + state2 + """) am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
@ -235,19 +214,19 @@ class AccountCasgFlow(models.TransientModel):
account_type_id = self.env.ref(
'account.data_account_type_liquidity').id
state = """AND am.state = 'posted' """ if data.get(
'target_move') == 'posted' else ''
'target_move') == 'Posted' else """AND am.state in ('draft','posted') """
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
sql = """SELECT DISTINCT aa.id, aa.name,aa.code, sum(aml.debit) AS total_debit,
sum(aml.credit) AS total_credit,sum(aml.balance) AS total_balance
FROM (SELECT am.* FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
LEFT JOIN res_company cmp ON cmp.id = am.company_id
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' AND cmp.id='""" + str(
company_id.id) + """' """ + state + """) am
account_type_id) + """' """ + state + state2 + """) am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
@ -260,19 +239,19 @@ class AccountCasgFlow(models.TransientModel):
account_type_id = self.env.ref(
'account.data_account_type_liquidity').id
state = """AND am.state = 'posted' """ if data.get(
'target_move') == 'posted' else ''
'target_move') == 'Posted' else """AND am.state in ('draft','posted') """
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
sql = """SELECT DISTINCT aa.id, aa.name,aa.code, sum(aml.debit) AS total_debit,
sum(aml.credit) AS total_credit,sum(aml.balance) AS total_balance
FROM (SELECT am.* FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
LEFT JOIN res_company cmp ON cmp.id = am.company_id
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' AND cmp.id='""" + str(
company_id.id) + """' """ + state + """) am
account_type_id) + """' """ + state + state2 + """) am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
@ -282,41 +261,39 @@ class AccountCasgFlow(models.TransientModel):
fetched_data = cr.dictfetchall()
elif data.get('levels') == 'consolidated':
state = """ WHERE am.state = 'posted' """ if data.get('target_move') == 'posted' else ''
state = """ AND am.state = 'posted' """ if data.get('target_move') == 'Posted' else ''
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
query2 = """SELECT aat.name, sum(aml.debit) AS total_debit, sum(aml.credit) AS total_credit,
sum(aml.balance) AS total_balance FROM ( SELECT am.id, am.state FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
LEFT JOIN res_company cmp ON cmp.id = am.company_id
WHERE am.date BETWEEN '""" + str(data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' AND cmp.id='""" + str(
company_id.id) + """' ) am
account_type_id) + """' """ + state + state2 + """) am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
""" + state + """GROUP BY aat.name"""
GROUP BY aat.name"""
cr = self._cr
cr.execute(query2)
fetched_data = cr.dictfetchall()
elif data.get('levels') == 'detailed':
state = """ WHERE am.state = 'posted' """ if data.get('target_move') == 'posted' else ''
state = """AND am.state = 'posted' """ if data.get('target_move') == 'Posted' else """AND am.state in ('draft','posted') """
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
query1 = """SELECT aa.id,aa.name,aa.code, sum(aml.debit) AS total_debit, sum(aml.credit) AS total_credit,
sum(aml.balance) AS total_balance FROM (SELECT am.id, am.state FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
LEFT JOIN res_company cmp ON cmp.id = am.company_id
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' AND cmp.id='""" + str(
company_id.id) + """' ) am
account_type_id) + """' """ + state + state2 + """) am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
""" + state + """GROUP BY aa.name, aa.code, aa.id"""
GROUP BY aa.name, aa.code, aa.id"""
cr = self._cr
cr.execute(query1)
fetched_data = cr.dictfetchall()
@ -328,19 +305,19 @@ class AccountCasgFlow(models.TransientModel):
else:
account_type_id = self.env.ref(
'account.data_account_type_liquidity').id
state = """AND am.state = 'posted' """ if data.get('target_move') == 'posted' else ''
state = """AND am.state = 'posted' """ if data.get('target_move') == 'Posted' else """AND am.state in ('draft','posted') """
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
# filter = " AND aml.parent_state in ('draft','posted')"
sql = """SELECT DISTINCT aa.id, aa.name,aa.code, sum(aml.debit) AS total_debit,
sum(aml.credit) AS total_credit,sum(aml.balance) AS total_balance
FROM (SELECT am.* FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
LEFT JOIN res_company cmp ON cmp.id = am.company_id
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' AND cmp.id='""" + str(
company_id.id) + """' """ + state + """) am
account_type_id) + """' """ + state + state2 +""") am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_account_type aat ON aat.id = aa.user_type_id
@ -374,7 +351,8 @@ class AccountCasgFlow(models.TransientModel):
def _get_lines(self, account, data):
account_type_id = self.env.ref(
'account.data_account_type_liquidity').id
state = """AND am.state = 'posted' """ if data.get('target_move') == 'posted' else ''
state = """AND am.state = 'posted' """ if data.get('target_move') == 'Posted' else """AND am.state in ('draft','posted') """
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
query = """SELECT aml.account_id,aj.id as j_id,aj.name,am.id, am.name as move_name, sum(aml.debit) AS total_debit,
sum(aml.credit) AS total_credit, COALESCE(SUM(aml.debit - aml.credit),0) AS balance FROM (SELECT am.* FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
@ -383,7 +361,7 @@ class AccountCasgFlow(models.TransientModel):
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' """ + state + """) am
account_type_id) + """' """ + state + state2 + """) am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_journal aj ON aj.id = am.journal_id
@ -402,7 +380,7 @@ class AccountCasgFlow(models.TransientModel):
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' """ + state + """) am
account_type_id) + """' """ + state + state2 + """) am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_journal aj ON aj.id = am.journal_id
@ -427,7 +405,8 @@ class AccountCasgFlow(models.TransientModel):
account_type_id = self.env.ref(
'account.data_account_type_liquidity').id
offset_count = offset * fetch_range
state = """AND am.state = 'posted' """ if data.get('target_move') == 'posted' else ''
state = """AND am.state = 'posted' """ if data.get('target_move') == 'Posted' else """AND am.state in ('draft','posted') """
state2 = ' AND aml.company_id IN %s' % str(tuple(self.env.companies.ids) + tuple([0]))
sql2 = """SELECT aa.name as account_name, aj.name, sum(aml.debit) AS total_debit,
sum(aml.credit) AS total_credit, COALESCE(SUM(aml.debit - aml.credit),0) AS balance FROM (SELECT am.* FROM account_move as am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
@ -436,7 +415,7 @@ class AccountCasgFlow(models.TransientModel):
WHERE am.date BETWEEN '""" + str(
data.get('date_from')) + """' and '""" + str(
data.get('date_to')) + """' AND aat.id='""" + str(
account_type_id) + """' """ + state + """) am
account_type_id) + """' """ + state + state2 + """) am
LEFT JOIN account_move_line aml ON aml.move_id = am.id
LEFT JOIN account_account aa ON aa.id = aml.account_id
LEFT JOIN account_journal aj ON aj.id = am.journal_id
@ -480,8 +459,6 @@ class AccountCasgFlow(models.TransientModel):
@api.model
def _get_currency(self):
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
journal = self.env['account.journal'].browse(
self.env.context.get('default_journal_id', False))
if journal.currency_id:
@ -490,10 +467,8 @@ class AccountCasgFlow(models.TransientModel):
if not lang:
lang = 'en_US'
lang = lang.replace("_", '-')
# currency_array = [self.env.company.currency_id.symbol,
# self.env.company.currency_id.position, lang]
currency_array = [company_id.currency_id.symbol,
company_id.currency_id.position, lang]
currency_array = [self.env.company.currency_id.symbol,
self.env.company.currency_id.position, lang]
return currency_array
def get_dynamic_xlsx_report(self, data, response, report_data, dfr_data):
@ -592,7 +567,7 @@ class AccountCasgFlow(models.TransientModel):
for j_rec in journal_res_list:
if data['levels'] == 'detailed':
for k in fetched_data_list:
if k['name'] == j_rec['account']:
if k['id'] == j_rec['id']:
sheet.write(row_num + 1, col_num, str(k['code']) + str(k['name']), txt_bold)
sheet.write(row_num + 1, col_num + 1, str(k['total_debit']) + str(currency_symbol), amount_bold)
sheet.write(row_num + 1, col_num + 2, str(k['total_credit']) + str(currency_symbol), amount_bold)
@ -611,7 +586,7 @@ class AccountCasgFlow(models.TransientModel):
for j_rec in account_res_list:
if data['levels'] == 'very':
for k in fetched_data_list:
if k['name'] == j_rec['account']:
if k['id'] == j_rec['id']:
sheet.write(row_num + 1, col_num, str(k['code']) + str(k['name']), txt_bold)
sheet.write(row_num + 1, col_num + 1, str(k['total_debit']) + str(currency_symbol), amount_bold)
sheet.write(row_num + 1, col_num + 2, str(k['total_credit']) + str(currency_symbol), amount_bold)

82
dynamic_accounts_report/wizard/daybook.py

@ -4,7 +4,6 @@ from datetime import timedelta, datetime
from odoo import fields, models, api, _
import io
import json
from odoo.http import request
from odoo.exceptions import AccessError, UserError, AccessDenied
try:
@ -58,19 +57,6 @@ class AgeingView(models.TransientModel):
'report_lines': records['Accounts'],
'currency': currency,
}
def get_current_company_value(self):
cookies_cids = [int(r) for r in request.httprequest.cookies.get('cids').split(",")] \
if request.httprequest.cookies.get('cids') \
else [request.env.user.company_id.id]
for company_id in cookies_cids:
if company_id not in self.env.user.company_ids.ids:
cookies_cids.remove(company_id)
if not cookies_cids:
cookies_cids = [self.env.company.id]
if len(cookies_cids) == 1:
cookies_cids.append(0)
return cookies_cids
def get_filter(self, option):
data = self.get_filter_data(option)
@ -103,46 +89,61 @@ class AgeingView(models.TransientModel):
def get_filter_data(self, option):
r = self.env['account.day.book'].search([('id', '=', option[0])])
default_filters = {}
# company_id = self.env.company
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
company_domain = [('company_id', '=', company_id.id)]
journals = self.journal_ids if self.journal_ids else self.env[
'account.journal'].search(company_domain)
accounts = self.account_ids if self.account_ids else self.env[
'account.account'].search(company_domain)
company_id = self.env.companies
company_domain = [('company_id', 'in', company_id.ids)]
# journals = self.journal_ids if self.journal_ids else self.env[
# 'account.journal'].search(company_domain)
# accounts = self.account_ids if self.account_ids else self.env[
# 'account.account'].search(company_domain)
journal_ids = self.journal_ids if self.journal_ids else self.env['account.journal'].search(company_domain, order="company_id, name")
accounts_ids = self.account_ids if self.account_ids else self.env['account.account'].search(company_domain, order="company_id, name")
journals = []
o_company = False
for j in journal_ids:
if j.company_id != o_company:
journals.append(('divider', j.company_id.name))
o_company = j.company_id
journals.append((j.id, j.name, j.code))
accounts = []
o_company = False
for j in accounts_ids:
if j.company_id != o_company:
accounts.append(('divider', j.company_id.name))
o_company = j.company_id
accounts.append((j.id, j.name))
filter_dict = {
'journal_ids': self.journal_ids.ids,
'account_ids': self.account_ids.ids,
'company_id': company_id.id,
'company_id': company_id.ids,
'date_from': r.date_from,
'date_to':r.date_to,
'target_move': r.target_move,
'journals_list': [(j.id, j.name, j.code) for j in journals],
'accounts_list': [(a.id, a.name) for a in accounts],
'journals_list': journals,
'accounts_list': accounts,
'company_name': company_id and company_id.name,
'company_name': ', '.join(self.env.companies.mapped('name')),
}
filter_dict.update(default_filters)
return filter_dict
def _get_report_values(self, data=None):
form_data = data['form']
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
company_domain = [('company_id', '=', company_id.id)]
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(company_domain)
self.env['account.account'].search([])
if not accounts:
raise UserError(_("No Accounts Found! Please Add One"))
active_jrnl = data['form']['journal_ids']
journals = self.env['account.journal'].search(
[('id', 'in', active_jrnl)]) if data['form']['journal_ids'] else \
self.env['account.journal'].search(company_domain)
self.env['account.journal'].search([])
if not journals:
raise UserError(_("No journals Found!"))
@ -196,19 +197,19 @@ class AgeingView(models.TransientModel):
return res
def _get_account_move_entry(self, accounts, form_data,journals, pass_date):
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
cr = self.env.cr
move_line = self.env['account.move.line']
tables, where_clause, where_params = move_line._query_get()
where_params[0] = int(company_id.id)
wheres = [""]
companies = self.env.companies.ids
companies.append(0)
target_move = "AND l.company_id in %s" % str(tuple(companies))
if where_clause.strip():
wheres.append(where_clause.strip())
if form_data['target_move'] == 'posted':
target_move = "AND m.state = 'posted'"
target_move += " AND m.state = 'posted'"
else:
target_move = ''
target_move += """AND m.state in ('draft','posted') """
sql = ('''
SELECT l.id AS lid,m.id AS move_id, 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,
@ -247,9 +248,6 @@ class AgeingView(models.TransientModel):
@api.model
def _get_currency(self):
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
journal = self.env['account.journal'].browse(
self.env.context.get('default_journal_id', False))
if journal.currency_id:
@ -258,10 +256,8 @@ class AgeingView(models.TransientModel):
if not lang:
lang = 'en_US'
lang = lang.replace("_", '-')
# currency_array = [self.env.company.currency_id.symbol,
# self.env.company.currency_id.position, lang]
currency_array = [company_id.currency_id.symbol,
company_id.currency_id.position, lang]
currency_array = [self.env.company.currency_id.symbol,
self.env.company.currency_id.position, lang]
return currency_array
def get_dynamic_xlsx_report(self, data, response, report_data, dfr_data):

96
dynamic_accounts_report/wizard/general_ledger.py

@ -4,7 +4,6 @@ from odoo import fields, models, api, _
import io
import json
from odoo.exceptions import AccessError, UserError, AccessDenied
from odoo.http import request
try:
from odoo.tools.misc import xlsxwriter
except ImportError:
@ -43,21 +42,24 @@ class GeneralView(models.TransientModel):
def view_report(self, option, title):
r = self.env['account.general.ledger'].search([('id', '=', option[0])])
new_title = ''
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
# company_domain = [('company_id', '=', company_id.id)]
trans_title = self.env['ir.translation'].search([('value', '=', title), ('module', '=', 'dynamic_accounts_report')], limit=1).src
journals = r.journal_ids
if title == 'General Ledger' or trans_title == 'General Ledger':
company_id = self.env.companies.ids
if r.journal_ids:
journals = r.journal_ids
else:
journals = self.env['account.journal'].search([('company_id', 'in', company_id)])
if title == 'General Ledger' or trans_title == 'General Ledger':
if r.journal_ids:
journals = r.journal_ids
else:
journals = self.env['account.journal'].search([('company_id', 'in', company_id)])
new_title = title
if title == 'Bank Book' or trans_title == 'Bank Book':
journals = self.env['account.journal'].search([('type', '=', 'bank'), ('company_id', '=', company_id.id)],
limit=1)
journals = self.env['account.journal'].search([('type', '=', 'bank'), ('company_id', 'in', company_id)])
new_title = title
if title == 'Cash Book' or trans_title == 'Cash Book':
journals = self.env['account.journal'].search([('type', '=', 'cash'), ('company_id', '=', company_id.id)],
limit=1)
journals = self.env['account.journal'].search([('type', '=', 'cash'), ('company_id', 'in', company_id)])
new_title = title
r.write({
'titles': new_title,
@ -97,20 +99,6 @@ class GeneralView(models.TransientModel):
'currency': currency,
}
def get_current_company_value(self):
cookies_cids = [int(r) for r in request.httprequest.cookies.get('cids').split(",")] \
if request.httprequest.cookies.get('cids') \
else [request.env.user.company_id.id]
for company_id in cookies_cids:
if company_id not in self.env.user.company_ids.ids:
cookies_cids.remove(company_id)
if not cookies_cids:
cookies_cids = [self.env.company.id]
if len(cookies_cids) == 1:
cookies_cids.append(0)
return cookies_cids
def get_filter(self, option):
data = self.get_filter_data(option)
filters = {}
@ -157,46 +145,71 @@ class GeneralView(models.TransientModel):
def get_filter_data(self, option):
r = self.env['account.general.ledger'].search([('id', '=', option[0])])
default_filters = {}
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
# company_id = self.env.company
company_domain = [('company_id', '=', company_id.id)]
journals = r.journal_ids if r.journal_ids else self.env['account.journal'].search(company_domain)
accounts = self.account_ids if self.account_ids else self.env['account.account'].search(company_domain)
company_id = self.env.companies
company_domain = [('company_id', 'in', company_id.ids)]
account_tags = r.account_tag_ids if r.account_tag_ids else self.env[
'account.account.tag'].search([])
analytics = r.analytic_ids if r.analytic_ids else self.env['account.analytic.account'].search(
company_domain)
analytic_tags = r.analytic_tag_ids if r.analytic_tag_ids else self.env[
'account.analytic.tag'].search([])
journal_ids = r.journal_ids if r.journal_ids else self.env['account.journal'].search(company_domain, order="company_id, name")
accounts_ids = self.account_ids if self.account_ids else self.env['account.account'].search(company_domain, order="company_id, name")
journals = []
o_company = False
for j in journal_ids:
if j.company_id != o_company:
journals.append(('divider', j.company_id.name))
o_company = j.company_id
journals.append((j.id, j.name, j.code))
accounts = []
o_company = False
for j in accounts_ids:
if j.company_id != o_company:
accounts.append(('divider', j.company_id.name))
o_company = j.company_id
accounts.append((j.id, j.name))
filter_dict = {
'journal_ids': r.journal_ids.ids,
'analytic_ids': r.analytic_ids.ids,
'analytic_tag_ids': r.analytic_tag_ids.ids,
'account_ids': r.account_ids.ids,
'account_tag_ids': r.account_tag_ids.ids,
'company_id': company_id.id,
'company_id': company_id.ids,
'date_from': r.date_from,
'date_to': r.date_to,
'target_move': r.target_move,
'journals_list': [(j.id, j.name, j.code) for j in journals],
'accounts_list': [(a.id, a.name) for a in accounts],
# 'journals_list': [(j.id, j.name, j.code) for j in journals],
'journals_list': journals,
# 'accounts_list': [(a.id, a.name) for a in accounts],
'accounts_list': accounts,
'account_tag_list': [(a.id, a.name) for a in account_tags],
'analytic_list': [(anl.id, anl.name) for anl in analytics],
'analytic_tag_list': [(anltag.id, anltag.name) for anltag in analytic_tags],
'company_name': company_id and company_id.name,
'company_name': ', '.join(self.env.companies.mapped('name')),
}
filter_dict.update(default_filters)
return filter_dict
def _get_report_values(self, data):
docs = data['model']
display_account = data['display_account']
init_balance = True
journals = data['journals']
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
company_domain = [('company_id', '=', company_id.id)]
if not journals:
raise UserError(_("No journals Found! Please Add One"))
company_id = self.env.companies
company_domain = [('company_id', 'in', company_id.ids)]
accounts = self.env['account.account'].search(company_domain)
if not accounts:
raise UserError(_("No Accounts Found! Please Add One"))
@ -248,8 +261,6 @@ class GeneralView(models.TransientModel):
return res
def _get_accounts(self, accounts, init_balance, display_account, data):
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
cr = self.env.cr
MoveLine = self.env['account.move.line']
@ -260,8 +271,6 @@ class GeneralView(models.TransientModel):
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_where_params[0] = int(company_id.id)
init_wheres = [""]
if init_where_clause.strip():
init_wheres.append(init_where_clause.strip())
@ -314,7 +323,6 @@ class GeneralView(models.TransientModel):
move_lines[row.pop('account_id')].append(row)
tables, where_clause, where_params = MoveLine._query_get()
where_params[0] = int(company_id.id)
wheres = [""]
if where_clause.strip():
wheres.append(where_clause.strip())
@ -396,8 +404,6 @@ class GeneralView(models.TransientModel):
@api.model
def _get_currency(self):
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
journal = self.env['account.journal'].browse(
self.env.context.get('default_journal_id', False))
if journal.currency_id:
@ -408,8 +414,6 @@ class GeneralView(models.TransientModel):
lang = lang.replace("_", '-')
currency_array = [self.env.company.currency_id.symbol,
self.env.company.currency_id.position,lang]
currency_array = [company_id.currency_id.symbol,
company_id.currency_id.position, lang]
return currency_array
def get_dynamic_xlsx_report(self, data, response ,report_data, dfr_data):

82
dynamic_accounts_report/wizard/partner_leadger.py

@ -4,7 +4,7 @@ from odoo import fields, models, api, _
import io
import json
from odoo.exceptions import AccessError, UserError, AccessDenied
from odoo.http import request
try:
from odoo.tools.misc import xlsxwriter
except ImportError:
@ -78,20 +78,6 @@ class PartnerView(models.TransientModel):
'currency': currency,
}
def get_current_company_value(self):
cookies_cids = [int(r) for r in request.httprequest.cookies.get('cids').split(",")] \
if request.httprequest.cookies.get('cids') \
else [request.env.user.company_id.id]
for company_id in cookies_cids:
if company_id not in self.env.user.company_ids.ids:
cookies_cids.remove(company_id)
if not cookies_cids:
cookies_cids = [self.env.company.id]
if len(cookies_cids) == 1:
cookies_cids.append(0)
return cookies_cids
def get_filter(self, option):
data = self.get_filter_data(option)
@ -146,13 +132,11 @@ class PartnerView(models.TransientModel):
def get_filter_data(self, option):
r = self.env['account.partner.ledger'].search([('id', '=', option[0])])
default_filters = {}
# company_id = self.env.company
company = self.get_current_company_value()
company_id = self.env['res.company'].search([('id', 'in', company)])
company_domain = [('company_id', 'in', company)]
journals = r.journal_ids if r.journal_ids else self.env['account.journal'].search(company_domain)
company_domain += [('user_type_id.type', 'in', ('receivable', 'payable'))]
accounts = self.account_ids if self.account_ids else self.env['account.account'].search(company_domain)
company_id = self.env.companies.ids
company_domain = [('company_id', 'in', company_id)]
journal_ids = r.journal_ids if r.journal_ids else self.env['account.journal'].search(company_domain, order="company_id, name")
accounts_ids = self.account_ids if self.account_ids else self.env['account.account'].search(company_domain, order="company_id, name")
partner = r.partner_ids if r.partner_ids else self.env[
'res.partner'].search([])
@ -161,16 +145,36 @@ class PartnerView(models.TransientModel):
account_types = r.account_type_ids if r.account_type_ids \
else self.env['account.account.type'].search([('type', 'in', ('receivable', 'payable'))])
journals = []
o_company = False
for j in journal_ids:
if j.company_id != o_company:
journals.append(('divider', j.company_id.name))
o_company = j.company_id
journals.append((j.id, j.name, j.code))
accounts = []
o_company = False
for j in accounts_ids:
if j.company_id != o_company:
accounts.append(('divider', j.company_id.name))
o_company = j.company_id
accounts.append((j.id, j.name))
filter_dict = {
'journal_ids': r.journal_ids.ids,
'account_ids': r.account_ids.ids,
'company_id': company_id[0].id,
'company_id': company_id,
'date_from': r.date_from,
'date_to': r.date_to,
'target_move': r.target_move,
'journals_list': [(j.id, j.name, j.code) for j in journals],
'accounts_list': [(a.id, a.name) for a in accounts],
'company_name': company_id[0] and company_id[0].name,
'journals_list': journals,
'accounts_list': accounts,
# 'company_name': company_id and company_id.name,
'company_name': ', '.join(self.env.companies.mapped('name')),
'partners': r.partner_ids.ids,
'reconciled': r.reconciled,
'account_type': r.account_type_ids.ids,
@ -187,13 +191,12 @@ class PartnerView(models.TransientModel):
docs = data['model']
display_account = data['display_account']
init_balance = True
company = self.get_current_company_value()
company_id = self.env['res.company'].search([('id', 'in', company)])
company_id = self.env.companies.ids
accounts = self.env['account.account'].search([('user_type_id.type', 'in', ('receivable', 'payable')),
('company_id', 'in', company)])
('company_id', 'in', company_id)])
if data['account_type']:
accounts = self.env['account.account'].search(
[('user_type_id.id', 'in', data['account_type'].ids), ('company_id', '=', company_id.id)])
[('user_type_id.id', 'in', data['account_type'].ids),('company_id', 'in', company_id)])
partners = self.env['res.partner'].search([])
@ -202,7 +205,7 @@ class PartnerView(models.TransientModel):
[('category_id', 'in', data['partner_tags'].ids)])
if not accounts:
raise UserError(_("No Accounts Found! Please Add One"))
partner_res = self._get_partners(partners, accounts, init_balance, display_account, data)
partner_res = self._get_partners(partners,accounts, init_balance, display_account, data)
debit_total = 0
debit_total = sum(x['debit'] for x in partner_res)
@ -261,10 +264,8 @@ class PartnerView(models.TransientModel):
move_line = self.env['account.move.line']
move_lines = {x: [] for x in partners.ids}
currency_id = self.env.company.currency_id
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
tables, where_clause, where_params = move_line._query_get()
where_params[0] = int(company_id.id)
wheres = [""]
if where_clause.strip():
wheres.append(where_clause.strip())
@ -318,6 +319,7 @@ class PartnerView(models.TransientModel):
cr.execute(sql, params)
account_list = {x.id: {'name': x.name, 'code': x.code} for x in accounts}
for row in cr.dictfetchall():
balance = 0
if row['partner_id'] in move_lines:
@ -330,9 +332,7 @@ class PartnerView(models.TransientModel):
partner_res = []
for partner in partners:
# company_id = self.env.company
company = self.get_current_company_value()
company_id = self.env['res.company'].search([('id', 'in', company)])
company_id = self.env.company
currency = company_id.currency_id
res = dict((fn, 0.0) for fn in ['credit', 'debit', 'balance'])
res['name'] = partner.name
@ -353,8 +353,6 @@ class PartnerView(models.TransientModel):
@api.model
def _get_currency(self):
company = self.get_current_company_value()
company_id = self.env['res.company'].search([('id', 'in', company)])
journal = self.env['account.journal'].browse(
self.env.context.get('default_journal_id', False))
if journal.currency_id:
@ -363,10 +361,8 @@ class PartnerView(models.TransientModel):
if not lang:
lang = 'en_US'
lang = lang.replace("_", '-')
# currency_array = [self.env.company.currency_id.symbol,
# self.env.company.currency_id.position, lang]
currency_array = [company_id[0].currency_id.symbol,
company_id[0].currency_id.position, lang]
currency_array = [self.env.company.currency_id.symbol,
self.env.company.currency_id.position, lang]
return currency_array
def get_dynamic_xlsx_report(self, data, response, report_data, dfr_data):

87
dynamic_accounts_report/wizard/trial_balance.py

@ -15,14 +15,11 @@ except ImportError:
class TrialView(models.TransientModel):
_inherit = "account.common.report"
_name = 'account.trial.balance'
_check_company_auto = True
journal_ids = fields.Many2many('account.journal',
string='Journals', required=True,
default=[])
company_id = fields.Many2one('res.company', string='Company', required=True, default=lambda self: self.env['res.company']._company_default_get(
'account.trial.balance'))
display_account = fields.Selection(
[('all', 'All'), ('movement', 'With movements'),
('not_zero', 'With balance is not equal to 0')],
@ -81,32 +78,9 @@ class TrialView(models.TransientModel):
filters['journals_list'] = data.get('journals_list')
filters['company_name'] = data.get('company_name')
filters['target_move'] = data.get('target_move').capitalize()
filters['date_from'] = data.get('date_from')
filters['date_to'] = data.get('date_to')
return filters
def get_filter_data(self, option):
r = self.env['account.trial.balance'].search([('id', '=', option[0])])
default_filters = {}
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
# company_id = self.env.company
company_domain = [('company_id', '=', company_id.id)]
journals = r.journal_ids if r.journal_ids else self.env['account.journal'].search(company_domain)
filter_dict = {
'journal_ids': r.journal_ids.ids,
'company_id': company_id.id,
'date_from': r.date_from,
'date_to': r.date_to,
'target_move': r.target_move,
'journals_list': [(j.id, j.name, j.code) for j in journals],
'company_name': company_id and company_id.name,
}
filter_dict.update(default_filters)
return filter_dict
def get_current_company_value(self):
cookies_cids = [int(r) for r in request.httprequest.cookies.get('cids').split(",")] \
@ -121,15 +95,41 @@ class TrialView(models.TransientModel):
cookies_cids.append(0)
return cookies_cids
def get_filter_data(self, option):
r = self.env['account.trial.balance'].search([('id', '=', option[0])])
default_filters = {}
company_id = self.env.companies.ids
company_domain = [('company_id', 'in', company_id)]
journal_ids = r.journal_ids if r.journal_ids else self.env['account.journal'].search(company_domain, order="company_id, name")
journals = []
o_company = False
for j in journal_ids:
if j.company_id != o_company:
journals.append(('divider', j.company_id.name))
o_company = j.company_id
journals.append((j.id, j.name, j.code))
filter_dict = {
'journal_ids': r.journal_ids.ids,
'company_id': company_id,
'date_from': r.date_from,
'date_to': r.date_to,
'target_move': r.target_move,
'journals_list': journals,
# 'journals_list': [(j.id, j.name, j.code) for j in journals],
'company_name': ', '.join(self.env.companies.mapped('name')),
}
filter_dict.update(default_filters)
return filter_dict
def _get_report_values(self, data):
docs = data['model']
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
company_domain = [('company_id', '=', company_id.id)]
display_account = data['display_account']
journals = data['journals']
# accounts = self.env['account.account'].search([])
accounts = self.env['account.account'].search(company_domain)
accounts = self.env['account.account'].search([])
if not accounts:
raise UserError(_("No Accounts Found! Please Add One"))
account_res = self._get_accounts(accounts, display_account, data)
@ -162,12 +162,10 @@ class TrialView(models.TransientModel):
return res
def _get_accounts(self, accounts, display_account, data):
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
account_result = {}
# Prepare sql query base on selected parameters from wizard
tables, where_clause, where_params = self.env['account.move.line']._query_get()
where_params[0] = int(company_id.id)
tables = tables.replace('"', '')
if not tables:
tables = 'account_move_line'
@ -176,9 +174,9 @@ class TrialView(models.TransientModel):
wheres.append(where_clause.strip())
filters = " AND ".join(wheres)
if data['target_move'] == 'posted':
filters += " AND account_move_line.parent_state = 'posted'"
filters += " AND account_move_line.parent_state = 'posted'"
else:
filters += " AND account_move_line.parent_state in ('draft','posted')"
filters += " AND account_move_line.parent_state in ('draft','posted')"
if data.get('date_from'):
filters += " AND account_move_line.date >= '%s'" % data.get('date_from')
if data.get('date_to'):
@ -186,7 +184,7 @@ class TrialView(models.TransientModel):
if data['journals']:
filters += ' AND jrnl.id IN %s' % str(tuple(data['journals'].ids) + tuple([0]))
tables += 'JOIN account_journal jrnl ON (account_move_line.journal_id=jrnl.id)'
tables += ' JOIN account_journal jrnl ON (account_move_line.journal_id=jrnl.id)'
# 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" + \
@ -235,15 +233,15 @@ class TrialView(models.TransientModel):
wheres.append(where_clause.strip())
filters = " AND ".join(wheres)
if data['target_move'] == 'posted':
filters += " AND account_move_line.parent_state = 'posted'"
filters += " AND account_move_line.parent_state = 'posted'"
else:
filters += " AND account_move_line.parent_state in ('draft','posted')"
filters += " AND account_move_line.parent_state in ('draft','posted')"
if data.get('date_from'):
filters += " AND account_move_line.date < '%s'" % data.get('date_from')
if data['journals']:
filters += ' AND jrnl.id IN %s' % str(tuple(data['journals'].ids) + tuple([0]))
tables += 'JOIN account_journal jrnl ON (account_move_line.journal_id=jrnl.id)'
tables += ' JOIN account_journal jrnl ON (account_move_line.journal_id=jrnl.id)'
# compute the balance, debit and credit for the provided accounts
request = (
@ -256,8 +254,6 @@ class TrialView(models.TransientModel):
@api.model
def _get_currency(self):
company = self.get_current_company_value()[0]
company_id = self.env['res.company'].search([('id', '=', int(company))])
journal = self.env['account.journal'].browse(
self.env.context.get('default_journal_id', False))
if journal.currency_id:
@ -266,11 +262,8 @@ class TrialView(models.TransientModel):
if not lang:
lang = 'en_US'
lang = lang.replace("_", '-')
# currency_array = [self.env.company.currency_id.symbol,
# self.env.company.currency_id.position,
# lang]
currency_array = [company_id.currency_id.symbol,
company_id.currency_id.position,
currency_array = [self.env.company.currency_id.symbol,
self.env.company.currency_id.position,
lang]
return currency_array

Loading…
Cancel
Save