Добрый день!

В работе столкнулись с такой проблемой, как некорректная конвертация валютных платежей. В справочники курс валют были загружены курсы валют помесячно за период с 2009 по 2020 год. Далее мы произвели импорт платежей с помощью Excel за период с 2009 по январь 2020 г.

Обратили внимание что платеж, в карточке Платежа отражается по курсу, который соответствует Дате создания записи в системе. Т.е. в том случае когда загружаются платежи за ранние периоды, конвертация курса валют не учитывает дату платежа (хотя правильная логика - это конвертировать валютный платеж по курсу, соответствующему дате платежа). 

Выяснили что, в методе setCurrencyRate используется коробочный метод LoadCurrencyRate модуля MoneyModule, в который передается текущая дата платежа (т.е. дата создания записи в системе) Т.о. если импорт платежей был создан в системе в январе 2020 года, но, например - дата импортируемого платежа за ноябрь 2009 года, то платеж будет конвертироваться по курсу января 2020 года.

Возникает вопрос: почему логика опирается на дату создания записи, а не на дату фактического платежа?

Можно ли изменить логику в методе LoadCurrencyRate модуля MoneyModule?

 

Нравится

1 комментарий

Судя по коду, LoadCurrencyRate  получает дату извне в параметре, а заполняет её функция setCurrencyRate на конкретной карточке. Видимо, у Вас в ней берётся дата не из того поля. Нужно менять там, а не в MoneyModule.

/**
 * Calls onLoadCurrencyRate and sets specified currencyRateAttribute if currencyAttribute isn't empty.
 * @param currencyAttribute - Currency attribute.
 * @param currencyRateAttribute - Currency rate attribute.
 * @param startDate - Currency start date.
 * @param {function} callback
 */
moneyModule.LoadCurrencyRate = function(currencyAttribute, currencyRateAttribute, startDate, callback) {
	var currency = this.get(currencyAttribute);
	if (Ext.isEmpty(currency)) {
		return;
	}
	moneyModule.self.onLoadCurrencyRate.call(this, currency.value, startDate,
		function(item) {
			this.set(currencyRateAttribute, item.Rate);
			if (callback) {
				callback.call(this);
			}
		}, function() {
			this.set(currencyRateAttribute, null);
		});
};

Не вижу раздела «Платежи», видимо, он разработан в ходе проекта или переименован. Как называется схема карточки?

Мультивалютное поле работает с теми данными, которые есть в связанных с ним полях объекта: сумма, сумма в базовой валюте, выбранная валюта и курс. Вам нужно, чтобы уже при заливке были корректные данные во всех этих полях.

Показать все комментарии