Files
2026-09-15 10:35:56 +08:00

6 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Esun\LegacyOrder\Controller\Adminhtml\Import;
use Esun\LegacyOrder\Model\LegacyOrderImporter;use Magento\Backend\App\Action;use Magento\Framework\App\Filesystem\DirectoryList;use Magento\Framework\Controller\ResultFactory;use Magento\Framework\Filesystem;use Magento\MediaStorage\Model\File\UploaderFactory;
class Validate extends Action {public const ADMIN_RESOURCE='Esun_LegacyOrder::import';public function __construct(Action\Context$c,private readonly UploaderFactory$uploaders,private readonly Filesystem$fs,private readonly LegacyOrderImporter$importer){parent::__construct($c);}public function execute(){try{$this->_getSession()->unsLegacyOrderImport();$dir=$this->fs->getDirectoryWrite(DirectoryList::VAR_IMPORT_EXPORT);$dir->create('legacy_order');$u=$this->uploaders->create(['fileId'=>'csv_file']);$u->setAllowedExtensions(['csv']);$u->setAllowRenameFiles(true);$r=$u->save($dir->getAbsolutePath('legacy_order'));if(!$r)throw new \RuntimeException('Upload failed');$path=$r['path'].'/'.$r['file'];$stats=$this->importer->process($path,(string)$this->getRequest()->getParam('source_code'),(int)$this->getRequest()->getParam('website_id'),(string)$this->getRequest()->getParam('currency'),false);if(!$stats['errors']){$this->_getSession()->setLegacyOrderImport(['path'=>$path,'source_code'=>$this->getRequest()->getParam('source_code'),'website_id'=>$this->getRequest()->getParam('website_id'),'currency'=>$this->getRequest()->getParam('currency')]);$this->messageManager->addSuccessMessage(__("Validation passed: %1 orders, %2 items, %3 linked, %4 unlinked.",$stats['orders'],$stats['items'],$stats['linked'],$stats['unlinked']));}else{$this->messageManager->addErrorMessage(__('Validation failed; import is disabled until all errors are fixed.'));}foreach($stats['warnings'] as$w)$this->messageManager->addWarningMessage($w);foreach($stats['errors'] as$e)$this->messageManager->addErrorMessage($e);}catch(\Throwable$e){$this->messageManager->addErrorMessage($e->getMessage());}return$this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setPath('*/*/index');}}