Browse Source

Mar 21 : [UPDT] Updated 'dynamic_accounts_report'

pull/243/merge
AjmalCybro 1 month ago
parent
commit
3f107071b0
  1. 2
      dynamic_accounts_report/__manifest__.py
  2. 5
      dynamic_accounts_report/doc/RELEASE_NOTES.md
  3. 2
      dynamic_accounts_report/static/src/css/report.css
  4. 77
      dynamic_accounts_report/static/src/js/trial_balance.js
  5. 182
      dynamic_accounts_report/static/src/xml/trial_balance_view.xml
  6. 1
      dynamic_accounts_report/wizard/trial_balance.py

2
dynamic_accounts_report/__manifest__.py

@ -22,7 +22,7 @@
{
'name': 'Dynamic Financial Reports V16',
'version': '16.0.1.0.14',
'version': '16.0.2.0.14',
'category': 'Accounting',
'live_test_url': 'https://www.youtube.com/watch?v=gVQi9q9Rs-E&t=5s',
'summary': "Odoo 16 Accounting Financial Reports",

5
dynamic_accounts_report/doc/RELEASE_NOTES.md

@ -50,3 +50,8 @@
### version 16.0.1.0.12,
### BUGFIX
- Report Bug Fix: Problem with rounding issue.
-
### 12.03.2025
### version 16.0.2.0.0,
### UPDT
- Added new filter display accounts in trial balance.

2
dynamic_accounts_report/static/src/css/report.css

@ -10,7 +10,7 @@ width: 300px !important;
.table{
margin-bottom: none !important;
}
.time_range, .category_filter, .search-Target-move, .partner_filter, .search-Result-Selection, .acccount_type_filter, .journals_filter, .acc_filter, .search-Reconciled, .accounts_filter, .account_tags_filter {
.time_range, .category_filter, .search-Target-move,.search-display_account, .partner_filter, .search-Result-Selection, .acccount_type_filter, .journals_filter, .acc_filter, .search-Reconciled, .accounts_filter, .account_tags_filter {
float: left;
width: auto;
}

77
dynamic_accounts_report/static/src/js/trial_balance.js

@ -72,15 +72,11 @@ odoo.define('dynamic_accounts_report.trial_balance', function(require) {
],
}).then(function(datas) {
_.each(datas['report_lines'], function(rep_lines) {
rep_lines.debit = self.format_currency(datas['currency'], rep_lines.debit);
rep_lines.credit = self.format_currency(datas['currency'], rep_lines.credit);
rep_lines.balance = self.format_currency(datas['currency'], rep_lines.balance);
});
if (initial_render) {
self.$('.filter_view_tb').html(QWeb.render('TrialFilterView', {
@ -92,9 +88,9 @@ odoo.define('dynamic_accounts_report.trial_balance', function(require) {
self.$el.find('.target_move').select2({
placeholder: 'Target Move...',
});
// self.$el.find('#start_dateee').select2({
// placeholder: 'Date.',
// });
self.$el.find('.display_account').select2({
placeholder: 'Display Accounts...',
});
}
var child = [];
@ -263,32 +259,32 @@ odoo.define('dynamic_accounts_report.trial_balance', function(require) {
apply_filter: function(event) {
event.preventDefault();
var self = this;
self.initial_render = false;
var filter_data_selected = {};
var journal_ids = [];
var journal_text = [];
var journal_res = document.getElementById("journal_res")
var journal_list = $(".journals").select2('data')
for (var i = 0; i < journal_list.length; i++) {
if (journal_list[i].element[0].selected === true) {
journal_ids.push(parseInt(journal_list[i].id))
if (journal_text.includes(journal_list[i].text) === false) {
journal_text.push(journal_list[i].text)
}
journal_res.value = journal_text
journal_res.innerHTML = journal_res.value;
}
}
if (journal_list.length == 0) {
journal_res.value = ""
journal_res.innerHTML = "";
}
filter_data_selected.journal_ids = journal_ids
event.preventDefault();
var self = this;
self.initial_render = false;
var filter_data_selected = {};
var journal_ids = [];
var journal_text = [];
var journal_res = document.getElementById("journal_res");
var journal_list = $(".journals").select2('data');
for (var i = 0; i < journal_list.length; i++) {
if (journal_list[i].element[0].selected === true) {
journal_ids.push(parseInt(journal_list[i].id));
if (journal_text.includes(journal_list[i].text) === false) {
journal_text.push(journal_list[i].text);
}
journal_res.value = journal_text;
journal_res.innerHTML = journal_res.value;
}
}
if (journal_list.length == 0) {
journal_res.value = "";
journal_res.innerHTML = "";
}
filter_data_selected.journal_ids = journal_ids;
if (this.$el.find('.datetimepicker-input[name="date_from"]').val()) {
filter_data_selected.date_from = moment(this.$el.find('.datetimepicker-input[name="date_from"]').val(), time.getLangDateFormat()).locale('en').format('YYYY-MM-DD');
@ -318,6 +314,21 @@ odoo.define('dynamic_accounts_report.trial_balance', function(require) {
}
}
// Display Accounts Filter
// if ($(".display_account").length) {
// var display_account_res = document.getElementById("display_account_res");
// var display_account_select = $("#display_accounts");
// var selectedValue = display_account_select.val() || "all";
// filter_data_selected.display_account = selectedValue;
// display_account_res.innerHTML = selectedValue;
// }
if ($(".display_account").length) {
var display_account_res = document.getElementById("display_account_res");
var display_account_select = $("#display_accounts");
var selectedOption = display_account_select.find("option:selected").text();
filter_data_selected.display_account = display_account_select.val();
display_account_res.innerHTML = selectedOption;
}
rpc.query({
model: 'account.trial.balance',
method: 'write',

182
dynamic_accounts_report/static/src/xml/trial_balance_view.xml

@ -58,7 +58,8 @@
<div class="form-group ">
<div class="show-gl" aria-atomic="true" id="" data-target-input="">
<li role="presentation">
<a role="menuitem" style="background-color:aqua; font-weight:bold;"
<a role="menuitem"
style="background-color:aqua; font-weight:bold;"
t-att-data-account-id="account['id']" class="show-gl">
View General Ledger
</a>
@ -77,22 +78,22 @@
<td class="mon_fld">
<t t-esc="currency[0]"/>
<t t-out="Math.round(account['Init_balance']['debit'] * Math.pow(10, currency[3])) / Math.pow(10, currency[3])"/>
<!-- <t t-raw="account['Init_balance']['debit']"/>-->
<!-- <t t-raw="account['Init_balance']['debit']"/>-->
</td>
<td class="mon_fld">
<t t-esc="currency[0]"/>
<!-- <t t-raw="account['Init_balance']['credit']"/>-->
<!-- <t t-raw="account['Init_balance']['credit']"/>-->
<t t-out="Math.round(account['Init_balance']['credit'] * Math.pow(10, currency[3])) / Math.pow(10, currency[3])"/>
</td>
</t>
<t t-else="">
<td class="mon_fld">
<!-- <t t-raw="account['Init_balance']['debit']"/>-->
<!-- <t t-raw="account['Init_balance']['debit']"/>-->
<t t-out="Math.round(account['Init_balance']['debit'] * Math.pow(10, currency[3])) / Math.pow(10, currency[3])"/>
<t t-esc="currency[0]"/>
</td>
<td class="mon_fld">
<!-- <t t-raw="account['Init_balance']['credit']"/>-->
<!-- <t t-raw="account['Init_balance']['credit']"/>-->
<t t-out="Math.round(account['Init_balance']['credit'] * Math.pow(10, currency[3])) / Math.pow(10, currency[3])"/>
<t t-esc="currency[0]"/>
</td>
@ -163,14 +164,14 @@
<td class="mon_fld" style="">
<strong>
<t t-esc="currency[0]"/>
<!-- <t t-raw="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-raw="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>
@ -216,93 +217,108 @@
<br></br>
<div class="sub_container_right row" style="width:30%;height:3%;top:0px;position: relative;">
<div class="time_range" style="">
<a type="button" class="dropdown-toggle" data-bs-toggle="dropdown" >
<span class="fa fa-calendar" title="Dates" role="img" aria-label="Dates"></span>
Date Range
</a>
<div class="dropdown-menu" role="menu">
<div class="form-group">
<label class="" for="date_from">Start Date :</label>
<div class="input-group date" id="date_from" data-target-input="nearest">
<!-- <t t-set='date_formatted'><t t-options='{"widget": "date"}' t-esc="filter_data.date_from"/></t>-->
<!-- <input type="text" name="date_from" class="form-control datetimepicker-input" t-att-value="date_formatted" data-target="#date_from" t-att-name="prefix"/>-->
<input type="text" name="date_from" class="form-control datetimepicker-input" data-target="#date_from" t-att-name="prefix"/>
<div class="input-group-append" data-target="#date_from" data-bs-toggle="datetimepicker">
<span class="input-group-text">
<span class="fa fa-calendar" role="img" aria-label="Calendar"></span>
</span>
</div>
</div>
<label class="" for="date_to">End Date :</label>
<div class="input-group date" id="date_to" data-target-input="nearest">
<input type="text" name="date_to" class="form-control datetimepicker-input" data-target="#date_to" t-att-name="prefix"/>
<div class="input-group-append" data-target="#date_to" data-bs-toggle="datetimepicker">
<span class="input-group-text">
<span class="fa fa-calendar" role="img" aria-label="Calendar"></span>
</span>
</div>
</div>
<div class="time_range" style="">
<a type="button" class="dropdown-toggle" data-bs-toggle="dropdown">
<span class="fa fa-calendar" title="Dates" role="img" aria-label="Dates"></span>
Date Range
</a>
<div class="dropdown-menu" role="menu">
<div class="form-group">
<label class="" for="date_from">Start Date :</label>
<div class="input-group date" id="date_from" data-target-input="nearest">
<!-- <t t-set='date_formatted'><t t-options='{"widget": "date"}' t-esc="filter_data.date_from"/></t>-->
<!-- <input type="text" name="date_from" class="form-control datetimepicker-input" t-att-value="date_formatted" data-target="#date_from" t-att-name="prefix"/>-->
<input type="text" name="date_from" class="form-control datetimepicker-input"
data-target="#date_from" t-att-name="prefix"/>
<div class="input-group-append" data-target="#date_from"
data-bs-toggle="datetimepicker">
<span class="input-group-text">
<span class="fa fa-calendar" role="img" aria-label="Calendar"></span>
</span>
</div>
</div>
</div>
<div class="journals_filter" style="">
<a type="button" class="dropdown-toggle" data-bs-toggle="dropdown">
<span class="fa fa-book"></span>
Journals:
</a>
<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"/>
<label class="" for="date_to">End Date :</label>
<div class="input-group date" id="date_to" data-target-input="nearest">
<option disabled="disabled" role="menuitem" t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
<div role="separator" class="dropdown-divider"/>
</t>
<input type="text" name="date_to" class="form-control datetimepicker-input"
data-target="#date_to" t-att-name="prefix"/>
<div class="input-group-append" data-target="#date_to" data-bs-toggle="datetimepicker">
<span class="input-group-text">
<span class="fa fa-calendar" role="img" aria-label="Calendar"></span>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="journals_filter" style="">
<a type="button" class="dropdown-toggle" data-bs-toggle="dropdown">
<span class="fa fa-book"></span>
Journals:
</a>
<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>
</div>
<t t-else="">
<option t-attf-value="{{journal[0]}}">
<t t-esc="journal[1]"/>
</option>
</t>
<div class="search-Target-move" style="">
<a type="button" class="dropdown-toggle" data-bs-toggle="dropdown">
<span class="fa fa-filter"></span>
Target Move:
</a>
<select id="entries" class="dropdown-menu target_move" name="states[]">
<div role="separator" class="dropdown-divider"></div>
<option value="Posted">Posted Entries</option>
<option value="All">All Entries</option>
</select>
<span id="post_res"></span>
</div>
<div style="">
<button type="button" id="apply_filter" class="btn btn-primary"
style="top:0px;height:30px;color:white;background-color: #00A0AD;border-color: #00A0AD;">
Apply
</button>
</t>
</select>
<span id="journal_res"></span>
</div>
<div class="search-Target-move" style="">
<a type="button" class="dropdown-toggle" data-bs-toggle="dropdown">
<span class="fa fa-filter"></span>
Target Move:
</a>
<select id="entries" class="dropdown-menu target_move" name="states[]">
<div role="separator" class="dropdown-divider"></div>
<option value="Posted">Posted Entries</option>
<option value="All">All Entries</option>
</select>
<span id="post_res"></span>
</div>
<div class="search-display_account" style="">
<a type="button" class="dropdown-toggle" data-bs-toggle="dropdown">
<span class="fa fa-filter"></span>
Display Accounts:
</a>
<select id="display_accounts" class="dropdown-menu display_account" name="states[]">
<div role="separator" class="dropdown-divider"></div>
<option value="movement">With movements</option>
<option value="all">All</option>
<option value="not_zero">With balance is not equal to 0</option>
</select>
<span id="display_account_res"></span>
</div>
<div style="">
<button type="button" id="apply_filter" class="btn btn-primary"
style="top:0px;height:30px;color:white;background-color: #00A0AD;border-color: #00A0AD;">
Apply
</button>
</div>
<!-- </div>-->
</div>
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
</div>
</div>

1
dynamic_accounts_report/wizard/trial_balance.py

@ -184,7 +184,6 @@ class TrialView(models.TransientModel):
return res
def _get_accounts(self, accounts, display_account, data):
account_result = {}
# Prepare sql query base on selected parameters from wizard
tables, where_clause, where_params = self.env['account.move.line']._query_get()

Loading…
Cancel
Save