API de Magento 2 – Lista de deseos [Custom API]

Estás leyendo la publicación: API de Magento 2 – Lista de deseos [Custom API]

use Magento\Framework\DataObject;

use Magento\Framework\Event\ManagerInterface;

use Magento\Framework\Exception\LocalizedException;

use Magento\Framework\Exception\NoSuchEntityException;

use Magento\Wishlist\Model\WishlistFactory;

usar Meetanshi\CustomRestApi\Api\WishlistManagementInterface;class WishlistManagement implementa WishlistManagementInterface

{

/**

* @var WishlistFactory

*/

privado $ fábrica de listas de deseos;

/**

* @var interfaz de repositorio de productos

*/

$productRepository privado;

/**

* @var interfaz de administrador

*/

privado $gestor de eventos;

/**

* @var \Magento\Catálogo\Ayudante\Producto\Configuración

*/

privado $productHelper;/**

* Constructor de gestión de deseos.

* @param Fábrica de Listas de Deseos $fábrica de listas de deseos

* @param ProductRepositoryInterface $productRepository

* @param ManagerInterface $eventManager

* @param \Magento\Catalog\Helper\Product\Configuration $productHelper

*/

función pública __construir(

fábrica de lista de deseos $ fábrica de lista de deseos,

ProductRepositoryInterface $productRepository,

interfaz de administrador $ administrador de eventos,

\Magento\Catalog\Helper\Producto\Configuración $productHelper

) {

$this->wishlistFactory = $wishlistFactory;

$this->productRepository = $productRepository;

$this->eventManager = $eventManager;

$this->productHelper = $productHelper;

}/**

* @param int $clienteId

* @return \Magento\Lista de deseos\Modelo\Lista de deseos|\Meetanshi\CustomRestApi\Api\Data\WishlistInterface

* @lanza NoSuchEntityException

*/

función pública get(int $customerId)

{

$listadedeseos = $esta->fábricadelistadedeseos->create()->loadByCustomerId($customerId);if (!$listadedeseos->getId()) {

$lista de deseos[‘items’] = [];

$lista de deseos[‘error’] = [‘Customer does not yet have a wishlist’];

return $lista de deseos;}$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$ayudante = $objectManager->get(‘Meetanshi\CustomRestApi\Helper\Data’);

$helperPool = $objectManager->get(‘Magento\Catalog\Helper\Product\ConfigurationPool’);$storeUrl = $helper->getStoreUrl();

$mediaUrl = $storeUrl . ‘/pub/medios/catálogo/producto/’;

if ($ayudante->isRemovePub()) {

$mediaUrl = $storeUrl . ‘/medios/catálogo/producto/’;

}

$producto_img = [];

$artículos del producto = [];

foreach ($lista de deseos->getItemCollection()->getItems() as $item) {

$productId = $item->getProductId();

intentar{

$producto = $este->productRepository->getById($productId);

cambiar ($producto->getTypeId()) {

case “paquete”: $helperInstance = \Magento\Bundle\Helper\Catalog\Product\Configuration::class; romper;

case “descargable”: $helperInstance = \Magento\Downloadable\Helper\Catalog\Product\Configuration::class; romper;

predeterminado: $helperInstance = \Magento\Catalog\Helper\Product\Configuration::class;}

$productoItems[] =

[

“wishlist_item_id” => $item->getId(),

“product_id” => $productId,

“name” => $product->getData(‘name’),

“price” => number_format($item->getProduct()->getFinalPrice() ?? 0, 2, ‘.’, ”),

“sku” => $product->getSku(),

“qty” => $item->getQty(),

“special_price” => number_format($item->getProduct()->getSpecialPrice() ?? 0, 2, ‘.’, ”),

“image” => $mediaUrl.$product->getData(‘image’),

“thumbnail” => $mediaUrl.$product->getData(‘thumbnail’),

“small_image” => $mediaUrl.$product->getData(‘small_image’),

“product_type” => $product->getTypeId(),

🔥 Recomendado:  Cómo obtener datos del cliente del valor del atributo en Magento 2

“product_options” => $this->getConfiguredOptions($item, $helperPool, $helperInstance)

];

}

atrapar (\Excepción $e) {

}

}$lista de deseos[‘items’] = array_merge($productItems, $product_img);return $lista de deseos;

}/**

* @param $elemento

* @param $helperPool

* @param $mainHelper

* @retorno mixto

*/

función pública getConfiguredOptions($item, $helperPool, $mainHelper)

{

$helper = $helperPool->get($mainHelper);

$opciones = $ayudante->getOptions($item);

foreach ($opciones as $índice => $opción) {

if (is_array($opción) && array_key_exists(‘valor’, $opción)) {

if (!(array_key_exists(‘has_html’, $opción) && $opción[‘has_html’] === cierto)) {

if (is_array($opción[‘value’])) {

foreach ($ opción[‘value’] como $clave => $valor) {

$opción[‘value’][$key] = $valor;

}

}

}

$opciones[$index][‘value’] = $opción[‘value’];

}

}

devolver $opciones;

}/**

* @param int $clienteId

* @param \Meetanshi\CustomRestApi\Api\Data\RequestInterface $elemento

* @return \Magento\Lista de deseos\Modelo\Lista de deseos|\Meetanshi\CustomRestApi\Api\Data\WishlistInterface

* @lanza una excepción localizada

* @lanza NoSuchEntityException

*/

añadir función pública (int $customerId, $item)

{

$lista de deseos = $this->wishlistFactory->create()->loadByCustomerId($customerId, true);

$producto = $este->productoRepositorio->get($elemento->getProducto());

if (!$producto->isVisibleInCatalog()) {

throw new LocalizedException(__(“Lo sentimos, este elemento no se puede agregar a la lista de deseos”), null, 1);

}

$solicituddecompra = new DataObject();

$atributosPersonalizados = $elemento->getAtributosPersonalizados();

si ($atributospersonalizados) {

$superatributos = [];

$bundleOptionQtys = [];

$opciones de paquete = [];

foreach ($atributospersonalizados como $atributopersonalizado) {

if (strpos($customAttribute->getAttributeCode(), ‘super_attribute_’) === 0) {

$superAttributeId = str_replace(‘super_attribute_’, ”, $customAttribute->getAttributeCode());

$superatributos[$superAttributeId] = $atributopersonalizado->getValue();

continuar;

}

if (strpos($customAttribute->getAttributeCode(), ‘bundle_option_qty_’) === 0) {

$bundleOptionQty = str_replace(‘bundle_option_qty_’, ”, $customAttribute->getAttributeCode());

$bundleOptionQtys[$bundleOptionQty] = $atributopersonalizado->getValue();

continuar;

}

if (strpos($customAttribute->getAttributeCode(), ‘bundle_option_’) === 0) {

$bundleOption = str_replace(‘bundle_option_’, ”, $customAttribute->getAttributeCode());

$opciónpaquete = explotar(‘_’, $opciónpaquete);

if (contar ($opciónpaquete) === 1) {

$paqueteOpciones[$bundleOption[0]]= $atributopersonalizado->getValue();

} elseif (contar ($opciónpaquete) === 2) {

$paqueteOpciones[$bundleOption[0]][$bundleOption[1]]= $atributopersonalizado->getValue();

}

continuar;

}

}

si ($superatributos) {

$solicituddecompra->setData(‘super_atributos’, $superatributos);

}

si ($bundleOptionQtys) {

$solicituddecompra->setData(‘bundle_option_qty’, $bundleOptionQtys);

}

if ($opcionespaquete) {

$solicituddecompra->setData(‘opción_paquete’, $opcionespaquete);

}

}

$resultado = $lista de deseos->addNewItem($producto, $compraSolicitud);

if (es_cadena($resultado)) {

lanzar una nueva excepción localizada (__ ($ resultado), nulo, 2);

}

if ($listadedeseos->esObjetoNuevo()) {

$lista de deseos->guardar();

}

$this->eventManager->dispatch(

‘lista_de_deseos_añadir_producto’,

[‘wishlist’ => $wishlist, ‘product’ => $product, ‘item’ => $result] );

$lista de deseos[‘items’] = $lista de deseos->getItemCollection()->getItems();

volver $lista de deseos;

}

/**

* @param int $clienteId

🔥 Recomendado:  Siete formas de crear un mejor contenido de conversión

* @param int $quoteId

* @param int $IdItem

* @return\Meetanshi\CustomRestApi\Api\Data\WishlistInterface

*/

función pública move(int $customerId, int $quoteId, int $itemId)

{

$lista de deseos = $this->wishlistFactory->create()->loadByCustomerId($customerId, true);

$solicituddecompra = new DataObject();

$om = \Magento\Framework\App\ObjectManager::getInstance();

$presupuesto = $om->get(‘Magento\Presupuesto\Modelo\Presupuesto’);

$quoteItems = $quote->load($quoteId)->getAllVisibleItems();

$estado = falso;

intentar {

foreach ($quoteItems como $quoteItem) {

$_productId = $quoteItem->getProductId();

$producto = $este->productRepository->getById($_productId);

if (!$producto->isVisibleInCatalog()) {

throw new LocalizedException(__(“Lo sentimos, este elemento no se puede agregar a la lista de deseos”), null, 1);

}

if ($objetoItem->getId() == $itemId) {

$solicituddecompra = $artículodepresupuesto->getBuyRequest();

$estado = verdadero;

romper;

}

}

$opciones = $solicituddecompra->getOptions();

if ($solicituddecompra->getOptions()) {

foreach ($solicituddecompra->getOptions() as $clave => $opción) {

if (is_array($opción)) {

if (isset($opción[‘date_internal’])) {

unset ($ opciones[$key]);

$opciones[$key] = $opción[‘date_internal’];

}

}

}

$solicituddecompra->setData(‘opciones’, $opciones);

}

si ($estado) {

$resultado = $lista de deseos->addNewItem($producto, $compraSolicitud);

if (es_cadena($resultado)) {

lanzar una nueva excepción localizada (__ ($ resultado), nulo, 2);

}

if ($listadedeseos->esObjetoNuevo()) {

$lista de deseos->guardar();

}

$this->eventManager->dispatch(

‘lista_de_deseos_añadir_producto’,

[‘wishlist’ => $wishlist, ‘product’ => $product, ‘item’ => $result] );

$lista de deseos[‘items’] = $lista de deseos->getItemCollection()->getItems();

}

}

atrapar (\Excepción $e) {

throw new LocalizedException(__($e->getMessage()), null, 1);

}

volver $lista de deseos;

}

/**

* @param int $clienteId

* @param int $IdItem

* @return bool

* @lanza \Excepción

*/

eliminar función pública (int $ ID de cliente, int $ ID de artículo): bool

{

$lista de deseos = $this->wishlistFactory->create()->loadByCustomerId($customerId);

$artículo = $lista de deseos->getItem($itemId);

si (!$elemento) {

throw new NoSuchEntityException(__(‘Ningún elemento con ID %1’, $itemId), nulo, 1);

}

$elemento->eliminar();

devolver verdadero;

}

}