You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
9.7 KiB
168 lines
9.7 KiB
/** @odoo-module **/
|
|
import { registry } from '@web/core/registry';
|
|
import { ListController } from "@web/views/list/list_controller";
|
|
import { listView } from "@web/views/list/list_view";
|
|
import { useState, useRef } from "@odoo/owl";
|
|
import { useListener, useService} from "@web/core/utils/hooks";
|
|
export class AccountMoveLineListController extends ListController {
|
|
constructor() {
|
|
super(...arguments);
|
|
this.resIdList = [];
|
|
}
|
|
setup(){
|
|
super.setup();
|
|
this.state = useState({ selectedRecordId: null ,
|
|
selectedRecordIds: [],});
|
|
this.action = useService("action")
|
|
this.orm = useService("orm")
|
|
}
|
|
async openRecord(record) {
|
|
const kanban_row = this.__owl__.bdom.parentEl.ownerDocument.querySelector(`tr[data-id]`);
|
|
const data_id = parseInt(kanban_row.getAttribute('data-id'))
|
|
var data = await this.orm.call('account.bank.statement.line',
|
|
'update_match_row_data',
|
|
[record.resId])
|
|
await this.orm.call('account.bank.statement.line', 'write', [[data_id], { lines_widget_json: JSON.stringify(data) }]);
|
|
const rowSelector = this.__owl__.bdom.parentEl.querySelector(`tr[data-id='${record.id}']`)
|
|
if (!record.clickCount) {
|
|
record.clickCount = true
|
|
rowSelector.style.backgroundColor = "#d1ecf1";
|
|
} else {
|
|
// Set the default background color here
|
|
record.clickCount = false;
|
|
rowSelector.style.backgroundColor = "white";
|
|
}
|
|
|
|
const currencySymbol = await this.orm.call('res.currency', 'read',[record.data.currency_id[0]])
|
|
const mainKanbanDiv = this.__owl__.bdom.parentEl.ownerDocument.querySelector('#base_accounting_reconcile')
|
|
const existingRow = this.__owl__.bdom.parentEl.ownerDocument.querySelector(`tr[data-resId="${record.resId}"]`)
|
|
const stateLineRow = this.__owl__.bdom.parentEl.ownerDocument.querySelector('.statement_row')
|
|
if (stateLineRow){
|
|
const dataIdValue = stateLineRow.getAttribute('data-id');
|
|
if(dataIdValue == record.resId){
|
|
mainKanbanDiv.removeChild(stateLineRow);
|
|
}
|
|
}
|
|
if (existingRow) {
|
|
mainKanbanDiv.removeChild(existingRow);
|
|
} else {
|
|
// If the row doesn't exist, create and add it
|
|
const dateObject = new Date(record.data.date);
|
|
const year = dateObject.getFullYear();
|
|
const month = String(dateObject.getMonth() + 1).padStart(2, '0'); // Months are 0-indexed
|
|
const day = String(dateObject.getDate()).padStart(2, '0');
|
|
const formattedDate = `${year}-${month}-${day}`;
|
|
let amount = parseFloat(record.data.amount_residual);
|
|
let debitColumn = '';
|
|
let creditColumn = '';
|
|
let partnerName = '';
|
|
let moveId = '';
|
|
|
|
// Check if partner_id exists and is not empty
|
|
if (record.data.partner_id && record.data.partner_id[1]) {
|
|
partnerName = record.data.partner_id[1];
|
|
}
|
|
if (record.data.move_id && record.data.move_id[1]) {
|
|
moveId = `<br/><span id="moveLine" style="font-size: 12px; font-style: italic;font-weight: normal;color: #01666b;cursor: pointer;" data-moveId="${record.data.move_id[0]}">${record.data.move_id[1]}</span>`;
|
|
}
|
|
|
|
|
|
if (amount < 0) {
|
|
debitColumn = `<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;">${currencySymbol[0].symbol} ${-amount}</td>`;
|
|
} else {
|
|
creditColumn = `<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;">${currencySymbol[0].symbol} ${amount}</td>`;
|
|
}
|
|
|
|
const newRow = document.createElement('tr');
|
|
newRow.setAttribute('data-resId', record.resId); // Set a unique identifier for the row
|
|
if (debitColumn !== '') {
|
|
newRow.innerHTML = `<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;">${record.data.account_id[1]}
|
|
${moveId}<span style="font-size: 12px;font-style: italic;font-weight: normal;"> : ${record.data.name}</span></td>
|
|
<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;">${partnerName}</td>
|
|
<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;">${formattedDate}</td>
|
|
${debitColumn}
|
|
<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;"> </td>
|
|
<td class="o_list_remove_record">
|
|
<button class="btn fa fa-trash-o" data-resId="${record.resId}"/>
|
|
</td>`;
|
|
|
|
} else if (creditColumn !== '') {
|
|
newRow.innerHTML = `<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;">${record.data.account_id[1]}
|
|
${moveId}<span style="font-size: 12px;font-style: italic;font-weight: normal;"> : ${record.data.name}</span></td>
|
|
<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;">${partnerName}</td>
|
|
<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;">${formattedDate}</td>
|
|
<td style="font-weight: bold; display: table-cell; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: top;"> </td>
|
|
${creditColumn}
|
|
<td class="o_list_remove_record">
|
|
<button class="btn fa fa-trash-o" data-resId="${record.resId}"/>
|
|
</td>`;
|
|
}
|
|
newRow.addEventListener('click', async () => {
|
|
const allRows = this.__owl__.bdom.parentEl.ownerDocument.querySelectorAll('tr[data-resId]');
|
|
allRows.forEach(row => {
|
|
row.classList.remove('selected-row');
|
|
});
|
|
newRow.classList.add('selected-row');
|
|
if (record.resId){
|
|
const manualOpsTab = this.__owl__.bdom.parentEl.ownerDocument.querySelector('[name="manual_operations_tab"]');
|
|
if (manualOpsTab) {
|
|
manualOpsTab.click();
|
|
const accountField = this.__owl__.bdom.parentEl.ownerDocument.querySelector('[name="account_id"]');
|
|
accountField.value = record.data.account_id[1];
|
|
}
|
|
}
|
|
});
|
|
// Append the new row to the mainKanbanDiv
|
|
mainKanbanDiv.appendChild(newRow);
|
|
const deleteButtons = this.__owl__.bdom.parentEl.ownerDocument.querySelectorAll('.fa-trash-o');
|
|
deleteButtons.forEach(button => {
|
|
button.addEventListener('click', async (event) => {
|
|
const resId = event.target.getAttribute('data-resId');
|
|
await this.removeRecord(resId);
|
|
});
|
|
});
|
|
const moveLine = this.__owl__.bdom.parentEl.ownerDocument.querySelectorAll('#moveLine');
|
|
moveLine.forEach(line => {
|
|
line.addEventListener('click',async (event) => {
|
|
const moveId = event.target.getAttribute('data-moveId');
|
|
await this.ShowMoveForm(moveId);
|
|
});
|
|
});
|
|
}
|
|
this.updateResIdList();
|
|
}
|
|
async removeRecord(resId){
|
|
const mainKanbanDiv = this.__owl__.bdom.parentEl.ownerDocument.querySelector('#base_accounting_reconcile');
|
|
const rowToRemove = this.__owl__.bdom.parentEl.ownerDocument.querySelector(`tr[data-resId="${resId}"]`);
|
|
if (rowToRemove) {
|
|
mainKanbanDiv.removeChild(rowToRemove);
|
|
this.updateResIdList();
|
|
}
|
|
}
|
|
async ShowMoveForm(moveId) {
|
|
// Convert moveId from string to integer
|
|
const moveIdInt = parseInt(moveId, 10);
|
|
// Check if the conversion is successful
|
|
if (!isNaN(moveIdInt)) {
|
|
this.action.doAction({
|
|
type: 'ir.actions.act_window',
|
|
res_model: 'account.move',
|
|
res_id: moveIdInt,
|
|
views: [[false, "form"]],
|
|
target: 'current',
|
|
});
|
|
}
|
|
}
|
|
updateResIdList() {
|
|
// Get all resId values from the current rows and update the resIdList array
|
|
const rows = this.__owl__.bdom.parentEl.ownerDocument.querySelectorAll('tr[data-resId]');
|
|
this.resIdList = Array.from(rows).map(row => parseInt(row.getAttribute('data-resId'), 10));
|
|
}
|
|
|
|
}
|
|
AccountMoveLineListController.template = 'base_accounting_kit.AccountMoveLineListController';
|
|
export const AccountMoveListView = {
|
|
...listView,
|
|
Controller: AccountMoveLineListController,
|
|
};
|
|
registry.category('views').add('account_move_line_list_controller', AccountMoveListView);
|