Magento 2, wie Sie die Auftragsabholung erhalten

8

Wie erhalte ich die Auftragserfassung im benutzerdefinierten Modul? wie die Sammlung "Meine Bestellungen" im Kunden-Dashboard (Frontend). diese Sammlung wie zu bekommen?

Ishu
quelle

Antworten:

9

Verweisen Sie auf die folgende Funktion:

Klasse: Magento \ Sales \ Block \ Order \ History

 /**
     * @return bool|\Magento\Sales\Model\ResourceModel\Order\Collection
     */
    public function getOrders()
    {
        if (!($customerId = $this->_customerSession->getCustomerId())) {
            return false;
        }
        if (!$this->orders) {
            $this->orders = $this->getOrderCollectionFactory()->create($customerId)->addFieldToSelect(
                '*'
            )->addFieldToFilter(
                'status',
                ['in' => $this->_orderConfig->getVisibleOnFrontStatuses()]
            )->setOrder(
                'created_at',
                'desc'
            );
        }
        return $this->orders;
    }

Wenn irgendwelche Probleme haben. Bitte kommentieren. Ich werde versuchen zu lösen.

Pankaj Bhope
quelle
Wie erhalte ich den Attributwert aus den Bestelldetails? weil ich die Auftragserfassung durch Filtration eines benutzerdefinierten Attributs erhalten möchte.
Ishu
@Ishu: Ich habe keine Lösung für diese neue Anforderung, da Kundenauftragsressourcenmodelle etwas komplex sind. Ich schlage vor, diese neue Frage zu posten, damit andere Ihnen dabei helfen können.
Pankaj Bhope
15

Sie können diesen Code in Ihrem benutzerdefinierten Modul verwenden.

<?php
namespace 'YOUR_CUSTOM_NAME_SPACE';

class YOURCALSS extends \Magento\Framework\App\Action\Action
{

    protected $_orderCollectionFactory;

    public function __construct(
        Magento\Framework\App\Action\Context $context,
        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory 
    ) {
        $this->_orderCollectionFactory = $orderCollectionFactory;
        parent::__construct($context);

    }

    }
   public function YOURFUNCTION()
   {
       $collection = $this->_orderCollectionFactory->create()->addAttributeToSelect('*')->addFieldToFilter($field, $condition);
    }


   }       
}
Dhiren Vasoya
quelle
Vielen Dank @Vasoya es funktioniert und nützlich für viele Entwickler und gute Arbeit bro ..
Nagaraju K
7

Hinweis: Als ich zum ersten Mal auf diese Frage stieß, hatte ich gerade erst angefangen und konnte nicht verstehen, wie ich die obigen Antworten in meinem Code verwenden sollte. Deshalb schreibe ich diese Antwort als Referenz für jeden Anfänger, der wie ich auf diese Frage stößt.

So habe ich in den letzten 3 Tagen alle Bestellungen erhalten, deren Status "Ausstehend" lautet.

<?php
namespace <Your Namespace Here>;
use \Psr\Log\LoggerInterface;

class Test {
    protected $logger;
    protected $orderRepository;
    protected $searchCriteriaBuilder;


    public function __construct(
        LoggerInterface $logger,
        \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
        \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
    ) {
        $this->logger = $logger;
        $this->orderRepository = $orderRepository;
        $this->searchCriteriaBuilder = $searchCriteriaBuilder;
    }

    public function execute() {
        $date = (new \DateTime())->modify('-3 day');

        $searchCriteria = $this->searchCriteriaBuilder
            ->addFilter(
                'status',
                'pending',
                'eq'
            )->addFilter(
                'created_at',
                $date->format('Y-m-d'),
                'gt'
            )->create();

        $orders = $this->orderRepository->getList($searchCriteria);
        foreach ($orders->getItems() as $order) {
            //Your Code Here
            $this->logger->info("Order# {$order->getIncrementId()} - Creation Date: {$order->getCreatedAt()}");
        }
    }

}
Hassan Al-Jeshi
quelle
Sie fragen sich, ob dieser Weg besser ist, wenn Sie die Sammlung verwenden? Vor- / Nachteile?
Alex
1
Profis: arbeiten noch nach Magento-Upgrades
Franck Garnier
2
<?php
namespace CustomAPI\MyRecentOrder\Model;
use CustomAPI\MyRecentOrder\Api\MyRecentOrderInterface;

//use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as productCollectionFactory;
//use Magento\Catalog\Api\ProductRepositoryInterface as productRepository;
class MyRecentOrder implements MyRecentOrderInterface 
{
    //protected $logger;
    protected $orderRepository;
    protected $searchCriteriaBuilder;



    public function __construct(
        \Psr\Log\LoggerInterface $logger,
        \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
        \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder



        ) 
        {
        $this->logger = $logger;
        $this->_orderRepository = $orderRepository;
        $this->_searchCriteriaBuilder = $searchCriteriaBuilder;


        }

    public function getMyRecentOrder($email,$pagesize,$curpage){

        try{
           $searchCriteria = $this->_searchCriteriaBuilder
            ->addFilter(
                'status',
                'pending',
                'eq'
            )->addFilter(
                'customer_email',
                 $email
            )->create();

            $orders = $this->_orderRepository->getList($searchCriteria)
                       ->addAttributeToSelect('entity_id')
                       ->addAttributeToSelect('created_at')
                       ->addAttributeToSelect('grand_total')
                       ->addAttributeToSelect('status')
                       ->setPageSize($pagesize)
                       ->setCurPage($curpage);
            return $orders->getData();

            }     

                  catch(\Exception $e){
                  $this->logger->info($e->getMessage());
                  return false;
        }

    }
}

//
Shweta
quelle