Стоимость доставки в заказе

Здравствуйте!

Подскажите, пожалуйста, есть базовый функционал, в котором можно зафиксировать стоимость доставки?

Как правильно организовать решение такого кейса?

Нравится

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

Дарья, насколько понимаю, стандартно такого не ведётся, добавлялось в ходе различных проектов.

 

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

Если появится новое поле, стоит либо в «Итого» и подобных полях считать сумму по продуктам уже вместе с добавленной доставкой, или сравнивать с суммой двух полей.

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