商品登録(商品情報)で販売種別を選択。
商品規格情報(色,サイズ等)が設定されている商品は、その商品の商品規格情報で販売種別を選択。
販売種別 設定 → システム設定 → マスタデータ管理 → mbt_sale_type にID,Nameを設定。
ここでのIDは、dtb_delivery の sale_type_id に設定される。
配送方法設定 設定 → 店舗設定 → 配送方法設定 →
ID毎に、必須として、
配送業者名,配送方法名称,販売種別 (以上、dtb_delivery)
,取り扱う支払方法 (dtb_payment_option に delivery_id – payment_id の複合主キーで)
標準の受注受付メールのテンプレートでは、
ここの配送業者名(dtb_delivery の name , Shipping.shipping_delivery_name) が、
「配送方法」として送信される。
商品登録(商品情報)で販売種別を選択。
商品規格情報(色,サイズ等)が設定されている商品は、その商品の商品規格情報で販売種別を選択。
販売種別 設定 → システム設定 → マスタデータ管理 → mbt_sale_type にID,Nameを設定。
ここでのIDは、dtb_delivery に、sale_type_id
配送方法設定
ID毎に、必須として、
配送業者名,配送方法名称,販売種別 (以上、dtb_delivery
)
,取り扱う支払方法 (dtb_payment_option に delivery_id – payment_id の複合主キーで)
(payment-id は、dtb_payment の id)
,都道府県別送料設定 (dtb_delivery_fee
AUTO_INCREMENT の id に、delivery_id,pref_id,fee)
商品により送料の設定を変える場合(サイズ,重量等の違いが大きく商品毎に送料が変わる場合)
送料の区分を販売種別で設定し、
配送方法設定で販売種別を紐付けし都道府県別の送料を設定、
販売種別を商品に紐付け、商品毎の送料が決められる。
(payment-id は、dtb_payment の id)
,都道府県別送料設定 (dtb_delivery_fee
AUTO_INCREMENT の id に、delivery_id,pref_id,fee)
ただし、標準では送料は販売数に関わらず、一律で計算される。
送料を商品毎に販売数分加算するために、カスタマイズ。
\src\Eccube\Service\PurchaseFlow\Processor\DeliveryFeePreprocessor.php
最後の private function
/*##0001 送料 複数個でも一律送料 delivery_id=1 以外は、都道府県別送料×販売数を送料として計算
(手を抜いてハードコーディング)*/
private function saveDeliveryFeeItem(ItemHolderInterface $itemHolder)
{
$DeliveryFeeType = $this->entityManager
->find(OrderItemType::class, OrderItemType::DELIVERY_FEE);
$TaxInclude = $this->entityManager
->find(TaxDisplayType::class, TaxDisplayType::INCLUDED);
$Taxation = $this->entityManager
->find(TaxType::class, TaxType::TAXATION);
/** @var Order $Order */
$Order = $itemHolder;
/* @var Shipping $Shipping */
foreach ($Order->getShippings() as $Shipping) {
// 送料の計算
$deliveryFeeProduct = 0;
if ($this->BaseInfo->isOptionProductDeliveryFee()) {
/** @var OrderItem $item */
foreach ($Shipping->getOrderItems() as $item) {
if (!$item->isProduct()) {
continue;
}
$deliveryFeeProduct += $item->getProductClass()->getDeliveryFee() * $item->getQuantity();
}
}
/** @var DeliveryFee|null $DeliveryFee */
$DeliveryFee = $this->deliveryFeeRepository->findOneBy([
'Delivery' => $Shipping->getDelivery(),
'Pref' => $Shipping->getPref(),
]);
/* ##0001-01 006 Add Start */
// 都道府県送料 * 数
foreach ($Shipping->getOrderItems() as $item) {
$DeliveryFeeTotal = $DeliveryFee->getFee() * $item->getQuantity();
}
/* ##0001-01 006 Add End */
$fee = is_object($DeliveryFee) ? $DeliveryFee->getFee() : 0;
/* ##0001-02 006 Add Start */
$DeliveryId = $Shipping->getDelivery()->getId();
if ($DeliveryId != 1){
$fee = $DeliveryFeeTotal;
}
/* ##0001-02 006 Add End */
$OrderItem = new OrderItem();
$OrderItem->setProductName($DeliveryFeeType->getName())
->setPrice($fee + $deliveryFeeProduct)
->setQuantity(1)
->setOrderItemType($DeliveryFeeType)
->setShipping($Shipping)
->setOrder($itemHolder)
->setTaxDisplayType($TaxInclude)
->setTaxType($Taxation)
->setProcessorName(DeliveryFeePreprocessor::class);
$itemHolder->addItem($OrderItem);
$Shipping->addOrderItem($OrderItem);
}
}
コメント