前提:配送種別は組み込んでいません。
PostgreSQL
-- Table: mtb_closedate
-- DROP TABLE mtb_closedate;
CREATE TABLE mtb_closedate
(
id smallint NOT NULL,
name text,
rank integer NOT NULL,
CONSTRAINT mtb_closedate_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE mtb_closedate
OWNER TO postgres;
eccube-3.0.17/src/Eccube/Entity/Master/
Closedate.php
(Pref.phpをコピー)
class Closedate extends \Eccube\Entity\AbstractEntity
eccube-3.0.17/src/Eccube/Repository/Master/
ClosedateRepository.php
(PrefRepository.phpをコピー)
class ClosedateRepository extends EntityRepository
eccube-3.0.17/src/Eccube/Resource/doctrine/master/Eccube.Entity.Master.
Closedate.dcm.yml
(Eccube.Entity.Master.Pref.dcm.ymlをコピー)
Eccube\Entity\Master\Closedate:
type: entity
table: mtb_closedate
repositoryClass: Eccube\Repository\Master\ClosedateRepository
eccube-3.0.17/src/Eccube/ServiceProvider/EccubeServiceProvider.php
$app['eccube.repository.master.pref'] = $app->share(function () use ($app) {
return $app['orm.em']->getRepository('Eccube\Entity\Master\Pref');
});
$app['eccube.repository.master.closedate'] = $app->share(function () use ($app) {
return $app['orm.em']->getRepository('Eccube\Entity\Master\Closedate');
});
eccube-3.0.17/vendor/composer/autoload_classmap.php
'Eccube\\Entity\\Master\\Pref' => $baseDir . '/src/Eccube/Entity/Master/Pref.php',
'Eccube\\Entity\\Master\\Closedate' => $baseDir . '/src/Eccube/Entity/Master/Closedate.php', (上の「Pref」をコピー)
eccube-3.0.17/vendor/composer/autoload_static.php
'Eccube\\Entity\\Master\\Pref' => __DIR__ . '/../..' . '/src/Eccube/Entity/Master/Pref.php',
'Eccube\\Entity\\Master\\Closedate' => __DIR__ . '/../..' . '/src/Eccube/Entity/Master/Closedate.php', (上の「Pref」をコピー)
eccube-3.0.17/src/Eccube/Service/ShoppingService.php
use Eccube\Entity\Master\DeviceType;
use Eccube\Entity\Master\Closedate;
/**
* お届け日を取得
*
* @param Order $Order
* @return array
*/
public function getFormDeliveryDates(Order $Order)
{
// お届け日の設定
$minDate = 0;
$deliveryDateFlag = false;
// 配送時に最大となる商品日数を取得
foreach ($Order->getOrderDetails() as $detail) {
$deliveryDate = $detail->getProductClass()->getDeliveryDate();
if (!is_null($deliveryDate)) {
if ($deliveryDate->getValue() < 0) {
// 配送日数がマイナスの場合はお取り寄せなのでスキップする
$deliveryDateFlag = false;
break;
}
if ($minDate < $deliveryDate->getValue()) {
$minDate = $deliveryDate->getValue();
}
// 配送日数が設定されている
$deliveryDateFlag = true;
}
}
// 配達最大日数期間を設定
$deliveryDates = array();
// 配送日数が設定されている
if ($deliveryDateFlag) {
$period = new \DatePeriod (
new \DateTime($minDate.' day'),
new \DateInterval('P1D'),
new \DateTime($minDate + $this->app['config']['deliv_date_end_max'].' day')
);
// 追加
$closedates = $this->app['eccube.repository.master.closedate']
->findAll();
foreach ($period as $day) {
// 追加
$open = true;
foreach ($closedates as $closedate) {
if (strcmp($day->format('Y/m/d'),$closedate) == 0) {
$open = false;
}
}
if ($open) {
$deliveryDates[$day->format('Y/m/d')] = $day->format('Y/m/d');
}
}
}
return $deliveryDates;
}