/** * @param ProductPrice|object $value * @param ProductPriceAllowedUnits $constraint * * {@inheritdoc} */ public function validate($value, Constraint $constraint) { $priceProduct = $value->getProduct(); $priceUnit = $value->getUnit(); if (!$priceProduct) { $this->context->addViolationAt('product', $constraint->notExistingProductMessage); return; } $unitPrecisions = $priceProduct->getUnitPrecisions(); $availableUnits = []; foreach ($unitPrecisions as $unitPrecision) { $availableUnits[] = $unitPrecision->getUnit(); } if (!in_array($priceUnit, $availableUnits)) { if ($priceUnit instanceof ProductUnit && $priceUnit->getCode()) { $this->context->addViolationAt('unit', $constraint->notAllowedUnitMessage, ['%product%' => $priceProduct->getSku(), '%unit%' => $priceUnit->getCode()]); } else { $this->context->addViolationAt('unit', $constraint->notExistingUnitMessage); } } }
/** * @param ProductPrice $entity * @return string */ protected function getEntityHashByUniqueFields(ProductPrice $entity) { return md5(implode(':', [$entity->getProduct()->getId(), $entity->getPriceList()->getId(), $entity->getQuantity(), $entity->getUnit()->getCode(), $entity->getPrice()->getCurrency()])); }
/** * @param ProductPrice $productPrice * @return string */ protected function getHash(ProductPrice $productPrice) { return md5(sprintf('%s_%s_%s_%s_%s', $productPrice->getProduct()->getId(), $productPrice->getPriceList()->getId(), (double) $productPrice->getQuantity(), $productPrice->getUnit()->getCode(), $productPrice->getPrice()->getCurrency())); }