/** * Create or update the configuration for a legacy product attribute value. * * @param int $productId Product id. * @param int $attributeAvId Attribute value id. * @param int $currencyId Currency id. * @param float|null $priceDelta Price difference added (or removed) by the attribute value. * * @throws PropelException */ protected function createOrUpdateLegacyProductAttributeValue($productId, $attributeAvId, $currencyId, $priceDelta = null) { if ($priceDelta === null) { return; } $legacyProductAttributeValue = LegacyProductAttributeValueQuery::create()->findPk([$productId, $attributeAvId]); if ($legacyProductAttributeValue === null) { $legacyProductAttributeValue = (new LegacyProductAttributeValue())->setProductId($productId)->setAttributeAvId($attributeAvId); } $legacyProductAttributeValuePriceDelta = LegacyProductAttributeValuePriceQuery::create()->findPk([$productId, $attributeAvId, $currencyId]); if ($legacyProductAttributeValuePriceDelta === null) { $legacyProductAttributeValuePriceDelta = (new LegacyProductAttributeValuePrice())->setProductId($productId)->setAttributeAvId($attributeAvId)->setCurrencyId($currencyId); } if ($priceDelta !== null) { $legacyProductAttributeValuePriceDelta->setDelta($priceDelta); } Propel::getConnection()->beginTransaction(); try { $legacyProductAttributeValue->save(); $legacyProductAttributeValuePriceDelta->save(); } catch (PropelException $e) { Propel::getConnection()->rollBack(); throw $e; } Propel::getConnection()->commit(); }
protected function buildForm() { $this->formBuilder->add('product_id', 'integer', ['label' => Translator::getInstance()->trans('Product'), 'required' => true, 'constraints' => [new NotBlank()]])->add('currency_id', 'integer', ['label' => Translator::getInstance()->trans('Currency'), 'required' => true, 'constraints' => [new NotBlank()]]); $productId = $this->request->get('product_id'); if ($productId === null) { $productId = $this->request->get($this->getName())['product_id']; } $product = ProductQuery::create()->findPk($productId); if ($product->getTemplate() === null) { return; } $currencyId = $this->request->get('edit_currency_id'); if ($currencyId === null) { $defaultCurrency = CurrencyQuery::create()->findOneByByDefault(true); if ($defaultCurrency !== null) { $currencyId = $defaultCurrency->getId(); } } $productAttributeAvs = AttributeAvQuery::create()->useAttributeQuery()->filterByTemplate($product->getTemplate())->endUse()->find(); $formData = ['price_delta' => [], 'price_delta_with_tax' => []]; /** @var TaxEngine $taxEngine */ $taxEngine = $this->container->get('thelia.taxEngine'); $taxCalculator = (new Calculator())->load($product, $taxEngine->getDeliveryCountry()); /** @var AttributeAv $productAttributeAv */ foreach ($productAttributeAvs as $productAttributeAv) { $legacyProductAttributeValuePrice = LegacyProductAttributeValuePriceQuery::create()->findPk([$product->getId(), $productAttributeAv->getId(), $currencyId]); $priceDelta = 0; $priceDeltaWithTax = 0; if (null !== $legacyProductAttributeValuePrice) { $priceDelta = $legacyProductAttributeValuePrice->getDelta(); $priceDeltaWithTax = $taxCalculator->getTaxedPrice($legacyProductAttributeValuePrice->getDelta()); } $numberFormatter = NumberFormat::getInstance($this->getRequest()); $formData['price_delta'][$productAttributeAv->getId()] = $numberFormatter->formatStandardNumber($priceDelta); $formData['price_delta_with_tax'][$productAttributeAv->getId()] = $numberFormatter->formatStandardNumber($priceDeltaWithTax); } $this->formBuilder->add('legacy_product_attribute_value_price_delta', 'collection', ['label' => Translator::getInstance()->trans('Price difference excluding taxes', [], LegacyProductAttributes::MESSAGE_DOMAIN_BO), 'type' => 'number', 'allow_add' => true, 'allow_delete' => true, 'data' => $formData['price_delta']])->add('legacy_product_attribute_value_price_delta_with_tax', 'collection', ['label' => Translator::getInstance()->trans('Price difference including taxes', [], LegacyProductAttributes::MESSAGE_DOMAIN_BO), 'type' => 'number', 'allow_add' => true, 'allow_delete' => true, 'data' => $formData['price_delta_with_tax']]); }
/** * Performs an INSERT on the database, given a LegacyProductAttributeValuePrice or Criteria object. * * @param mixed $criteria Criteria or LegacyProductAttributeValuePrice object containing data that is used to create the INSERT statement. * @param ConnectionInterface $con the ConnectionInterface connection to use * @return mixed The new primary key. * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. */ public static function doInsert($criteria, ConnectionInterface $con = null) { if (null === $con) { $con = Propel::getServiceContainer()->getWriteConnection(LegacyProductAttributeValuePriceTableMap::DATABASE_NAME); } if ($criteria instanceof Criteria) { $criteria = clone $criteria; // rename for clarity } else { $criteria = $criteria->buildCriteria(); // build Criteria from LegacyProductAttributeValuePrice object } // Set the correct dbName $query = LegacyProductAttributeValuePriceQuery::create()->mergeWith($criteria); try { // use transaction because $criteria could contain info // for more than one table (I guess, conceivably) $con->beginTransaction(); $pk = $query->doInsert($con); $con->commit(); } catch (PropelException $e) { $con->rollBack(); throw $e; } return $pk; }
/** * Removes this object from datastore and sets delete attribute. * * @param ConnectionInterface $con * @return void * @throws PropelException * @see LegacyProductAttributeValuePrice::setDeleted() * @see LegacyProductAttributeValuePrice::isDeleted() */ public function delete(ConnectionInterface $con = null) { if ($this->isDeleted()) { throw new PropelException("This object has already been deleted."); } if ($con === null) { $con = Propel::getServiceContainer()->getWriteConnection(LegacyProductAttributeValuePriceTableMap::DATABASE_NAME); } $con->beginTransaction(); try { $deleteQuery = ChildLegacyProductAttributeValuePriceQuery::create()->filterByPrimaryKey($this->getPrimaryKey()); $ret = $this->preDelete($con); if ($ret) { $deleteQuery->delete($con); $this->postDelete($con); $con->commit(); $this->setDeleted(true); } else { $con->commit(); } } catch (Exception $e) { $con->rollBack(); throw $e; } }