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(),
“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
* @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;
}
}