public function update(ProductSaleElementUpdateEvent $event)
    {
        $salesElement = ProductSaleElementsQuery::create()->findPk($event->getProductSaleElementId());

        $con = Propel::getWriteConnection(ProductSaleElementsTableMap::DATABASE_NAME);

        $con->beginTransaction();

        try {
            // Update the product's tax rule
            $event->getProduct()->setTaxRuleId($event->getTaxRuleId())->save($con);

            // If product sale element is not defined, create it.
            if ($salesElement == null) {
                $salesElement = new ProductSaleElements();

                $salesElement->setProduct($event->getProduct());
            }

            $defaultStatus = $event->getIsDefault();

            // If this PSE will become the default one, be sure to have *only one* default for this product
            if ($defaultStatus) {
                ProductSaleElementsQuery::create()
                    ->filterByProduct($event->getProduct())
                    ->filterByIsDefault(true)
                    ->filterById($event->getProductSaleElementId(), Criteria::NOT_EQUAL)
                    ->update(['IsDefault' => false], $con)
                ;
            } else {
                // We will not allow the default PSE to become non default if no other default PSE exists for this product.
                if ($salesElement->getIsDefault() && ProductSaleElementsQuery::create()
                        ->filterByProduct($event->getProduct())
                        ->filterByIsDefault(true)
                        ->filterById($salesElement->getId(), Criteria::NOT_EQUAL)
                        ->count() === 0) {
                    // Prevent setting the only default PSE to non-default
                    $defaultStatus = true;
                }
            }

            // Update sale element
            $salesElement
                ->setRef($event->getReference())
                ->setQuantity($event->getQuantity())
                ->setPromo($event->getOnsale())
                ->setNewness($event->getIsnew())
                ->setWeight($event->getWeight())
                ->setIsDefault($defaultStatus)
                ->setEanCode($event->getEanCode())
                ->save()
            ;

            // Update/create price for current currency
            $productPrice = ProductPriceQuery::create()
                ->filterByCurrencyId($event->getCurrencyId())
                ->filterByProductSaleElementsId($salesElement->getId())
                ->findOne($con);

            // If price is not defined, create it.
            if ($productPrice == null) {
                $productPrice = new ProductPrice();

                $productPrice
                    ->setProductSaleElements($salesElement)
                    ->setCurrencyId($event->getCurrencyId())
                ;
            }

            // Check if we have to store the price
            $productPrice->setFromDefaultCurrency($event->getFromDefaultCurrency());

            if ($event->getFromDefaultCurrency() == 0) {
                // Store the price
                $productPrice
                    ->setPromoPrice($event->getSalePrice())
                    ->setPrice($event->getPrice())
                ;
            } else {
                // Do not store the price.
                $productPrice
                    ->setPromoPrice(0)
                    ->setPrice(0)
                ;
            }

            $productPrice->save($con);

            // Store all the stuff !
            $con->commit();
        } catch (\Exception $ex) {
            $con->rollback();

            throw $ex;
        }
    }
public function update(ProductSaleElementUpdateEvent $event)
    {
        $salesElement = ProductSaleElementsQuery::create()->findPk($event->getProductSaleElementId());

        $con = Propel::getWriteConnection(ProductSaleElementsTableMap::DATABASE_NAME);

        $con->beginTransaction();

        try {
            // Update the product's tax rule
            $event->getProduct()->setTaxRuleId($event->getTaxRuleId())->save($con);

            // If product sale element is not defined, create it.
            if ($salesElement == null) {
                $salesElement = new ProductSaleElements();

                $salesElement->setProduct($event->getProduct());
            }

            $defaultStatus = $event->getIsDefault();

            // If this PSE will become the default one, be sure to have *only one* default for this product
            if ($defaultStatus) {
                ProductSaleElementsQuery::create()
                    ->filterByProduct($event->getProduct())
                    ->filterByIsDefault(true)
                    ->filterById($event->getProductSaleElementId(), Criteria::NOT_EQUAL)
                    ->update(['IsDefault' => false], $con)
                ;
            } else {
                // We will not allow the default PSE to become non default if no other default PSE exists for this product.
                if ($salesElement->getIsDefault() && ProductSaleElementsQuery::create()
                        ->filterByProduct($event->getProduct())
                        ->filterByIsDefault(true)
                        ->filterById($salesElement->getId(), Criteria::NOT_EQUAL)
                        ->count() === 0) {
                    // Prevent setting the only default PSE to non-default
                    $defaultStatus = true;
                }
            }

            // Update sale element
            $salesElement
                ->setRef($event->getReference())
                ->setQuantity($event->getQuantity())
                ->setPromo($event->getOnsale())
                ->setNewness($event->getIsnew())
                ->setWeight($event->getWeight())
                ->setIsDefault($defaultStatus)
                ->setEanCode($event->getEanCode())
                ->save()
            ;

            // Update/create price for current currency
            $productPrice = ProductPriceQuery::create()
                ->filterByCurrencyId($event->getCurrencyId())
                ->filterByProductSaleElementsId($salesElement->getId())
                ->findOne($con);

            // If price is not defined, create it.
            if ($productPrice == null) {
                $productPrice = new ProductPrice();

                $productPrice
                    ->setProductSaleElements($salesElement)
                    ->setCurrencyId($event->getCurrencyId())
                ;
            }

            // Check if we have to store the price
            $productPrice->setFromDefaultCurrency($event->getFromDefaultCurrency());

            if ($event->getFromDefaultCurrency() == 0) {
                // Store the price
                $productPrice
                    ->setPromoPrice($event->getSalePrice())
                    ->setPrice($event->getPrice())
                ;
            } else {
                // Do not store the price.
                $productPrice
                    ->setPromoPrice(0)
                    ->setPrice(0)
                ;
            }

            $productPrice->save($con);

            // Store all the stuff !
            $con->commit();
        } catch (\Exception $ex) {
            $con->rollback();

            throw $ex;
        }
    }
public function update ( ProductSaleElementUpdateEvent $ event ) { $ salesElement = ProductSaleElementsQuery :: create ( ) -> findPk ( $ event -> getProductSaleElementId ( ) ) ; $ con = Propel :: getWriteConnection ( ProductSaleElementsTableMap :: DATABASE_NAME ) ; $ con -> beginTransaction ( ) ; try { // Update the product's tax rule $ event -> getProduct ( ) -> setTaxRuleId ( $ event -> getTaxRuleId ( ) ) -> save ( $ con ) ; // If product sale element is not defined, create it. if ( $ salesElement == null ) { $ salesElement = new ProductSaleElements ( ) ; $ salesElement -> setProduct ( $ event -> getProduct ( ) ) ; } $ defaultStatus = $ event -> getIsDefault ( ) ; // If this PSE will become the default one, be sure to have *only one* default for this product if ( $ defaultStatus ) { ProductSaleElementsQuery :: create ( ) -> filterByProduct ( $ event -> getProduct ( ) ) -> filterByIsDefault ( true ) -> filterById ( $ event -> getProductSaleElementId ( ) , Criteria :: NOT_EQUAL ) -> update ( [ 'IsDefault' => false ] , $ con ) ; } else { // We will not allow the default PSE to become non default if no other default PSE exists for this product. if ( $ salesElement -> getIsDefault ( ) && ProductSaleElementsQuery :: create ( ) -> filterByProduct ( $ event -> getProduct ( ) ) -> filterByIsDefault ( true ) -> filterById ( $ salesElement -> getId ( ) , Criteria :: NOT_EQUAL ) -> count ( ) === 0 ) { // Prevent setting the only default PSE to non-default $ defaultStatus = true ; } } // Update sale element $ salesElement -> setRef ( $ event -> getReference ( ) ) -> setQuantity ( $ event -> getQuantity ( ) ) -> setPromo ( $ event -> getOnsale ( ) ) -> setNewness ( $ event -> getIsnew ( ) ) -> setWeight ( $ event -> getWeight ( ) ) -> setIsDefault ( $ defaultStatus ) -> setEanCode ( $ event -> getEanCode ( ) ) -> save ( ) ; // Update/create price for current currency $ productPrice = ProductPriceQuery :: create ( ) -> filterByCurrencyId ( $ event -> getCurrencyId ( ) ) -> filterByProductSaleElementsId ( $ salesElement -> getId ( ) ) -> findOne ( $ con ) ; // If price is not defined, create it. if ( $ productPrice == null ) { $ productPrice = new ProductPrice ( ) ; $ productPrice -> setProductSaleElements ( $ salesElement ) -> setCurrencyId ( $ event -> getCurrencyId ( ) ) ; } // Check if we have to store the price $ productPrice -> setFromDefaultCurrency ( $ event -> getFromDefaultCurrency ( ) ) ; if ( $ event -> getFromDefaultCurrency ( ) == 0 ) { // Store the price $ productPrice -> setPromoPrice ( $ event -> getSalePrice ( ) ) -> setPrice ( $ event -> getPrice ( ) ) ; } else { // Do not store the price. $ productPrice -> setPromoPrice ( 0 ) -> setPrice ( 0 ) ; } $ productPrice -> save ( $ con ) ; // Store all the stuff ! $ con -> commit ( ) ; } catch ( \ Exception $ ex ) { $ con -> rollback ( ) ; throw $ ex ; } }
Update an existing product sale element

@param  ProductSaleElementUpdateEvent $event
@throws \Exception
Update an existing product sale element