src/models/ShopProduct.php
public function _beforeSaveEvent($event)
    {
        //Проверка измененного типа
        if ($this->isAttributeChanged('product_type')) {
            //Выставили что у него есть предложения
            if ($this->product_type == self::TYPE_OFFERS) {
                if (!$this->getTradeOffers()->all()) {
                    $this->product_type = self::TYPE_SIMPLE;
                }
            } elseif ($this->product_type == self::TYPE_SIMPLE) //Если указали что товар простой, значит у него не должно быть предложений
            {
                if ($this->getTradeOffers()->all()) {
                    $this->product_type = self::TYPE_OFFERS;
                }
            } elseif ($this->product_type == self::TYPE_OFFER) //Если указали что товар простой, значит у него не должно быть предложений
            {
                if (!$this->cmsContentElement->parent_content_element_id) {
                    $this->product_type = self::TYPE_SIMPLE;
                }

            }
        }
    }
public function _beforeSaveEvent($event)
    {
        //Проверка измененного типа
        if ($this->isAttributeChanged('product_type')) {
            //Выставили что у него есть предложения
            if ($this->product_type == self::TYPE_OFFERS) {
                if (!$this->getTradeOffers()->all()) {
                    $this->product_type = self::TYPE_SIMPLE;
                }
            } elseif ($this->product_type == self::TYPE_SIMPLE) //Если указали что товар простой, значит у него не должно быть предложений
            {
                if ($this->getTradeOffers()->all()) {
                    $this->product_type = self::TYPE_OFFERS;
                }
            } elseif ($this->product_type == self::TYPE_OFFER) //Если указали что товар простой, значит у него не должно быть предложений
            {
                if (!$this->cmsContentElement->parent_content_element_id) {
                    $this->product_type = self::TYPE_SIMPLE;
                }

            }
        }
    }
Перед сохранением модели, всегда следим за типом товара
@param $event