Skip to content

Commit

Permalink
Customer の Serializable 実装に伴う修正
Browse files Browse the repository at this point in the history
- 配列でセッションに保存し, オブジェクトに復元するよう修正
- OrderHelper::getNonMember() でセッションキーを指定できるよう修正
  • Loading branch information
nanasess authored and chihiro-adachi committed Jun 26, 2020
1 parent e9f0ab6 commit 9a84daf
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 26 deletions.
15 changes: 1 addition & 14 deletions src/Eccube/Controller/NonMemberShoppingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,22 +106,9 @@ public function index(Request $request)
log_info('非会員お客様情報登録開始');

$data = $form->getData();
$Customer = new Customer();
$Customer
->setName01($data['name01'])
->setName02($data['name02'])
->setKana01($data['kana01'])
->setKana02($data['kana02'])
->setCompanyName($data['company_name'])
->setEmail($data['email'])
->setPhonenumber($data['phone_number'])
->setPostalcode($data['postal_code'])
->setPref($data['pref'])
->setAddr01($data['addr01'])
->setAddr02($data['addr02']);

// 非会員用セッションを作成
$this->session->set(OrderHelper::SESSION_NON_MEMBER, $Customer);
$this->session->set(OrderHelper::SESSION_NON_MEMBER, $data);
$this->session->set(OrderHelper::SESSION_NON_MEMBER_ADDRESSES, serialize([]));

$event = new EventArgs(
Expand Down
12 changes: 10 additions & 2 deletions src/Eccube/Form/Type/ShippingMultipleItemType.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
use Eccube\Entity\Customer;
use Eccube\Entity\CustomerAddress;
use Eccube\Repository\Master\PrefRepository;
use Eccube\Service\OrderHelper;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
Expand Down Expand Up @@ -61,6 +62,11 @@ class ShippingMultipleItemType extends AbstractType
*/
protected $entityManager;

/**
* @var OrderHelper
*/
protected $orderHelper;

/**
* ShippingMultipleItemType constructor.
*
Expand All @@ -75,14 +81,16 @@ public function __construct(
AuthorizationCheckerInterface $authorizationChecker,
TokenStorageInterface $tokenStorage,
PrefRepository $prefRepository,
EntityManagerInterface $entityManager
EntityManagerInterface $entityManager,
OrderHelper $orderHelper
) {
$this->eccubeConfig = $eccubeConfig;
$this->session = $session;
$this->authorizationChecker = $authorizationChecker;
$this->tokenStorage = $tokenStorage;
$this->prefRepository = $prefRepository;
$this->entityManager = $entityManager;
$this->orderHelper = $orderHelper;
}

/**
Expand Down Expand Up @@ -117,7 +125,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
} else {
$CustomerAddresses = [];
// 非会員の場合は、セッションに保持されている注文者住所とお届け先住所をマージしてリストを作成
if ($NonMember = $this->session->get('eccube.front.shopping.nonmember')) {
if ($NonMember = $this->orderHelper->getNonMember('eccube.front.shopping.nonmember')) {
$CustomerAddress = new CustomerAddress();
$CustomerAddress->setFromCustomer($NonMember);

Expand Down
31 changes: 24 additions & 7 deletions src/Eccube/Service/OrderHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -236,17 +236,34 @@ public function getPurchaseProcessingOrder($preOrderId = null)
* セッションに保持されている非会員情報を取得する.
* 非会員購入時に入力されたお客様情報を返す.
*
* @return Customer
* @param string $session_key
* @return Customer|null
*/
public function getNonMember()
public function getNonMember($session_key = self::SESSION_NON_MEMBER)
{
$NonMember = $this->session->get(self::SESSION_NON_MEMBER);
if ($NonMember && $NonMember->getPref()) {
$Pref = $this->prefRepository->find($NonMember->getPref()->getId());
$NonMember->setPref($Pref);
$data = $this->session->get($session_key);
if (empty($data)) {
return null;
}
$Customer = new Customer();
$Customer
->setName01($data['name01'])
->setName02($data['name02'])
->setKana01($data['kana01'])
->setKana02($data['kana02'])
->setCompanyName($data['company_name'])
->setEmail($data['email'])
->setPhonenumber($data['phone_number'])
->setPostalcode($data['postal_code'])
->setAddr01($data['addr01'])
->setAddr02($data['addr02']);

if (!empty($data['pref'])) {
$Pref = $this->prefRepository->find($data['pref']);
$Customer->setPref($Pref);
}

return $NonMember;
return $Customer;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,15 +127,16 @@ private function saveDeliveryFeeItem(ItemHolderInterface $itemHolder)
}
}

/** @var DeliveryFee $DeliveryFee */
/** @var DeliveryFee|null $DeliveryFee */
$DeliveryFee = $this->deliveryFeeRepository->findOneBy([
'Delivery' => $Shipping->getDelivery(),
'Pref' => $Shipping->getPref(),
]);
$fee = is_object($DeliveryFee) ? $DeliveryFee->getFee() : 0;

$OrderItem = new OrderItem();
$OrderItem->setProductName($DeliveryFeeType->getName())
->setPrice($DeliveryFee->getFee() + $deliveryFeeProduct)
->setPrice($fee + $deliveryFeeProduct)
->setQuantity(1)
->setOrderItemType($DeliveryFeeType)
->setShipping($Shipping)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public function testNonmemberInputWithPost()
$formData = $this->createNonmemberFormData();
$this->scenarioInput($formData);

$Nonmember = self::$container->get('session')->get('eccube.front.shopping.nonmember');
$Nonmember = self::$container->get(OrderHelper::class)->getNonMember('eccube.front.shopping.nonmember');
$this->assertNotNull($Nonmember);
$this->assertNotNull(self::$container->get('session')->get('eccube.front.shopping.nonmember.customeraddress'));

Expand Down

0 comments on commit 9a84daf

Please sign in to comment.