Здравствуйте!
Подскажите, пожалуйста, есть базовый функционал, в котором можно зафиксировать стоимость доставки?
Как правильно организовать решение такого кейса?
Нравится
Дарья, насколько понимаю, стандартно такого не ведётся, добавлялось в ходе различных проектов.
Можно в мастере раздела открыть раздел «Заказ» и добавить требуемое дробное поле в основную часть карточки или на вкладку «Доставка». Но нужно учесть, что в объекте этого раздела много логики на встроенных БП разных пакетов и в отдельных схемах (вроде 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; }
Если появится новое поле, стоит либо в «Итого» и подобных полях считать сумму по продуктам уже вместе с добавленной доставкой, или сравнивать с суммой двух полей.