text: // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  // License: GNU General Public License v3. See license.txt
  
  frappe.query_reports['Accounts Receivable 2'] = {
    filters: [
      {
        fieldname: 'company',
        label: __('Company'),
        fieldtype: 'Link',
        options: 'Company',
        reqd: 1,
        default: frappe.defaults.get_user_default('Company'),
      },
      {
        fieldname: 'ageing_based_on',
        label: __('Ageing Based On'),
        fieldtype: 'Select',
        options: 'Posting Date\nDue Date',
        default: 'Posting Date',
      },
      {
        fieldname: 'report_date',
        label: __('As on Date'),
        fieldtype: 'Date',
        default: frappe.datetime.get_today(),
      },
      {
        fieldname: 'range1',
        label: __('Ageing Range 1'),
        fieldtype: 'Int',
        default: '30',
        reqd: 1,
      },
      {
        fieldname: 'range2',
        label: __('Ageing Range 2'),
        fieldtype: 'Int',
        default: '60',
        reqd: 1,
      },
      {
        fieldname: 'range3',
        label: __('Ageing Range 3'),
        fieldtype: 'Int',
        default: '90',
        reqd: 1,
      },
      {
        fieldname: 'range4',
        label: __('Ageing Range 4'),
        fieldtype: 'Int',
        default: '120',
        reqd: 1,
      },
      {
        fieldname: 'finance_book',
        label: __('Finance Book'),
        fieldtype: 'Link',
        options: 'Finance Book',
      },
      {
        fieldname: 'cost_center',
        label: __('Cost Center'),
        fieldtype: 'Link',
        options: 'Cost Center',
        get_query: () => {
          var company = frappe.query_report.get_filter_value('company');
          return {
            filters: {
              company: company,
            },
          };
        },
      },
      {
        fieldname: 'customer',
        label: __('Customer'),
        fieldtype: 'Link',
        options: 'Customer',
        on_change: () => {
          var customer = frappe.query_report.get_filter_value('customer');
          var company = frappe.query_report.get_filter_value('company');
          if (customer) {
            frappe.db.get_value(
              'Customer',
              customer,
              ['tax_id', 'customer_name', 'payment_terms'],
              function(value) {
                frappe.query_report.set_filter_value('tax_id', value['tax_id']);
                frappe.query_report.set_filter_value(
                  'customer_name',
                  value['customer_name']
                );
                frappe.query_report.set_filter_value(
                  'payment_terms',
                  value['payment_terms']
                );
              }
            );
  
            frappe.db.get_value(
              'Customer Credit Limit',
              { parent: customer, company: company },
              ['credit_limit'],
              function(value) {
                if (value) {
                  frappe.query_report.set_filter_value(
                    'credit_limit',
                    value['credit_limit']
                  );
                }
              },
              'Customer'
            );
          } else {
            frappe.query_report.set_filter_value('tax_id', '');
            frappe.query_report.set_filter_value('customer_name', '');
            frappe.query_report.set_filter_value('credit_limit', '');
            frappe.query_report.set_filter_value('payment_terms', '');
          }
        },
      },
      {
        fieldname: 'customer_group',
        label: __('Customer Group'),
        fieldtype: 'Link',
        options: 'Customer Group',
      },
      {
        fieldname: 'payment_terms_template',
        label: __('Payment Terms Template'),
        fieldtype: 'Link',
        options: 'Payment Terms Template',
      },
      {
        fieldname: 'territory',
        label: __('Territory'),
        fieldtype: 'Link',
        options: 'Territory',
      },
      {
        fieldname: 'sales_partner',
        label: __('Sales Partner'),
        fieldtype: 'Link',
        options: 'Sales Partner',
      },
      {
        fieldname: 'sales_person',
        label: __('Sales Person'),
        fieldtype: 'Link',
        options: 'Sales Person',
      },
      {
        fieldname: 'based_on_payment_terms',
        label: __('Based On Payment Terms'),
        fieldtype: 'Check',
      },
      {
        fieldname: 'show_future_payments',
        label: __('Show Future Payments'),
        fieldtype: 'Check',
      },
      {
        fieldname: 'show_delivery_notes',
        label: __('Show Delivery Notes'),
        fieldtype: 'Check',
      },
      {
        fieldname: 'show_sales_person',
        label: __('Show Sales Person'),
        fieldtype: 'Check',
      },
      {
        fieldname: 'tax_id',
        label: __('Tax Id'),
        fieldtype: 'Data',
        hidden: 1,
      },
      {
        fieldname: 'customer_name',
        label: __('Customer Name'),
        fieldtype: 'Data',
        hidden: 1,
      },
      {
        fieldname: 'payment_terms',
        label: __('Payment Tems'),
        fieldtype: 'Data',
        hidden: 1,
      },
      {
        fieldname: 'credit_limit',
        label: __('Credit Limit'),
        fieldtype: 'Currency',
        hidden: 1,
      },
    ],
  
    onload: function(report) {
      report.page.add_inner_button(__('Accounts Receivable Summary'), function() {
        var filters = report.get_values();
        frappe.set_route('query-report', 'Accounts Receivable Summary', {
          company: filters.company,
        });
      });
    },
  };
  
  erpnext.dimension_filters.forEach(dimension => {
    frappe.query_reports['Accounts Receivable 2'].filters.splice(9, 0, {
      fieldname: dimension['fieldname'],
      label: __(dimension['label']),
      fieldtype: 'Link',
      options: dimension['document_type'],
    });
  });
  