use yii\console\ExitCode;
use yii\helpers\ArrayHelper;
use yii\helpers\BaseConsole;
+use yii\helpers\FileHelper;
+use yii\web\Response;
use yii_app\records\MarketplaceOrders;
use yii_app\records\MarketplaceStore;
use yii_app\records\MatrixErp;
}
return ExitCode::OK;
}
+
+ public function actionFlowwowFeedFile() {
+ $marketplaceStoreIds = MarketplaceStore::find()
+ ->select('warehouse_guid')
+ ->where(['warehouse_id' => MarketplaceStore::FLOWWOW_WAREHOUSE_ID])
+ ->column();
+ foreach ($marketplaceStoreIds as $key => $id) {
+ $balanceInfo = MarketplaceService::infoForMarketplace(1);
+ Yii::error('Баланс ' . json_encode($balanceInfo, JSON_UNESCAPED_UNICODE));
+ $productsInfo = MarketplaceService::getProductsInfoForFeed($id, $balanceInfo);
+ Yii::error('Инфо товаров ' . json_encode($productsInfo, JSON_UNESCAPED_UNICODE));
+ $xmlFeed = MarketplaceService::createXMLFeed($productsInfo);
+ $dir = Yii::getAlias('@feeds');
+ FileHelper::createDirectory($dir, 0775, true);
+
+ $filename = sprintf('%s_%d.xml', 'feed',$id);
+ $path = $dir . DIRECTORY_SEPARATOR . $filename;
+
+ if (file_put_contents($path, $xmlFeed) === false) {
+ $this->stderr("Не удалось записать файл: {$path}\n", BaseConsole::FG_RED);
+ continue;
+ }
+
+ $this->stdout("Фид сохранён: {$path}\n", BaseConsole::FG_GREEN);
+ }
+
+ return ExitCode::OK;
+ }
}
'@bower' => '@vendor/bower-asset',
'@npm' => '@vendor/npm-asset',
'@tests' => '@app/tests',
+ '@feeds' => '@app/media/feeds',
],
'timeZone' => 'Europe/Moscow',
'components' => [
'@uploads' => dirname(__DIR__, 1) . "/uploads",
'@data-path' => dirname(__DIR__, 1) . "/data",
'@uploads-images-path' => "@uploads/images",
+ '@feeds' => '@app/media/feeds',
],
'modules' => [
'gridview' => [
+ ],
+ 'puppeteer' => [
+ 'class' => \yii_app\services\FlowwowService::class,
+ 'endpoint' => 'http://node-yii_erp24:3030',
],
'cache' => [
'class' => 'yii\caching\FileCache',
'@npm' => '@vendor/npm-asset',
'@dist' => '@app/dist',
'@uploads' => "@yii_app/uploads",
+ '@feeds' => '@app/media/feeds',
],
'params' => require dirname(__DIR__, 2) . '/config/params.php',
'timeZone' => 'Europe/Moscow',
/**
* Экшен для генерации и отображения XML-фида.
*
- * @return string
+ * @return Response|\yii\console\Response
*/
public function actionFeed($id)
{
- $balanceInfo = MarketplaceService::infoForMarketplace(1);
- Yii::error('Баланс ' . json_encode($balanceInfo, JSON_UNESCAPED_UNICODE));
- $productsInfo = MarketplaceService::getProductsInfoForFeed($id, $balanceInfo);
- Yii::error('Инфо товаров ' . json_encode($productsInfo, JSON_UNESCAPED_UNICODE));
- // $productsInfo = MarketplaceService::getAllProductsInfo($id);
-
-
- $xmlFeed = MarketplaceService::createXMLFeed($productsInfo);
- Yii::error('Фид ' . json_encode($xmlFeed, JSON_UNESCAPED_UNICODE));
- Yii::$app->response->format = Response::FORMAT_RAW;
- Yii::$app->response->headers->add('Content-Type', 'application/xml; charset=utf-8');
-
- return $xmlFeed;
+ $dir = Yii::getAlias('@feeds');
+ $matches = glob($dir . DIRECTORY_SEPARATOR . "feed_{$id}.xml") ?: [];
+ if (!$matches) {
+ throw new \yii\web\NotFoundHttpException('Фид ещё не сгенерирован'); }
+
+ return Yii::$app->response->sendFile($matches[0], basename($matches[0]), [
+ 'mimeType' => 'application/xml; charset=utf-8',
+ 'inline' => true,
+ ]);
}
public function actionTest()