diff --git a/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js b/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js index 5d59497487b..31c70b53861 100644 --- a/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js +++ b/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js @@ -11,7 +11,6 @@ erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager { this.from_reference_date = from_reference_date; this.to_reference_date = to_reference_date; } - show_dialog(bank_transaction_name, update_dt_cards) { this.bank_transaction_name = bank_transaction_name; this.update_dt_cards = update_dt_cards; @@ -47,588 +46,6 @@ erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager { }, }); } - frappe.provide("erpnext.accounts.bank_reconciliation"); - - erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager { - constructor(company, bank_account) { - this.bank_account = bank_account; - this.company = company; - this.make_dialog(); - } - - show_dialog(bank_transaction_name, update_dt_cards) { - this.bank_transaction_name = bank_transaction_name; - this.update_dt_cards = update_dt_cards; - frappe.call({ - method: "frappe.client.get_value", - args: { - doctype: "Bank Transaction", - filters: { name: this.bank_transaction_name }, - fieldname: [ - "date as reference_date", - "deposit", - "withdrawal", - "currency", - "description", - "name", - "bank_account", - "company", - "reference_number", - "party_type", - "party", - "unallocated_amount", - "allocated_amount", - ], - }, - callback: (r) => { - if (r.message) { - this.bank_transaction = r.message; - r.message.payment_entry = 1; - r.message.journal_entry = 1; - this.dialog.set_values(r.message); - this.dialog.show(); - } - }, - }); - } - - get_linked_vouchers(document_types) { - frappe.call({ - method: - "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_linked_payments", - args: { - bank_transaction_name: this.bank_transaction_name, - document_types: document_types, - from_date: this.bank_statement_from_date, - to_date: this.bank_statement_to_date, - filtered_by_reference_date: this.filtered_by_reference_date, - from_reference_date:this.from_reference_date, - to_reference_date:this.to_reference_date - }, - - callback: (result) => { - const data = result.message; - - - if (data && data.length > 0) { - const proposals_wrapper = this.dialog.fields_dict.payment_proposals.$wrapper; - proposals_wrapper.show(); - this.dialog.fields_dict.no_matching_vouchers.$wrapper.hide(); - this.data = []; - data.forEach((row) => { - const reference_date = row[5] ? row[5] : row[8]; - this.data.push([ - row[1], - row[2], - reference_date, - row[8], - format_currency(row[3], row[9]), - row[6], - row[4], - ]); - }); - this.get_dt_columns(); - this.get_datatable(proposals_wrapper); - } else { - const proposals_wrapper = this.dialog.fields_dict.payment_proposals.$wrapper; - proposals_wrapper.hide(); - this.dialog.fields_dict.no_matching_vouchers.$wrapper.show(); - - } - this.dialog.show(); - }, - }); - } - - get_dt_columns() { - this.columns = [ - { - name: __("Document Type"), - editable: false, - width: 125, - }, - { - name: __("Document Name"), - editable: false, - width: 150, - }, - { - name: __("Reference Date"), - editable: false, - width: 120, - }, - { - name: "Posting Date", - editable: false, - width: 120, - }, - { - name: __("Amount"), - editable: false, - width: 100, - }, - { - name: __("Party"), - editable: false, - width: 120, - }, - - { - name: __("Reference Number"), - editable: false, - width: 140, - }, - ]; - } - - get_datatable(proposals_wrapper) { - if (!this.datatable) { - const datatable_options = { - columns: this.columns, - data: this.data, - dynamicRowHeight: true, - checkboxColumn: true, - inlineFilters: true, - }; - this.datatable = new frappe.DataTable( - proposals_wrapper.get(0), - datatable_options - ); - } else { - this.datatable.refresh(this.data, this.columns); - this.datatable.rowmanager.checkMap = []; - } - } - - make_dialog() { - const me = this; - me.selected_payment = null; - - const fields = [ - { - label: __("Action"), - fieldname: "action", - fieldtype: "Select", - options: `Match Against Voucher\nCreate Voucher\nUpdate Bank Transaction`, - default: "Match Against Voucher", - }, - { - fieldname: "column_break_4", - fieldtype: "Column Break", - }, - { - label: __("Document Type"), - fieldname: "document_type", - fieldtype: "Select", - options: `Payment Entry\nJournal Entry`, - default: "Payment Entry", - depends_on: "eval:doc.action=='Create Voucher'", - }, - { - fieldtype: "Section Break", - fieldname: "section_break_1", - label: __("Filters"), - depends_on: "eval:doc.action=='Match Against Voucher'", - }, - ]; - - frappe.call({ - method: "erpnext.accounts.doctype.bank_transaction.bank_transaction.get_doctypes_for_bank_reconciliation", - callback: (r) => { - $.each(r.message, (_i, entry) => { - if (_i % 3 == 0) { - fields.push({ - fieldtype: "Column Break", - }); - } - fields.push({ - fieldtype: "Check", - label: entry, - fieldname: frappe.scrub(entry), - onchange: () => this.update_options(), - }); - }); - - fields.push(...this.get_voucher_fields()); - - me.dialog = new frappe.ui.Dialog({ - title: __("Reconcile the Bank Transaction"), - fields: fields, - size: "large", - primary_action: (values) => - this.reconciliation_dialog_primary_action(values), - }); - } - }); - } - - get_voucher_fields() { - return [ - { - fieldtype: "Check", - label: "Show Only Exact Amount", - fieldname: "exact_match", - onchange: () => this.update_options(), - }, - { - fieldtype: "Section Break", - fieldname: "section_break_1", - label: __("Select Vouchers to Match"), - depends_on: "eval:doc.action=='Match Against Voucher'", - }, - { - fieldtype: "HTML", - fieldname: "payment_proposals", - }, - { - fieldtype: "HTML", - fieldname: "no_matching_vouchers", - options: __("
{0}
", [__("No Matching Vouchers Found")]) - }, - { - fieldtype: "Section Break", - fieldname: "details", - label: "Details", - depends_on: "eval:doc.action!='Match Against Voucher'", - }, - { - fieldname: "reference_number", - fieldtype: "Data", - label: "Reference Number", - mandatory_depends_on: "eval:doc.action=='Create Voucher'", - }, - { - default: "Today", - fieldname: "posting_date", - fieldtype: "Date", - label: "Posting Date", - reqd: 1, - depends_on: "eval:doc.action=='Create Voucher'", - }, - { - fieldname: "reference_date", - fieldtype: "Date", - label: "Cheque/Reference Date", - mandatory_depends_on: "eval:doc.action=='Create Voucher'", - depends_on: "eval:doc.action=='Create Voucher'", - reqd: 1, - }, - { - fieldname: "mode_of_payment", - fieldtype: "Link", - label: "Mode of Payment", - options: "Mode of Payment", - depends_on: "eval:doc.action=='Create Voucher'", - }, - { - fieldname: "edit_in_full_page", - fieldtype: "Button", - label: "Edit in Full Page", - click: () => { - this.edit_in_full_page(); - }, - depends_on: - "eval:doc.action=='Create Voucher'", - }, - { - fieldname: "column_break_7", - fieldtype: "Column Break", - }, - { - default: "Journal Entry Type", - fieldname: "journal_entry_type", - fieldtype: "Select", - label: "Journal Entry Type", - options: - "Journal Entry\nInter Company Journal Entry\nBank Entry\nCash Entry\nCredit Card Entry\nDebit Note\nCredit Note\nContra Entry\nExcise Entry\nWrite Off Entry\nOpening Entry\nDepreciation Entry\nExchange Rate Revaluation\nDeferred Revenue\nDeferred Expense", - depends_on: - "eval:doc.action=='Create Voucher' && doc.document_type=='Journal Entry'", - mandatory_depends_on: - "eval:doc.action=='Create Voucher' && doc.document_type=='Journal Entry'", - }, - { - fieldname: "second_account", - fieldtype: "Link", - label: "Account", - options: "Account", - depends_on: - "eval:doc.action=='Create Voucher' && doc.document_type=='Journal Entry'", - mandatory_depends_on: - "eval:doc.action=='Create Voucher' && doc.document_type=='Journal Entry'", - get_query: () => { - return { - filters: { - is_group: 0, - company: this.company, - }, - }; - }, - }, - { - fieldname: "party_type", - fieldtype: "Link", - label: "Party Type", - options: "DocType", - mandatory_depends_on: - "eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'", - get_query: function () { - return { - filters: { - name: [ - "in", - Object.keys(frappe.boot.party_account_types), - ], - }, - }; - }, - }, - { - fieldname: "party", - fieldtype: "Dynamic Link", - label: "Party", - options: "party_type", - mandatory_depends_on: - "eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'", - }, - { - fieldname: "project", - fieldtype: "Link", - label: "Project", - options: "Project", - depends_on: - "eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'", - }, - { - fieldname: "cost_center", - fieldtype: "Link", - label: "Cost Center", - options: "Cost Center", - depends_on: - "eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'", - }, - { - fieldtype: "Section Break", - fieldname: "details_section", - label: "Transaction Details", - collapsible: 1, - }, - { - fieldname: "deposit", - fieldtype: "Currency", - label: "Deposit", - read_only: 1, - }, - { - fieldname: "withdrawal", - fieldtype: "Currency", - label: "Withdrawal", - read_only: 1, - }, - { - fieldname: "description", - fieldtype: "Small Text", - label: "Description", - read_only: 1, - }, - { - fieldname: "column_break_17", - fieldtype: "Column Break", - read_only: 1, - }, - { - fieldname: "allocated_amount", - fieldtype: "Currency", - label: "Allocated Amount", - read_only: 1, - }, - - { - fieldname: "unallocated_amount", - fieldtype: "Currency", - label: "Unallocated Amount", - read_only: 1, - }, - ]; - } - - get_selected_attributes() { - let selected_attributes = []; - this.dialog.$wrapper.find(".checkbox input").each((i, col) => { - if ($(col).is(":checked")) { - selected_attributes.push($(col).attr("data-fieldname")); - } - }); - - return selected_attributes; - } - - update_options() { - let selected_attributes = this.get_selected_attributes(); - this.get_linked_vouchers(selected_attributes); - } - - reconciliation_dialog_primary_action(values) { - if (values.action == "Match Against Voucher") this.match(values); - if ( - values.action == "Create Voucher" && - values.document_type == "Payment Entry" - ) - this.add_payment_entry(values); - if ( - values.action == "Create Voucher" && - values.document_type == "Journal Entry" - ) - this.add_journal_entry(values); - else if (values.action == "Update Bank Transaction") - this.update_transaction(values); - } - - match() { - var selected_map = this.datatable.rowmanager.checkMap; - let rows = []; - selected_map.forEach((val, index) => { - if (val == 1) rows.push(this.datatable.datamanager.rows[index]); - }); - let vouchers = []; - rows.forEach((x) => { - vouchers.push({ - payment_doctype: x[2].content, - payment_name: x[3].content, - amount: x[5].content, - }); - }); - frappe.call({ - method: - "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.reconcile_vouchers", - args: { - bank_transaction_name: this.bank_transaction.name, - vouchers: vouchers, - }, - callback: (response) => { - const alert_string = __("Bank Transaction {0} Matched", [this.bank_transaction.name]); - frappe.show_alert(alert_string); - this.update_dt_cards(response.message); - this.dialog.hide(); - }, - }); - } - - add_payment_entry(values) { - frappe.call({ - method: - "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_payment_entry_bts", - args: { - bank_transaction_name: this.bank_transaction.name, - reference_number: values.reference_number, - reference_date: values.reference_date, - party_type: values.party_type, - party: values.party, - posting_date: values.posting_date, - mode_of_payment: values.mode_of_payment, - project: values.project, - cost_center: values.cost_center, - }, - callback: (response) => { - const alert_string = __("Bank Transaction {0} added as Payment Entry", [this.bank_transaction.name]); - frappe.show_alert(alert_string); - this.update_dt_cards(response.message); - this.dialog.hide(); - }, - }); - } - - add_journal_entry(values) { - frappe.call({ - method: - "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_journal_entry_bts", - args: { - bank_transaction_name: this.bank_transaction.name, - reference_number: values.reference_number, - reference_date: values.reference_date, - party_type: values.party_type, - party: values.party, - posting_date: values.posting_date, - mode_of_payment: values.mode_of_payment, - entry_type: values.journal_entry_type, - second_account: values.second_account, - }, - callback: (response) => { - const alert_string = __("Bank Transaction {0} added as Journal Entry", [this.bank_transaction.name]); - frappe.show_alert(alert_string); - this.update_dt_cards(response.message); - this.dialog.hide(); - }, - }); - } - - update_transaction(values) { - frappe.call({ - method: - "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.update_bank_transaction", - args: { - bank_transaction_name: this.bank_transaction.name, - reference_number: values.reference_number, - party_type: values.party_type, - party: values.party, - }, - callback: (response) => { - const alert_string = __("Bank Transaction {0} updated", [this.bank_transaction.name]); - frappe.show_alert(alert_string); - this.update_dt_cards(response.message); - this.dialog.hide(); - }, - }); - } - - edit_in_full_page() { - const values = this.dialog.get_values(true); - if (values.document_type == "Payment Entry") { - frappe.call({ - method: - "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_payment_entry_bts", - args: { - bank_transaction_name: this.bank_transaction.name, - reference_number: values.reference_number, - reference_date: values.reference_date, - party_type: values.party_type, - party: values.party, - posting_date: values.posting_date, - mode_of_payment: values.mode_of_payment, - project: values.project, - cost_center: values.cost_center, - allow_edit: true - }, - callback: (r) => { - const doc = frappe.model.sync(r.message); - frappe.set_route("Form", doc[0].doctype, doc[0].name); - }, - }); - } else { - frappe.call({ - method: - "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_journal_entry_bts", - args: { - bank_transaction_name: this.bank_transaction.name, - reference_number: values.reference_number, - reference_date: values.reference_date, - party_type: values.party_type, - party: values.party, - posting_date: values.posting_date, - mode_of_payment: values.mode_of_payment, - entry_type: values.journal_entry_type, - second_account: values.second_account, - allow_edit: true - }, - callback: (r) => { - var doc = frappe.model.sync(r.message); - frappe.set_route("Form", doc[0].doctype, doc[0].name); - }, - }); - } - } - - }; - get_linked_vouchers(document_types) { frappe.call({ method: @@ -636,6 +53,11 @@ erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager { args: { bank_transaction_name: this.bank_transaction_name, document_types: document_types, + from_date: this.bank_statement_from_date, + to_date: this.bank_statement_to_date, + filtered_by_reference_date: this.filtered_by_reference_date, + from_reference_date:this.from_reference_date, + to_reference_date:this.to_reference_date }, callback: (result) => { @@ -1160,3 +582,5 @@ erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager { } }; + + \ No newline at end of file