Skip to content

Commit

Permalink
Delivery を自動生成するよう修正
Browse files Browse the repository at this point in the history
- 送料を含めた集計をサポート
  • Loading branch information
nanasess committed Sep 6, 2016
1 parent 658f8ac commit f401412
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 13 deletions.
77 changes: 70 additions & 7 deletions tests/Eccube/Tests/Fixture/Generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
use Eccube\Entity\Customer;
use Eccube\Entity\CustomerAddress;
use Eccube\Entity\Delivery;
use Eccube\Entity\DeliveryTime;
use Eccube\Entity\DeliveryFee;
use Eccube\Entity\Order;
use Eccube\Entity\OrderDetail;
use Eccube\Entity\Payment;
Expand Down Expand Up @@ -325,7 +327,7 @@ public function createProduct($product_name = null, $product_class_num = 3)
* @param array $ProductClasses 明細行となる ProductClass の配列
* @return \Eccube\Entity\Order
*/
public function createOrder(Customer $Customer, array $ProductClasses = array())
public function createOrder(Customer $Customer, array $ProductClasses = array(), Delivery $Delivery = null)
{
$faker = $this->getFaker();
$quantity = $faker->randomNumber(2);
Expand All @@ -336,8 +338,10 @@ public function createOrder(Customer $Customer, array $ProductClasses = array())
$Order->setPref($Pref);
$this->app['orm.em']->persist($Order);
$this->app['orm.em']->flush($Order);
if (!is_object($Delivery)) {
$Delivery = $this->createDelivery();
}

$Delivery = $this->app['eccube.repository.delivery']->find(1);
$Shipping = new Shipping();
$Shipping->copyProperties($Customer);
$Shipping
Expand All @@ -353,7 +357,6 @@ public function createOrder(Customer $Customer, array $ProductClasses = array())
$ProductClasses = $Product->getProductClasses();
}

$subTotal = 0;
foreach ($ProductClasses as $ProductClass) {
$Product = $ProductClass->getProduct();
$OrderDetail = new OrderDetail();
Expand Down Expand Up @@ -383,13 +386,19 @@ public function createOrder(Customer $Customer, array $ProductClasses = array())
$Shipping->addShipmentItem($ShipmentItem);
$this->app['orm.em']->persist($ShipmentItem);
$this->app['orm.em']->flush($ShipmentItem);
$subTotal += $OrderDetail->getPriceIncTax() * $OrderDetail->getQuantity();
}

// TODO 送料, 手数料の加算
$subTotal = $Order->calculateSubTotal();
// TODO 送料無料条件は考慮していない. 必要であれば Order から再集計すること.
$Order->setDeliveryFeeTotal($Shipping->getShippingDeliveryFee());
$Order->setSubTotal($subTotal);
$Order->setTotal($subTotal);
$Order->setPaymentTotal($subTotal);

$total = $Order->getTotalPrice();
$Order->setTotal($total);
$Order->setPaymentTotal($total);

$tax = $Order->calculateTotalTax();
$Order->setTax($tax);

$this->app['orm.em']->flush($Order);
return $Order;
Expand Down Expand Up @@ -429,9 +438,63 @@ public function createPayment(Delivery $Delivery, $method, $charge = 0, $rule_mi

$this->app['orm.em']->persist($PaymentOption);
$this->app['orm.em']->flush($PaymentOption);

$Delivery->addPaymentOption($PaymentOption);
$this->app['orm.em']->flush($Delivery);
return $Payment;
}

/**
* 配送方法を生成する.
*
* @param integer $delivery_time_max_pattern 配送時間の最大パターン数
* @return Delivery
*/
public function createDelivery($delivery_time_max_pattern = 5)
{
$Member = $this->app['eccube.repository.member']->find(2);
$ProductType = $this->app['eccube.repository.master.product_type']->find(1);
$faker = $this->getFaker();
$Delivery = new Delivery();
$Delivery
->setServiceName($faker->word)
->setName($faker->word)
->setDescription($faker->paragraph())
->setConfirmUrl($faker->url)
->setRank($faker->randomNumber(2))
->setCreator($Member)
->setProductType($ProductType)
->setDelFlg(Constant::DISABLED);
$this->app['orm.em']->persist($Delivery);
$this->app['orm.em']->flush($Delivery);

$delivery_time_patten = $faker->numberBetween(0, $delivery_time_max_pattern);
for ($i = 0; $i < $delivery_time_patten; $i++) {
$DeliveryTime = new DeliveryTime();
$DeliveryTime
->setDelivery($Delivery)
->setDeliveryTime($faker->word);
$this->app['orm.em']->persist($DeliveryTime);
$this->app['orm.em']->flush($DeliveryTime);
$Delivery->addDeliveryTime($DeliveryTime);
}

$Prefs = $this->app['eccube.repository.master.pref']->findAll();
foreach ($Prefs as $Pref) {
$DeliveryFee = new DeliveryFee();
$DeliveryFee
->setFee($faker->randomNumber(4))
->setPref($Pref)
->setDelivery($Delivery);
$this->app['orm.em']->persist($DeliveryFee);
$this->app['orm.em']->flush($DeliveryFee);
$Delivery->addDeliveryFee($DeliveryFee);
}

$this->app['orm.em']->flush($Delivery);
return $Delivery;
}

/**
* Faker を生成する.
*
Expand Down
20 changes: 14 additions & 6 deletions tests/Eccube/Tests/Service/ShoppingServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -460,13 +460,17 @@ public function testGetFormDeliveryDates()
*/
public function testGetFormPayments()
{
$Order = $this->createOrder($this->Customer);
$Delivery = $this->app['eccube.fixture.generator']->createDelivery();
$Order = $this->app['eccube.fixture.generator']->createOrder($this->Customer, array(), $Delivery);
$Order->setSubTotal(2500);
$this->app['orm.em']->flush();
$this->app['orm.em']->flush($Order);

$Delivery = $this->app['eccube.repository.delivery']->find(1);
$Payment1 = $this->createPayment($Delivery, 'スキップされる支払い方法', 0, 1000, 2000);
$Payment2 = $this->createPayment($Delivery, '支払い方法2', 0, 2001, 3000);
$Payment3 = $this->createPayment($Delivery, '支払い方法3', 0);
$Payment4 = $this->createPayment($Delivery, '支払い方法4', 0);
$Payment5 = $this->createPayment($Delivery, '支払い方法5', 0);
$Payment6 = $this->createPayment($Delivery, '支払い方法6', 0);

$Payments = $this->app['eccube.service.shopping']->getFormPayments(array($Delivery), $Order);

Expand All @@ -481,13 +485,17 @@ public function testGetFormPaymentsWithMultiple()
$BaseInfo = $this->app['eccube.repository.base_info']->get();
$BaseInfo->setOptionMultipleShipping(Constant::ENABLED);

$Order = $this->createOrder($this->Customer);
$Delivery = $this->app['eccube.fixture.generator']->createDelivery();
$Order = $this->app['eccube.fixture.generator']->createOrder($this->Customer, array(), $Delivery);
$Order->setSubTotal(2500);
$this->app['orm.em']->flush();
$this->app['orm.em']->flush($Order);

$Delivery = $this->app['eccube.repository.delivery']->find(1);
$Payment1 = $this->createPayment($Delivery, 'スキップされる支払い方法', 0, 1000, 2000);
$Payment2 = $this->createPayment($Delivery, '支払い方法2', 0, 2001, 3000);
$Payment3 = $this->createPayment($Delivery, '支払い方法3', 0);
$Payment4 = $this->createPayment($Delivery, '支払い方法4', 0);
$Payment5 = $this->createPayment($Delivery, '支払い方法5', 0);
$Payment6 = $this->createPayment($Delivery, '支払い方法6', 0);

$Payments = $this->app['eccube.service.shopping']->getFormPayments(array($Delivery), $Order);

Expand Down

0 comments on commit f401412

Please sign in to comment.