<?php
namespace AppBundle\EventListener;
use Pimcore\Event\Model\ElementEventInterface;
use Pimcore\Event\Model\DataObjectEvent;
use \Pimcore\Model\DataObject;
use \Pimcore\Model\DataObject\BundleItem;
use Pimcore\Db;
use Pimcore\Log\ApplicationLogger;
class SaveObjectListener {
public function onPostUpdate (ElementEventInterface $e)
{
if($e instanceof AssetEvent)
{
// do something with the asset
$foo = $e->getAsset();
}
else if ($e instanceof DocumentEvent)
{
// do something with the document
$foo = $e->getDocument();
}
else if ($e instanceof DataObjectEvent)
{
// do something with the object
$foo = $e->getObject();
$pid = $foo->getId();
$claname = '';
$otype = $foo->geto_type();
if($otype == 'object')
{
$claname = $foo->geto_className();
$o_published =$foo->geto_published();
}
if(($claname == 'bundleItem' || $claname == 'BundleItem' ) && $o_published == 1 )
{
//$itemShortDesc = $foo->getitemShortDesc();
//$itemDesc = $foo->getitemDesc();
$childSkuDetails=$foo->getChildSKUs();
$parentSkuDetails=$foo->getParentSKU();
$compQty=$foo->getComponentQty();
$totalchildSku = count($childSkuDetails);
$totalparentsku = count($parentSkuDetails);
$deleteRequest = $foo->getdeleteRequest();
$objectpe = DataObject::getByPath("/Product/");
$objectpeparentId = $objectpe->getId();
$j=1;
$table = "object_bundle";
// $sql = "select * from ".$table." where o_parentId='".$objectpeparentId."' and o_id='".$pid."'";
$sql = "select * from ".$table." where o_id='".$pid."'";
// throw new \Pimcore\Model\Element\ValidationException($sql, 1234);
$stmt = Db::get()->prepare($sql);
$stmt->execute();
$data =$stmt->fetchAll();
$totalparentrec = count($data);
$o_parentId = $data[0]['o_parentId'];
$parentData = DataObject::getById($o_parentId);
$o_type= $parentData->geto_type();
if($o_type != 'folder')
{
//throw new \Pimcore\Model\Element\ValidationException('', 1234);
}
// $table = "object_bundle";
// // $sql = "select * from ".$table." where o_parentId='".$objectpeparentId."' and o_id='".$pid."'";
// $sql = "select * from ".$table." where o_parentId='".$pid."'";
// // throw new \Pimcore\Model\Element\ValidationException($sql, 1234);
// $stmt = Db::get()->prepare($sql);
// $stmt->execute();
// $data =$stmt->fetchAll();
// $totalrec = count($data);
if($o_type == 'folder')
{
$tableOne = "object_bundle";
$query = "select * from ".$tableOne." where o_parentId='".$pid."'";
$statment = Db::get()->prepare($query);
$statment->execute();
$dataGet =$statment->fetchAll();
$totalResult = count($dataGet);
if($totalResult > 0)
{
$m=0;
while($m < count($dataGet))
{
$childId = $dataGet[$m]['o_id'];
$m++;
$updateChildSku=DataObject\BundleItem::getById($childId);
$compQtyUpdate=$updateChildSku->getComponentQty();
$updateChildSku->setdeleteRequest($deleteRequest);
$updateChildSku->setComponentQty($compQtyUpdate);
$updateChildSku->setInJDAProcess("no");
$updateChildSku->save();
}
}
else
{
if($totalchildSku > 0 && $totalparentsku > 0 )
{
$i=1;
foreach ($parentSkuDetails as $parentList)
{
$setCodeForParent=$parentList->getsetCode();
$parentId=$parentList->getId();
$parSkuNumber=$parentList->getsku();
if($setCodeForParent=='0')
{
$setCode=$parentList->getId();
throw new \Pimcore\Model\Element\ValidationException($setCode . " Parent Object set code is 0 so this object is not added.", 1234);
}
elseif($parSkuNumber == Null)
{
throw new \Pimcore\Model\Element\ValidationException($setCode . " Parent Object does not have sku number.", 1234);
$query = "delete from object_relations_bundle where dest_id='".$setCode."'and fieldname='ParentSKU'";
$stmt = Db::get()->prepare($query);
$stmt->execute();
}
else
{
foreach ($childSkuDetails as $childDeatil)
{
$setCodeForChild=$childDeatil->getsetCode();
$childskuid=$childDeatil->getId();
$childSkuNumber=$childDeatil->getsku();
if($setCodeForChild != '0')
{
$setCodeChild=$childDeatil->getId();
//validation msg for child sku set code is not 0
throw new \Pimcore\Model\Element\ValidationException($setCodeChild . " Child sku Object set code is not 0 so this object is not added.", 1234);
}
elseif($childSkuNumber == Null || $childSkuNumber == NULL || $childSkuNumber == null )
{
$setCodeChild=$childDeatil->getId();
//validation msg for sku number is not present
throw new \Pimcore\Model\Element\ValidationException($setCodeChild . " Child sku Object does not have sku number.", 1234);
$query = "delete from object_relations_bundle where dest_id='".$setCodeChild."'and fieldname='ChildSKUs'";
$stmt = Db::get()->prepare($query);
$stmt->execute();
}
else
{
$objectChildSku = new DataObject\BundleItem();
$objectChildSku->setParent(DataObject\BundleItem::getById($pid));
$getDes=$childDeatil->getitemShortDesc();
$childObjectNamecode = "ChildSku - ".$childskuid;
$objectChildSku->setKey(\Pimcore\Model\Element\Service::getValidKey($childObjectNamecode, 'object'));
$objectChildSku->setComponentQty($compQty);
$objectChildSku->setdeleteRequest($deleteRequest);
$objectChildSku->setPublished(true);
$objectChildSku->setInJDAProcess("no");
$objectChildSku->save();
$newId = $objectChildSku->getId();
foreach ($parentSkuDetails as $parentSkuDetailsdata)
{
$parentskuid=$parentSkuDetailsdata->getId();
}
$query = "INSERT INTO `object_relations_bundle` (`src_id`, `dest_id`, `type`, `fieldname`, `index`, `ownertype`, `ownername`, `position`) VALUES ('".$newId."', '".$parentskuid."', 'object', 'ParentSKU', '".$j."', 'object', '', '0');";
$stmt = Db::get()->prepare($query);
$rdata = $stmt->execute();
//
$query = "INSERT INTO `object_relations_bundle` (`src_id`, `dest_id`, `type`, `fieldname`, `index`, `ownertype`, `ownername`, `position`) VALUES ('".$newId."', '".$childskuid."', 'object', 'ChildSKUs', '".$j."', 'object', '', '0');";
$stmt = Db::get()->prepare($query);
$rdata = $stmt->execute();
try
{
$childObject=$objectChildSku->getId();
}
catch(\Exception $e)
{
$errorMessage = $e->getMessage();
$logger->error( $errorMessage, ['relatedObject' => $childObject, "versionNote" => date("Y-m-d")." version"]);
}
$j++;
}
}
$i++;
}
}
}
}
}
}
}
}
public function onPreAdd(ElementEventInterface $e)
{
}
public function onPreUpdate(ElementEventInterface $e)
{
DataObject\AbstractObject::setHideUnpublished(false);
}
}