frappe.ui.form.on('Payment Entry', {
    onload: function(frm) {
        // Изменяем фильтр для поля Party Type, добавляя "Company"
        frm.set_query("party_type", function () {
            return {
                filters: {
                    name: ["in", Object.keys(frappe.boot.party_account_types).concat("Company")]
                }
            };
        });

        // Фильтр для поля "Party Bank Account" в зависимости от типа Party Type
        frm.set_query("party_bank_account", function() {
            if (frm.doc.party_type === "Company") {
                // Если Party Type = Company, применяем фильтр Is Company Account = Yes
                return {
                    filters: {
                        is_company_account: 1,  // 1 означает "Yes"
                        company: frm.doc.company
                    }
                };
            } else {
                // Оригинальный фильтр для других типов Party Type
                return {
                    filters: {
                        is_company_account: 0,  // 0 означает "No"
                        party_type: frm.doc.party_type,
                        party: frm.doc.party
                    }
                };
            }
        });

        // Фильтр для поля "Account Paid To" только если Party Type = Company
        frm.set_query("paid_to", function() {
            if (frm.doc.party_type === "Company") {
                // Устанавливаем фильтр для "Account Type in Cash, Bank" только если Party Type = Company
                return {
                    filters: {
                        account_type: ["in", ["Bank", "Cash"]],
                        is_group: 0,  // 0 означает "No"
                        company: frm.doc.company  // Фильтрация по компании
                    }
                };
            } else {
                // В других случаях оставляем стандартный фильтр или пустой фильтр
                return {};
            }
        });
    },

//     // Переопределение received_amount
//     received_amount: function (frm) {
//         if (frm.set_paid_amount_based_on_received_amount) return;

//         const company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
//         const from_currency = frm.doc.paid_from_account_currency;
//         const to_currency = frm.doc.paid_to_account_currency;
    
//         const from_rate = frm.doc.source_exchange_rate || 1;
//         const to_rate = frm.doc.target_exchange_rate || 1;
    
//         const cross_rate = from_currency === to_currency ? 1 : from_rate / to_rate;
    
//         frm.set_paid_amount_based_on_received_amount = true;
//         frm.set_value(
//             "paid_amount",
//             flt(frm.doc.received_amount / cross_rate, precision("paid_amount"))
//         );
//         frm.set_paid_amount_based_on_received_amount = false;
    
//         frm.set_value("base_received_amount", flt(frm.doc.received_amount * to_rate));
//         frm.events.hide_unhide_fields(frm);
//         frm.trigger("set_difference_amount");
//     },
    
//     // Переопределение paid_amount
//     paid_amount: function (frm) {
//         if (frm.set_paid_amount_based_on_received_amount) return;

//         const company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
//         const from_currency = frm.doc.paid_from_account_currency;
//         const to_currency = frm.doc.paid_to_account_currency;
    
//         // Получаем курсы валют относительно базовой валюты компании
//         const from_rate = frm.doc.source_exchange_rate || 1;
//         const to_rate = frm.doc.target_exchange_rate || 1;
    
//         // Рассчитываем кросс-курс между валютами списания и зачисления
//         const cross_rate = from_currency === to_currency ? 1 : from_rate / to_rate;
    
//         // Обновляем Received Amount
//         frm.set_paid_amount_based_on_received_amount = true;
//         frm.set_value(
//             "received_amount",
//             flt(frm.doc.paid_amount * cross_rate, precision("received_amount"))
//         );
//         frm.set_paid_amount_based_on_received_amount = false;
    
//         // Обновляем base_paid_amount (в базовой валюте компании)
//         frm.set_value("base_paid_amount", flt(frm.doc.paid_amount * from_rate));
//         frm.events.hide_unhide_fields(frm);
//         frm.trigger("set_difference_amount");
//     }
});
