バージョン選択

フォーラム

メニュー

オンライン状況

70 人のユーザが現在オンラインです。 (57 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 70
もっと...

サイト内検索

質問 > フロント機能 > Processor改造時のRepositoryの使用方法につきまして[規格によらず在庫を増減させる]

フロント機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
takax3
投稿日時: 2021/3/24 16:23
対応状況: 解決済
新米
登録日: 2021/3/21
居住地:
投稿: 3
Re: Processor改造時のRepositoryの使用方法につきまして
__constructを以下の通りに書き換えたところ、在庫が規格によらず一括で減少する動作を実装出来ました。
ありがとうございました。

/**
* StockReduceProcessor constructor.
*
* @param ProductStockRepository $productStockRepository
* @param EntityManagerInterface $entityManager
* @param ProductRepository $productRepository
*/
public function __construct(ProductStockRepository $productStockRepository, EntityManagerInterface $entityManager, ProductRepository $productRepository)
{
$this->productRepository = $productRepository;
$this->productStockRepository = $productStockRepository;
$this->entityManager = $entityManager;
}
umebius
投稿日時: 2021/3/24 0:01
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: Processor改造時のRepositoryの使用方法につきまして
productRepositoryへの依存性注入は__constructならこんなふうに行うと良いですが、それはされていますか?

https://github.com/ec-cube/ec-cube/blob/4.0.5/src/Eccube/Twig/Extension/EccubeExtension.php#L46-L50


「use Eccube\Repository\ProductRepository;」も必要です。
https://github.com/ec-cube/ec-cube/blob/4.0.5/src/Eccube/Twig/Extension/EccubeExtension.php#L20


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

takax3
投稿日時: 2021/3/21 18:46
対応状況: −−−
新米
登録日: 2021/3/21
居住地:
投稿: 3
Re: Processor改造時のRepositoryの使用方法につきまして
エラーが発生するのは

$Product = $this->productRepository->find($ProductId);

の行です。それ以降は検証できていません。
最初はproductRepositoryがnullだからfindが存在しないのかな、などと__constructでproductRepositoryを持ってくるよう更新したのですが、どうにもうまくいかず……
takax3
投稿日時: 2021/3/21 18:44
対応状況: 解決済
新米
登録日: 2021/3/21
居住地:
投稿: 3
Processor改造時のRepositoryの使用方法につきまして[規格によらず在庫を増減させる]
EC-CUBE 4.0.5です。初心者です。

商品に対して規格[包装あり, 包装無し]を設定した際、包装アリ購入時にも包装無し購入時にも両方の在庫が減少するよう改造を行いたく、StockReduceProcessor.phpのeachProductOrderItems関数を以下のように改造したのですが、いざ購入処理を行うとエラーが出てしまいます。
__constructにて$this->productRepository = $this->services['Eccube\\Repository\\ProductRepository'];などを行ってみたのですが、どうにもエラーを解消することができません。
もしよろしければ、productRepositoryを使用する方法、もしくはproductRepositoryを使用せずにstockを増減させる方法についてご教授願えないでしょうか。

よろしくお願いいたします。

private function eachProductOrderItems(ItemHolderInterface $itemHolder, callable $callback)
{
// Order以外の場合は何もしない
if (!$itemHolder instanceof Order) {
return;
}

foreach ($itemHolder->getProductOrderItems() as $item) {
// 在庫が無制限かチェックし、制限ありなら在庫数をチェック
if (!$item->getProductClass()->isStockUnlimited()) {
// 在庫チェックあり
/* @var ProductStock $productStock */
$productStock = $item->getProductClass()->getProductStock();
if ($productStock->getProductClassId() === null) {
// 在庫に対してロックを実行
$this->entityManager->lock($productStock, LockMode::PESSIMISTIC_WRITE);
$this->entityManager->refresh($productStock);
$productStock->setProductClassId($item->getProductClass()->getId());
}
$ProductClass = $item->getProductClass();
$stock = $callback($productStock->getStock(), $item->getQuantity());
if ($stock < 0) {
throw new ShoppingException(trans('purchase_flow.over_stock', ['%name%' => $ProductClass->formattedProductName()]));
}
$productStock->setStock($stock);
$ProductClass->setStock($stock);

$ProductId = $ProductClass->getProduct()->getId();
$Product = $this->productRepository->find($ProductId);
$ProductClasses = $Product->getProductClasses();
foreach($ProductClasses as $ProductClass) {
$productStock = $ProductClass->getProductStock();
$productStock->setStock($stock);
$ProductClass->setStock($stock);
}
}
}
}
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,305名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.