รวมคำพูดของแขกเข้ากับคำพูดของลูกค้า (ถ้าเข้าสู่ระบบแบบกำหนดเอง) magento 2 ส่วนที่เหลือ


9

หากมี 2 รายการในรถเข็นถ้าลูกค้าเข้าสู่ระบบทั้งสองรายการจะต้องเพิ่มรถเข็นทั้งใบเสนอราคา (ก่อนเข้าสู่ระบบ & หลังเข้าสู่ระบบ) ผสานและสร้างใบเสนอราคาสุดท้ายซึ่งมีรายการทั้งหมดของใบเสนอราคาลูกค้า

ลิงก์อ้างอิงที่ฉันได้รับใน google

https://magento.stackexchange.com/a/62481

https://magento.stackexchange.com/a/30460


โปรดชี้แจงคำถามเพิ่มเติม เพราะ magento 2.2 ให้ฟังก์ชันการทำงานเริ่มต้น
Yogesh

เป็นไปได้ไหมหากลูกค้าล็อกอินเพิ่มรายการในรถเข็นไปยังตะกร้าสินค้าของลูกค้าถ้าเป็นไปได้โปรดอธิบายโดยใช้ REST API
Nagendra Kodi

@Yogesh ฉันผลิตภัณฑ์ผลิตภัณฑ์ API ผลตอบแทนถ้าฉันลองกับลูกค้าที่ฉันได้รับข้อผิดพลาด URL ของฉัน: 192.168.1.65/anusthana/api/rest/customersข้อผิดพลาด: snag.gy/0jbhTr.jpg u สามารถช่วยฉัน
ZUS

คำตอบ:


2

ตามค่าเริ่มต้น Magento 2 ในฝั่ง API จะไม่มีบัตรลูกค้า API สำหรับผสานกับตะกร้าลูกค้าเมื่อลูกค้าเข้าสู่ระบบ

แต่คุณสามารถแทนที่รถเข็นของแขกด้วยรถเข็นของลูกค้า

API : (/V1/carts/:cartId) 
File : vendor/magento/module-quote/Model/QuoteManagement.php
Function : public function assignCustomer($cartId, $customerId, $storeId)

แต่ถ้าคุณต้องการพัฒนาฟังก์ชั่นการผสานรถเข็น Live Magento เว็บคุณต้องสร้าง API ที่กำหนดเอง


0

คุณต้องสร้างปลั๊กอิน "รอบ" ในส่วนขยายที่กำหนดเองของคุณ

app / รหัส / MageKnight / ใบเสนอราคา / etc / module.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="MageKnight_Quote">
        <sequence>
            <module name="Magento_Quote"/>            
        </sequence>
    </module>
</config>

app / รหัส / MageKnight / ใบเสนอราคา / registration.php

<?php

use \Magento\Framework\Component\ComponentRegistrar;

ComponentRegistrar::register(ComponentRegistrar::MODULE, 'MageKnight_Quote', __DIR__);

app / รหัส / MageKnight / ใบเสนอราคา / etc / di.xml

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <type name="Magento\Quote\Api\CartManagementInterface">
        <plugin name="mergeGuestCart"
                type="MageKnight\Quote\Plugin\Model\CartManagement"/>
    </type>
</config>

app / รหัส / MageKnight / ใบเสนอราคา / ปลั๊กอิน / รุ่น / CartManagement.php

<?php

namespace MageKnight\Quote\Plugin\Model;

use Magento\Framework\Exception\StateException;

/**
 * Class CartManagement
 */
class CartManagement
{
    /**
     * @var \Magento\Quote\Api\CartRepositoryInterface
     */
    protected $quoteRepository;

    /**
     * @var \Magento\Customer\Api\CustomerRepositoryInterface
     */
    protected $customerRepository;

    /**
     * @var \Magento\Customer\Model\CustomerFactory
     */
    protected $customerModelFactory;

    /**
     * @var \Magento\Quote\Model\QuoteIdMaskFactory
     */
    private $quoteIdMaskFactory;

    /**
     * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
     * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
     * @param \Magento\Customer\Model\CustomerFactory $customerModelFactory
     * @param \Magento\Quote\Model\QuoteIdMaskFactory $quoteIdMaskFactory
     */
    public function __construct(
        \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
        \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
        \Magento\Customer\Model\CustomerFactory $customerModelFactory,
        \Magento\Quote\Model\QuoteIdMaskFactory $quoteIdMaskFactory
    ) {
        $this->quoteRepository = $quoteRepository;
        $this->customerRepository = $customerRepository;
        $this->customerModelFactory = $customerModelFactory;
        $this->quoteIdMaskFactory = $quoteIdMaskFactory;
    }

    /**
     * Around plugin to assign customer to guest cart
     *
     * @param \Magento\Quote\Api\CartManagementInterface $subject
     * @param callable $proceed
     * @param int $cartId The cart ID.
     * @param int $customerId The customer ID.
     * @param int $storeId
     * @return boolean
     */
    public function aroundAssignCustomer(
        \Magento\Quote\Api\CartManagementInterface $subject,
        callable $proceed,
        $cartId,
        $customerId,
        $storeId
    ) {
        $quote = $this->quoteRepository->getActive($cartId);
        $customer = $this->customerRepository->getById($customerId);
        $customerModel = $this->customerModelFactory->create();

        if (!in_array($storeId, $customerModel->load($customerId)->getSharedStoreIds())) {
            throw new StateException(
                __("The customer can't be assigned to the cart. The cart belongs to a different store.")
            );
        }
        if ($quote->getCustomerId()) {
            throw new StateException(
                __("The customer can't be assigned to the cart because the cart isn't anonymous.")
            );
        }
        try {
            $customerActiveQuote = $this->quoteRepository->getForCustomer($customerId);
        } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
            $customerActiveQuote = false;
        }
        if ($customerActiveQuote) {
            /** Merge carts */
            $quote->merge($customerActiveQuote);
            $this->quoteRepository->delete($customerActiveQuote);
        }
        $quote->setCustomer($customer);
        $quote->setCustomerIsGuest(0);
        $quote->setStoreId($storeId);
        $quote->setIsActive(1);
        /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
        $quoteIdMask = $this->quoteIdMaskFactory->create()->load($cartId, 'quote_id');
        if ($quoteIdMask->getId()) {
            $quoteIdMask->delete();
        }
        $this->quoteRepository->save($quote);
        return true;
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.