Здравствуйте!
Подскажите, пожалуйста, есть базовый функционал, в котором можно зафиксировать стоимость доставки?
Как правильно организовать решение такого кейса?
Нравится
Дарья, насколько понимаю, стандартно такого не ведётся, добавлялось в ходе различных проектов.
Можно в мастере раздела открыть раздел «Заказ» и добавить требуемое дробное поле в основную часть карточки или на вкладку «Доставка». Но нужно учесть, что в объекте этого раздела много логики на встроенных БП разных пакетов и в отдельных схемах (вроде ProductEntryUtils, OrderCalculator, OrderAmountHelper и др.), нужно будет всё это проанализировать и при необходимости доработать с учётом нового поля. Например, сейчас состояние заказа меняется в зависимости от ненулевого значения «Сумма оплаты» или совпадения его с «Итого».
public virtual bool ChangeStatus() {
if (Entity.StoringState == StoringObjectState.New) {
return true;
}
List<string> changedColumnNames = Entity.GetChangedColumnValues()
.Where(cv=>cv.Value != cv.OldValue)
.ToList().ConvertAll(cv => cv.Column.Name);
NeedFinRecalc = changedColumnNames.Intersect(new[] {"CurrencyRate", "Currency"}).Any();
var securityEngine = UserConnection.DBSecurityEngine;
bool hasRight = securityEngine.GetIsEntitySchemaColumnEditingAllowed("Order", "PaymentStatus");
if (changedColumnNames.Intersect(new[] {"Amount", "PaymentAmount"}).Any() && hasRight) {
var amount = Entity.GetTypedColumnValue<decimal>("Amount");
var paymentAmount = Entity.GetTypedColumnValue<decimal>("PaymentAmount");
if (amount > 0 && amount == paymentAmount) {
Entity.SetColumnValue("PaymentStatusId", OrderPackage.Constants.Order.OrderPaymentStatus.Paid);
} else if (paymentAmount > 0) {
Entity.SetColumnValue("PaymentStatusId", OrderPackage.Constants.Order.OrderPaymentStatus.PartiallyPaid);
}
}
return true;
}Если появится новое поле, стоит либо в «Итого» и подобных полях считать сумму по продуктам уже вместе с добавленной доставкой, или сравнивать с суммой двух полей.