Автоматическое заполнение состояния счета в зависимости от суммы оплаты

Коллеги, добрый день!

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

Вот код из академии:

define("OrderPageV2", [], function() {
return {
// Название схемы объекта страницы редактирования.
entitySchemaName: "Order",
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
// Свойство attributes модели представления.
attributes: {
// Название атрибута модели представления.
"UsrBalance": {
// Тип данных колонки модели представления.
dataValueType: Terrasoft.DataValueType.FLOAT,
// Массив конфигурационных объектов, определяющих зависимости колонки [UsrBalance].
dependencies: [
{
// Значение колонки [UsrBalance] зависит от значений колонок [Amount]
// и [PaymentAmount].
columns: ["Amount", "PaymentAmount"],
// Метод-обработчик, который вызывается при изменении значения одной из колонок [Amount]
// и [PaymentAmount].
methodName: "calculateBalance"
}
]
}
},
// Коллекция методов модели представления страницы редактирования.
methods: {
// Переопределение базового метода Terrasoft.BasePageV2.onEntityInitialized, который
// срабатывает после окончания инициализации схемы объекта страницы редактирования.
onEntityInitialized: function() {
// Вызывается родительская реализация метода.
this.callParent(arguments);
// Вызов метода-обработчика, который рассчитывает значение колонки [UsrBalance].
this.calculateBalance();
},
// Метод-обработчик, который рассчитывает значение колонки [UsrBalance].
calculateBalance: function() {
// Проверка, проинициализованы ли в момент открытия страницы редактирования
// колонки [Amount] и [PaymentAmount]. Если нет, то для них устанавливаются нулевые значения.
if (!this.get("Amount")) {
this.set("Amount", 0);
}
if (!this.get("PaymentAmount")) {
this.set("PaymentAmount", 0);
}
// Расчет разницы между значениями в колонках [Amount] и [PaymentAmount].
var result = this.get("Amount") - this.get("PaymentAmount");
// Результат расчета присваивается в качестве значения колонке [UsrBalance].
this.set("UsrBalance", result);
}
},
// Визуальное отображение поля [Остаток для оплаты] на странице редактирования.
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"parentName": "Header",
"propertyName": "items",
"name": "UsrBalance",
"values": {
"bindTo": "UsrBalance",
"layout": {"column": 12, "row": 2, "colSpan": 12}
}
}
]/**SCHEMA_DIFF*/
};
});

Нравится

3 комментария

Добрый день.

Для того что бы менять поле Состояние оплаты, Вам необходимо добавить свою логику в метод calculateBalance. На основании добавленной логики необходимо менять значение атрибута PaymentStatus.
Поскольку данный атрибут содержит справочное значение, передавать ему необходимо объект следующего вида: {value: "Id записи", displayValue: "Отображаемое значение"}.

Пример:

this.set("PaymentStatus", {value: "448d1338-d3a5-4fd4-9a6e-769403f89896", displayValue: "Оплачен полностью"});
this.set("PaymentStatus", {value: "309e5219-114d-4a6e-b5b0-fe33caeca4dd", displayValue: "Отменен"});

Спасибо, попробую.
П.С. Перед этим ID надо узнать, этот указан как пример, вообще там же будет параметр, который перед этим достану?

id статусов, Вы можете получить из таблицы OrderPaymentStatus или же посмотреть в справочнике.
Получить текущее значение статуса возможно следующим кодом:

var statusId = this.get("PaymentStatus").value

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