Skip to content

Commit

Permalink
closes #13
Browse files Browse the repository at this point in the history
closes #17
  • Loading branch information
gonzaloebiz committed May 3, 2017
1 parent fa420ab commit 07ad74a
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 25 deletions.
62 changes: 39 additions & 23 deletions Model/Api/Product.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ class Product
*/
protected $_imageHelper;
/**
* @var \Magento\CatalogInventory\Model\Stock\StockItemRepository
* @var \Magento\CatalogInventory\Api\StockRegistryInterface
*/
protected $_stockItemRepository;
protected $_stockRegistry;
/**
* @var \Magento\Catalog\Model\CategoryRepository
*/
Expand All @@ -62,7 +62,7 @@ class Product
* @param \Magento\Framework\Stdlib\DateTime\DateTime $date
* @param \Ebizmarts\MailChimp\Helper\Data $helper
* @param \Magento\Catalog\Helper\Image $imageHelper
* @param \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository
* @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
* @param \Magento\Catalog\Model\CategoryRepository $categoryRepository
* @param \Ebizmarts\MailChimp\Model\MailChimpSyncEcommerce $chimpSyncEcommerce
*/
Expand All @@ -72,7 +72,7 @@ public function __construct(
\Magento\Framework\Stdlib\DateTime\DateTime $date,
\Ebizmarts\MailChimp\Helper\Data $helper,
\Magento\Catalog\Helper\Image $imageHelper,
\Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository,
\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
\Magento\Catalog\Model\CategoryRepository $categoryRepository,
\Ebizmarts\MailChimp\Model\MailChimpSyncEcommerce $chimpSyncEcommerce
)
Expand All @@ -82,18 +82,18 @@ public function __construct(
$this->_date = $date;
$this->_productCollection = $productCollection;
$this->_imageHelper = $imageHelper;
$this->_stockItemRepository = $stockItemRepository;
$this->_stockRegistry = $stockRegistry;
$this->_categoryRepository = $categoryRepository;
$this->_chimpSyncEcommerce = $chimpSyncEcommerce;
$this->_batchId = \Ebizmarts\MailChimp\Helper\Data::IS_PRODUCT. '_' . $this->_date->gmtTimestamp();
}
public function _sendProducts($storeId)
public function _sendProducts($magentoStoreId)
{
$batchArray = array();
$counter = 0;
$mailchimpStoreId = $this->_helper->getConfigValue(\Ebizmarts\MailChimp\Helper\Data::XML_MAILCHIMP_STORE,$storeId);
$mailchimpStoreId = $this->_helper->getConfigValue(\Ebizmarts\MailChimp\Helper\Data::XML_MAILCHIMP_STORE,$magentoStoreId);
$collection = $this->_getCollection();
$collection->setStoreId($storeId);
$collection->setStoreId($magentoStoreId);
$collection->getSelect()->joinLeft(
['m4m' => 'mailchimp_sync_ecommerce'],
"m4m.related_id = e.entity_id and m4m.type = '".\Ebizmarts\MailChimp\Helper\Data::IS_PRODUCT.
Expand All @@ -116,7 +116,7 @@ public function _sendProducts($storeId)
$this->_updateProduct($mailchimpStoreId,$product->getId(),$this->_date->gmtDate(),"",0);
continue;
} else {
$data = $this->_buildNewProductRequest($product, $mailchimpStoreId);
$data = $this->_buildNewProductRequest($product, $mailchimpStoreId,$magentoStoreId);
}
if (!empty($data)) {
$batchArray[$counter] = $data;
Expand All @@ -139,7 +139,11 @@ protected function _getCollection()
{
return $this->_productCollection->create();
}
protected function _buildNewProductRequest(\Magento\Catalog\Model\Product $product, $mailchimpStoreId)
protected function _buildNewProductRequest(
\Magento\Catalog\Model\Product $product,
$mailchimpStoreId,
$magentoStoreId
)
{
$variantProducts = array();
switch($product->getTypeId()) {
Expand All @@ -164,7 +168,7 @@ protected function _buildNewProductRequest(\Magento\Catalog\Model\Product $produ
default:
return array();
}
$bodyData = $this->_buildProductData($product, false, $variantProducts);
$bodyData = $this->_buildProductData($product, $magentoStoreId, false, $variantProducts);
try {
$body = json_encode($bodyData,JSON_HEX_APOS|JSON_HEX_QUOT);

Expand All @@ -182,13 +186,18 @@ protected function _buildNewProductRequest(\Magento\Catalog\Model\Product $produ
$data['body'] = $body;
return $data;
}
protected function _buildOldProductRequest(\Magento\Catalog\Model\Product $product, $batchId, $mailchimpStoreId)
protected function _buildOldProductRequest(
\Magento\Catalog\Model\Product $product,
$batchId,
$mailchimpStoreId,
$magentoStoreId
)
{
$operations = array();
if ($product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_SIMPLE ||
$product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_VIRTUAL ||
$product->getTypeId() == "downloadable") {
$data = $this->_buildProductData($product);
$data = $this->_buildProductData($product,$magentoStoreId);

$parentIds = $product->getTypeInstance()->getParentIdsByChild($product->getId());
//$parentIds = Mage::getResourceSingleton('catalog/product_type_configurable')->getParentIdsByChild($product->getId());
Expand Down Expand Up @@ -227,23 +236,30 @@ protected function _buildOldProductRequest(\Magento\Catalog\Model\Product $produ
}

return $operations; }
protected function _buildProductData(\Magento\Catalog\Model\Product $product, $isVarient = true, $variants = null)
protected function _buildProductData(
\Magento\Catalog\Model\Product $product,
$magentoStoreId,
$isVarient = true,
$variants = null
)
{
$data = array();

//data applied for both root and varient products
$data["id"] = $product->getId();
$data["title"] = $product->getName();
$data["url"] = $product->getProductUrl();
$data["image_url"] =$this->_imageHelper->init($product,self::PRODUCTIMAGE)->setImageFile($product->getImage())->getUrl();
if ($product->getImage()) {
$data["image_url"] = $this->_imageHelper->init($product,self::PRODUCTIMAGE)->setImageFile($product->getImage())->getUrl();
}
$data["published_at_foreign"] = "";
if ($isVarient) {
//this is for a varient product
$data["sku"] = $product->getSku();
$data["price"] = $product->getPrice();

//stock
$stock =$this->_stockItemRepository->get($product->getId());
$stock = $this->_stockRegistry->getStockItem($product->getId(),$magentoStoreId);
$data["inventory_quantity"] = (int)$stock->getQty();
$data["backorders"] = (string)$stock->getBackorders();
if ($product->getVisibility() != \Magento\Catalog\Model\Product\Visibility::VISIBILITY_NOT_VISIBLE) {
Expand Down Expand Up @@ -273,7 +289,7 @@ protected function _buildProductData(\Magento\Catalog\Model\Product $product, $
//variants
$data["variants"] = array();
foreach ($variants as $variant) {
$data["variants"][] = $this->_buildProductData($variant);
$data["variants"][] = $this->_buildProductData($variant,$magentoStoreId);
}
}

Expand All @@ -286,7 +302,7 @@ protected function _buildProductData(\Magento\Catalog\Model\Product $product, $
* @return array
* @throws \Magento\Framework\Exception\NoSuchEntityException
*/
public function sendModifiedProduct(\Magento\Sales\Model\Order $order,$mailchimpStoreId)
public function sendModifiedProduct(\Magento\Sales\Model\Order $order,$mailchimpStoreId,$magentoStoreId)
{
$data = array();
$batchId = \Ebizmarts\MailChimp\Helper\Data::IS_PRODUCT . '_' . $this->_date->gmtTimestamp();
Expand All @@ -304,18 +320,18 @@ public function sendModifiedProduct(\Magento\Sales\Model\Order $order,$mailchimp

if ($productSyncData->getMailchimpSyncModified() &&
$productSyncData->getMailchimpSyncDelta() > $this->_helper->getMCMinSyncDateFlag()) {
$data[] = $this->_buildOldProductRequest($product,$batchId);
$data[] = $this->_buildOldProductRequest($product,$batchId,$mailchimpStoreId,$magentoStoreId);
$this->_updateProduct($mailchimpStoreId, $product->getId(), $this->_date->gmtDate(),'',0);
} elseif (!$productSyncData->getMailchimpSyncDelta() ||
$productSyncData->getMailchimpSyncDelta() < $this->_helper->getMCMinSyncDateFlag()) {
$data[] = $this->_buildNewProductRequest($product, $mailchimpStoreId);
$data[] = $this->_buildNewProductRequest($product, $mailchimpStoreId,$magentoStoreId);
$this->_updateProduct($mailchimpStoreId, $product->getId(), $this->_date->gmtDate(),'',0);
}
}
return $data;
}

public function sendQuoteModifiedProduct(\Magento\Quote\Model\Quote $quote,$mailchimpStoreId)
public function sendQuoteModifiedProduct(\Magento\Quote\Model\Quote $quote,$mailchimpStoreId,$magentoStoreId)
{
$data = array();
$batchId = \Ebizmarts\MailChimp\Helper\Data::IS_PRODUCT . '_' . $this->_date->gmtTimestamp();
Expand All @@ -336,11 +352,11 @@ public function sendQuoteModifiedProduct(\Magento\Quote\Model\Quote $quote,$mail

if ($productSyncData->getMailchimpSyncModified() &&
$productSyncData->getMailchimpSyncDelta() > $this->_helper->getMCMinSyncDateFlag()) {
$data[] = $this->_buildOldProductRequest($product,$batchId);
$data[] = $this->_buildOldProductRequest($product,$batchId,$mailchimpStoreId,$magentoStoreId);
$this->_updateProduct($mailchimpStoreId, $product->getId(), $this->_date->gmtDate(),'',0);
} elseif (!$productSyncData->getMailchimpSyncDelta() ||
$productSyncData->getMailchimpSyncDelta() < $this->_helper->getMCMinSyncDateFlag()) {
$data[] = $this->_buildNewProductRequest($product, $mailchimpStoreId);
$data[] = $this->_buildNewProductRequest($product, $mailchimpStoreId,$magentoStoreId);
$this->_updateProduct($mailchimpStoreId, $product->getId(), $this->_date->gmtDate(),'',0);
}
}
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
},
"description": "Connect MailChimp with Magento",
"type": "magento2-module",
"version": "1.0.7",
"version": "1.0.8",
"authors": [
{
"name": "Ebizmarts Corp",
Expand Down
2 changes: 1 addition & 1 deletion etc/module.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Ebizmarts_MailChimp" setup_version="1.0.7">
<module name="Ebizmarts_MailChimp" setup_version="1.0.8">
<sequence>
<module name="Magento_Newsletter"/>
</sequence>
Expand Down

0 comments on commit 07ad74a

Please sign in to comment.