bundles/Jabber/GenericBundle/EventListener/MandatoryCompleteness.php line 17

Open in your IDE?
  1. <?php
  2. namespace Jabber\GenericBundle\EventListener;
  3. use Pimcore\Event\Model\ElementEventInterface;
  4. use Pimcore\Event\Model\DataObjectEvent;
  5. use Pimcore\Model\DataObject\Product;
  6. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  7. class MandatoryCompleteness {
  8.     private ParameterBagInterface $params;
  9.     public function __construct(ParameterBagInterface $params) {
  10.         $this->params $params;
  11.     }
  12.     public function onPreUpdateAndSave(ElementEventInterface $e) {
  13.         if (!$e->hasArgument('isAutoSave')) {
  14.             if ($e instanceof DataObjectEvent) {
  15.                 // do something with the object
  16.                 $dataObject $e->getObject();
  17.                 if ($dataObject instanceof Product) {
  18.                     if ($dataObject->getProductLevel() == "PARENT") {
  19.                         $dataObject $this->CalculateParentCompleteness($dataObject);
  20.                     } else if ($dataObject->getProductLevel() == "STYLE") {
  21.                         $dataObject $this->StyleCompleteness($dataObject);
  22.                     }
  23.                 }
  24.             }
  25.         }
  26.     }
  27.     private function StyleCompleteness(Product $dataObject) {
  28.         $params $this->params->get('variant_mandatory_fields');
  29.         $dataObject->doGetInheritedValues();
  30.         $mandatoryFields 0;
  31.         $filledMandatoryFields 0;
  32.         if (!empty($params)) {
  33.             if (isset($params['Product']['Lvl2'])) {
  34.                 foreach ($params['Product']['Lvl2'] as $field) {
  35.                     $getter "get" $field;
  36.                     if (method_exists($dataObject$getter)) {
  37.                         $mandatoryFields++;
  38.                         if (!empty($dataObject->$getter())) {
  39.                             $filledMandatoryFields++;
  40.                         }
  41.                     } 
  42.                 }
  43.             }
  44.             if (isset($params['Product']['Lvl3'])) {
  45.                 $children $dataObject->getChildren([Product::OBJECT_TYPE_VARIANT]);
  46.                 if (!empty($children)) {
  47.                     foreach ($children as $child) {
  48.                         foreach ($params['Product']['Lvl3'] as $field) {
  49.                             $getter "get" $field;
  50.                             if (method_exists($child$getter)) {
  51.                                 $mandatoryFields++;
  52.                                 if (!empty($child->$getter())) {
  53.                                     $filledMandatoryFields++;
  54.                                 }
  55.                             } 
  56.                         }
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.         $percentage number_format(($filledMandatoryFields/$mandatoryFields), 2)*100;
  62.         $dataObject->setPercentageComplete($percentage);
  63.         return $dataObject;
  64.     }
  65.     private function CalculateParentCompleteness(Product $dataObject) {
  66.         $params $this->params->get('variant_mandatory_fields');
  67.         $mandatoryFields 0;
  68.         $filledMandatoryFields 0;
  69.         if (!empty($params)) {
  70.             if (isset($params['Product']['Lvl1'])) {
  71.                 foreach ($params['Product']['Lvl1'] as $field) {
  72.                     $getter "get" $field;
  73.                     if (method_exists($dataObject$getter)) {
  74.                         $mandatoryFields++;
  75.                         if (!empty($dataObject->$getter())) {
  76.                             $filledMandatoryFields++;
  77.                         }
  78.                     } 
  79.                 }
  80.             }
  81.         }
  82.         $percentage number_format(($filledMandatoryFields/$mandatoryFields), 2)*100;
  83.         $dataObject->setPercentageComplete($percentage);
  84.         return $dataObject;
  85.     }
  86.     private function CalculateCompleteness(Product $dataObject) {
  87.         $mandatoryFields 0;
  88.         $filledMandatoryFields 0;
  89.         $dataObject->doGetInheritedValues();
  90.         $languages \Pimcore\Tool::getValidLanguages();
  91.         foreach ($dataObject->getClass()->getFieldDefinitions() as $key=>$fieldDefinition) {
  92.             if ($fieldDefinition->getMandatory()) {
  93.                 $mandatoryFields++;
  94.                 $function "get".$key;
  95.                 if ($dataObject->$function()) {
  96.                     $filledMandatoryFields++;
  97.                 }
  98.             }
  99.             if ($fieldDefinition->getFieldtype() == "localizedfields") {
  100.             
  101.                 foreach ($fieldDefinition->childs as $localisedField) {
  102.                     if ($localisedField->getMandatory()) {
  103.                         foreach ($languages as $language) {
  104.                             $mandatoryFields++;
  105.                             $localisedFunction "get".$localisedField->getName();
  106.                             if ($dataObject->$localisedFunction($language)) {
  107.                                 $filledMandatoryFields++;
  108.                             }
  109.                         }
  110.                     }
  111.                 }
  112.             }
  113.         }
  114.         $percentage number_format(($filledMandatoryFields/$mandatoryFields), 2)*100;
  115.         $dataObject->setPercentageComplete($percentage);
  116.         return $dataObject;
  117.         
  118.         
  119.     }
  120. }