Commit 3bd3d96c17fff80262ada9d206cb523dcdb5dc34
1 parent
767d5673
commit before grand update
Showing
4 changed files
with
386 additions
and
221 deletions
Show diff stats
controllers/EventController.php
| @@ -4,6 +4,7 @@ namespace artweb\artbox\event\controllers; | @@ -4,6 +4,7 @@ namespace artweb\artbox\event\controllers; | ||
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | use artweb\artbox\ecommerce\models\Product; | 6 | use artweb\artbox\ecommerce\models\Product; |
| 7 | +use artweb\artbox\ecommerce\models\ProductVariant; | ||
| 7 | use Yii; | 8 | use Yii; |
| 8 | use artweb\artbox\event\models\Event; | 9 | use artweb\artbox\event\models\Event; |
| 9 | use artweb\artbox\event\models\EventSearch; | 10 | use artweb\artbox\event\models\EventSearch; |
| @@ -82,7 +83,7 @@ class EventController extends Controller | @@ -82,7 +83,7 @@ class EventController extends Controller | ||
| 82 | { | 83 | { |
| 83 | $model = new Event(); | 84 | $model = new Event(); |
| 84 | $model->generateLangs(); | 85 | $model->generateLangs(); |
| 85 | - $model->productsIds = []; | 86 | + $model->variantsIds = []; |
| 86 | if ($model->load(Yii::$app->request->post())) { | 87 | if ($model->load(Yii::$app->request->post())) { |
| 87 | $model->loadLangs(\Yii::$app->request); | 88 | $model->loadLangs(\Yii::$app->request); |
| 88 | if ($model->save() && $model->transactionStatus) { | 89 | if ($model->save() && $model->transactionStatus) { |
| @@ -94,10 +95,10 @@ class EventController extends Controller | @@ -94,10 +95,10 @@ class EventController extends Controller | ||
| 94 | } | 95 | } |
| 95 | 96 | ||
| 96 | }else{ | 97 | }else{ |
| 97 | - $products = Product::find() | ||
| 98 | - ->where([ 'id' => \Yii::$app->request->post('productIds') ]) | ||
| 99 | - ->all(); | ||
| 100 | - $model->linkMany('products', $products); | 98 | + $variants = ProductVariant::find() |
| 99 | + ->where([ 'id' => \Yii::$app->request->post('variantsIds') ]) | ||
| 100 | + ->all(); | ||
| 101 | + $model->linkMany('variants', $variants); | ||
| 101 | } | 102 | } |
| 102 | 103 | ||
| 103 | return $this->redirect([ | 104 | return $this->redirect([ |
| @@ -124,9 +125,10 @@ class EventController extends Controller | @@ -124,9 +125,10 @@ class EventController extends Controller | ||
| 124 | { | 125 | { |
| 125 | $model = $this->findModel($id); | 126 | $model = $this->findModel($id); |
| 126 | $model->generateLangs(); | 127 | $model->generateLangs(); |
| 127 | - $model->productsIds = ArrayHelper::map($model->products, | ||
| 128 | - 'id', | ||
| 129 | - 'lang.title'); | 128 | +// $model->productsIds = ArrayHelper::map($model->products, |
| 129 | +// 'id', | ||
| 130 | +// 'lang.title'); | ||
| 131 | + $model->variantsIds = ArrayHelper::map($model->variants,'id', 'sku'); | ||
| 130 | if ($model->load(Yii::$app->request->post())) { | 132 | if ($model->load(Yii::$app->request->post())) { |
| 131 | $model->loadLangs(\Yii::$app->request); | 133 | $model->loadLangs(\Yii::$app->request); |
| 132 | if ($model->save() && $model->transactionStatus) { | 134 | if ($model->save() && $model->transactionStatus) { |
| @@ -139,10 +141,10 @@ class EventController extends Controller | @@ -139,10 +141,10 @@ class EventController extends Controller | ||
| 139 | } | 141 | } |
| 140 | 142 | ||
| 141 | }else{ | 143 | }else{ |
| 142 | - $products = Product::find() | ||
| 143 | - ->where([ 'id' => \Yii::$app->request->post('productIds') ]) | 144 | + $variants = ProductVariant::find() |
| 145 | + ->where([ 'id' => \Yii::$app->request->post('variantsIds') ]) | ||
| 144 | ->all(); | 146 | ->all(); |
| 145 | - $model->linkMany('products', $products); | 147 | + $model->linkMany('variants', $variants); |
| 146 | } | 148 | } |
| 147 | 149 | ||
| 148 | return $this->redirect([ | 150 | return $this->redirect([ |
models/Event.php
| 1 | <?php | 1 | <?php |
| 2 | - | ||
| 3 | -namespace artweb\artbox\event\models; | ||
| 4 | - | ||
| 5 | -use artweb\artbox\behaviors\ManyToManyBehavior; | ||
| 6 | -use artweb\artbox\behaviors\SaveImgBehavior; | ||
| 7 | -use artweb\artbox\ecommerce\models\Product; | ||
| 8 | -use artweb\artbox\ecommerce\models\ProductVariant; | ||
| 9 | -use artweb\artbox\language\behaviors\LanguageBehavior; | ||
| 10 | -use Yii; | ||
| 11 | -use yii\behaviors\TimestampBehavior; | ||
| 12 | -use yii\helpers\ArrayHelper; | ||
| 13 | -use yii\db\ActiveQuery; | ||
| 14 | -use yii\web\Request; | ||
| 15 | - | ||
| 16 | -/** | ||
| 17 | - * This is the model class for table "event". | ||
| 18 | - * | ||
| 19 | - * @property integer $id | ||
| 20 | - * @property string $image | ||
| 21 | - * @property integer $created_at | ||
| 22 | - * @property integer $updated_at | ||
| 23 | - * @property integer $end_at | ||
| 24 | - * @property integer $status | ||
| 25 | - * @property integer $is_sale | ||
| 26 | - * @property integer $is_event | ||
| 27 | - * @property integer $percent | ||
| 28 | - * @property integer $banner | ||
| 29 | - * @property integer $type | ||
| 30 | - * @property Product[] $products | ||
| 31 | - * * From language behavior * | ||
| 32 | - * @property EventLang $lang | ||
| 33 | - * @property EventLang[] $langs | ||
| 34 | - * @property EventLang $objectLang | ||
| 35 | - * @property string $ownerKey | ||
| 36 | - * @property string $langKey | ||
| 37 | - * @property EventLang[] $modelLangs | ||
| 38 | - * @property bool $transactionStatus | ||
| 39 | - * @method string getOwnerKey() | ||
| 40 | - * @method void setOwnerKey( string $value ) | ||
| 41 | - * @method string getLangKey() | ||
| 42 | - * @method void setLangKey( string $value ) | ||
| 43 | - * @method ActiveQuery getLangs() | ||
| 44 | - * @method ActiveQuery getLang( integer $language_id ) | ||
| 45 | - * @method EventLang[] generateLangs() | ||
| 46 | - * @method void loadLangs( Request $request ) | ||
| 47 | - * @method bool linkLangs() | ||
| 48 | - * @method bool saveLangs() | ||
| 49 | - * @method bool getTransactionStatus() | ||
| 50 | - * * End language behavior * | ||
| 51 | - * * From SaveImgBehavior | ||
| 52 | - * @property string|null $imageFile | ||
| 53 | - * @property string|null $imageUrl | ||
| 54 | - * @method string|null getImageFile( int $field ) | ||
| 55 | - * @method string|null getImageUrl( int $field ) | ||
| 56 | - * * End SaveImgBehavior | ||
| 57 | - * | ||
| 58 | - */ | ||
| 59 | -class Event extends \yii\db\ActiveRecord | ||
| 60 | -{ | ||
| 61 | - public $imageUpload; | ||
| 62 | - public $products_file; | ||
| 63 | - const ACTIVE = 1; | ||
| 64 | - const INACTIVE = 2; | ||
| 65 | - public $productsIds = array(); | 2 | + |
| 3 | + namespace artweb\artbox\event\models; | ||
| 4 | + | ||
| 5 | + use artweb\artbox\behaviors\ManyToManyBehavior; | ||
| 6 | + use artweb\artbox\behaviors\SaveImgBehavior; | ||
| 7 | + use artweb\artbox\ecommerce\models\Product; | ||
| 8 | + use artweb\artbox\ecommerce\models\ProductVariant; | ||
| 9 | + use artweb\artbox\language\behaviors\LanguageBehavior; | ||
| 10 | + use Yii; | ||
| 11 | + use yii\behaviors\TimestampBehavior; | ||
| 12 | + use yii\helpers\ArrayHelper; | ||
| 13 | + use yii\db\ActiveQuery; | ||
| 14 | + use yii\web\Request; | ||
| 15 | + | ||
| 66 | /** | 16 | /** |
| 67 | - * @inheritdoc | 17 | + * This is the model class for table "event". |
| 18 | + * | ||
| 19 | + * @property integer $id | ||
| 20 | + * @property string $image | ||
| 21 | + * @property integer $created_at | ||
| 22 | + * @property integer $updated_at | ||
| 23 | + * @property integer $end_at | ||
| 24 | + * @property integer $status | ||
| 25 | + * @property integer $is_sale | ||
| 26 | + * @property integer $is_event | ||
| 27 | + * @property integer $percent | ||
| 28 | + * @property integer $banner | ||
| 29 | + * @property integer $type | ||
| 30 | + * @property Product[] $products | ||
| 31 | + * @property ProductVariant[] $variants; | ||
| 32 | + * * From language behavior * | ||
| 33 | + * @property EventLang $lang | ||
| 34 | + * @property EventLang[] $langs | ||
| 35 | + * @property EventLang $objectLang | ||
| 36 | + * @property string $ownerKey | ||
| 37 | + * @property string $langKey | ||
| 38 | + * @property EventLang[] $modelLangs | ||
| 39 | + * @property bool $transactionStatus | ||
| 40 | + * @method string getOwnerKey() | ||
| 41 | + * @method void setOwnerKey( string $value ) | ||
| 42 | + * @method string getLangKey() | ||
| 43 | + * @method void setLangKey( string $value ) | ||
| 44 | + * @method ActiveQuery getLangs() | ||
| 45 | + * @method ActiveQuery getLang( integer $language_id ) | ||
| 46 | + * @method EventLang[] generateLangs() | ||
| 47 | + * @method void loadLangs( Request $request ) | ||
| 48 | + * @method bool linkLangs() | ||
| 49 | + * @method bool saveLangs() | ||
| 50 | + * @method bool getTransactionStatus() | ||
| 51 | + * * End language behavior * | ||
| 52 | + * * From SaveImgBehavior | ||
| 53 | + * @property string|null $imageFile | ||
| 54 | + * @property string|null $imageUrl | ||
| 55 | + * @method string|null getImageFile( int $field ) | ||
| 56 | + * @method string|null getImageUrl( int $field ) | ||
| 57 | + * * End SaveImgBehavior | ||
| 68 | */ | 58 | */ |
| 69 | - public static function tableName() | 59 | + class Event extends \yii\db\ActiveRecord |
| 70 | { | 60 | { |
| 71 | - return 'event'; | ||
| 72 | - } | ||
| 73 | - | ||
| 74 | - | ||
| 75 | - | ||
| 76 | - | ||
| 77 | - /** | ||
| 78 | - * @inheritdoc | ||
| 79 | - */ | ||
| 80 | - public function behaviors() | ||
| 81 | - { | ||
| 82 | - return [ | ||
| 83 | - 'img'=>[ | ||
| 84 | - 'class' => SaveImgBehavior::className(), | ||
| 85 | - 'fields' => [ | ||
| 86 | - ['name'=>'image','directory' => 'event' ], | ||
| 87 | - ['name'=>'banner','directory' => 'event' ], | ||
| 88 | - ] | ||
| 89 | - ], | ||
| 90 | - TimestampBehavior::className(), | ||
| 91 | - 'language' => [ | ||
| 92 | - 'class' => LanguageBehavior::className(), | ||
| 93 | - 'objectLang' => EventLang::className() | ||
| 94 | - ], | ||
| 95 | - [ | ||
| 96 | - 'class' => ManyToManyBehavior::className(), | ||
| 97 | - ], | ||
| 98 | - ]; | ||
| 99 | - } | ||
| 100 | - | ||
| 101 | - | ||
| 102 | - public function beforeSave($insert) | ||
| 103 | - { | ||
| 104 | - if (parent::beforeSave($insert)) { | ||
| 105 | - | ||
| 106 | - $this->end_at = !empty($this->end_at) ? (string)strtotime($this->end_at) : ''; | ||
| 107 | - return true; | 61 | + public $imageUpload; |
| 62 | + public $products_file; | ||
| 63 | + const ACTIVE = 1; | ||
| 64 | + const INACTIVE = 2; | ||
| 65 | + public $productsIds = []; | ||
| 66 | + public $variantsIds = []; | ||
| 67 | + /** | ||
| 68 | + * @inheritdoc | ||
| 69 | + */ | ||
| 70 | + public static function tableName() | ||
| 71 | + { | ||
| 72 | + return 'event'; | ||
| 108 | } | 73 | } |
| 109 | - return false; | ||
| 110 | - | ||
| 111 | - } | ||
| 112 | - | ||
| 113 | - public function afterFind(){ | ||
| 114 | - $this->end_at = !empty($this->end_at) ? date("Y-m-d", $this->end_at) : ''; | ||
| 115 | - } | ||
| 116 | - | ||
| 117 | - | ||
| 118 | - /** | ||
| 119 | - * @inheritdoc | ||
| 120 | - */ | ||
| 121 | - public function rules() | ||
| 122 | - { | ||
| 123 | - return [ | ||
| 124 | - [['created_at', 'updated_at','percent','status','is_sale','is_event','percent' ], 'integer'], | ||
| 125 | - [['image', 'end_at','banner'], 'string', 'max' => 255], | ||
| 126 | - [['imageUpload','is_sale','is_event'], 'safe'], | ||
| 127 | - [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'], | ||
| 128 | - [['products_file'], 'file'], | ||
| 129 | - ]; | ||
| 130 | - } | ||
| 131 | - | ||
| 132 | - /** | ||
| 133 | - * @inheritdoc | ||
| 134 | - */ | ||
| 135 | - public function attributeLabels() | ||
| 136 | - { | ||
| 137 | - return [ | ||
| 138 | - 'id' => Yii::t('app', 'ID ะฐะบัะธะธ'), | ||
| 139 | - 'name' => Yii::t('app', 'name'), | ||
| 140 | - 'alias' => Yii::t('app', 'alias'), | ||
| 141 | - 'body' => Yii::t('app', 'body'), | ||
| 142 | - 'image' => Yii::t('app', 'image'), | ||
| 143 | - 'meta_title' => Yii::t('app', 'meta_title'), | ||
| 144 | - 'description' => Yii::t('app', 'description'), | ||
| 145 | - 'h1' => Yii::t('app', 'h1'), | ||
| 146 | - 'seo_text' => Yii::t('app', 'seo_text'), | ||
| 147 | - 'created_at' => Yii::t('app', 'created_at'), | ||
| 148 | - 'updated_at' => Yii::t('app', 'updated_at'), | ||
| 149 | - 'end_at' => Yii::t('app', 'end_at'), | ||
| 150 | - 'status' => Yii::t('app', 'ะกัะฐััั ะฐะบัะธะธ'), | ||
| 151 | - 'products_file' => Yii::t('app', 'ะะฐะณััะทะบะฐ ัะฐะนะปะฐ'), | ||
| 152 | - 'is_sale' => Yii::t('app', 'ะ ะฐัะฟัะพะดะฐะถะฐ'), | ||
| 153 | - 'percent' => Yii::t('app', 'ะัะพัะตะฝั'), | ||
| 154 | - 'is_event' => Yii::t('app', 'ะะบัะธั'), | ||
| 155 | - ]; | ||
| 156 | - } | ||
| 157 | - | ||
| 158 | - | ||
| 159 | - public function isActive(){ | ||
| 160 | - if($this->status){ | ||
| 161 | - | ||
| 162 | - if(!empty($this->end_at) && (strtotime($this->end_at) <= strtotime(date("Y-m-d")))){ | ||
| 163 | - return false; | 74 | + |
| 75 | + /** | ||
| 76 | + * @inheritdoc | ||
| 77 | + */ | ||
| 78 | + public function behaviors() | ||
| 79 | + { | ||
| 80 | + return [ | ||
| 81 | + 'img' => [ | ||
| 82 | + 'class' => SaveImgBehavior::className(), | ||
| 83 | + 'fields' => [ | ||
| 84 | + [ | ||
| 85 | + 'name' => 'image', | ||
| 86 | + 'directory' => 'event', | ||
| 87 | + ], | ||
| 88 | + [ | ||
| 89 | + 'name' => 'banner', | ||
| 90 | + 'directory' => 'event', | ||
| 91 | + ], | ||
| 92 | + ], | ||
| 93 | + ], | ||
| 94 | + TimestampBehavior::className(), | ||
| 95 | + 'language' => [ | ||
| 96 | + 'class' => LanguageBehavior::className(), | ||
| 97 | + 'objectLang' => EventLang::className(), | ||
| 98 | + ], | ||
| 99 | + [ | ||
| 100 | + 'class' => ManyToManyBehavior::className(), | ||
| 101 | + ], | ||
| 102 | + ]; | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + public function beforeSave($insert) | ||
| 106 | + { | ||
| 107 | + if (parent::beforeSave($insert)) { | ||
| 108 | + | ||
| 109 | + $this->end_at = !empty($this->end_at) ? (string) strtotime($this->end_at) : ''; | ||
| 110 | + return true; | ||
| 164 | } | 111 | } |
| 165 | - return true; | 112 | + return false; |
| 113 | + | ||
| 166 | } | 114 | } |
| 167 | - return false; | ||
| 168 | - } | ||
| 169 | - | ||
| 170 | - | ||
| 171 | - public function getType(){ | ||
| 172 | - if($this->is_event){ | ||
| 173 | - return "promo"; | ||
| 174 | - } else if($this->is_sale){ | ||
| 175 | - return "sale"; | ||
| 176 | - } else { | ||
| 177 | - return "promo"; | 115 | + |
| 116 | + public function afterFind() | ||
| 117 | + { | ||
| 118 | + $this->end_at = !empty($this->end_at) ? date("Y-m-d", $this->end_at) : ''; | ||
| 178 | } | 119 | } |
| 179 | - } | ||
| 180 | - | ||
| 181 | - | ||
| 182 | - public function goEvent($file) { | ||
| 183 | - | ||
| 184 | - set_time_limit(0); | ||
| 185 | - | ||
| 186 | - | ||
| 187 | - $handle = fopen($file, 'r'); | ||
| 188 | - | ||
| 189 | - | ||
| 190 | - while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { | ||
| 191 | - if(isset($data[0])){ | ||
| 192 | - $product = ProductVariant::find()->where(['sku' => $data[0]])->joinWith('product')->one(); | ||
| 193 | - if($product instanceof ProductVariant){ | ||
| 194 | - $model= EventsToProducts::find()->where(['event_id' =>$this->id, 'product_id' => $product->product->id ])->one(); | ||
| 195 | - if(!$model instanceof EventsToProducts){ | ||
| 196 | - $model = new EventsToProducts; | ||
| 197 | - $model->event_id = $this->id; | ||
| 198 | - $model->product_id = $product->product->id; | ||
| 199 | - $model->save(); | 120 | + |
| 121 | + /** | ||
| 122 | + * @inheritdoc | ||
| 123 | + */ | ||
| 124 | + public function rules() | ||
| 125 | + { | ||
| 126 | + return [ | ||
| 127 | + [ | ||
| 128 | + [ | ||
| 129 | + 'created_at', | ||
| 130 | + 'updated_at', | ||
| 131 | + 'percent', | ||
| 132 | + 'status', | ||
| 133 | + 'is_sale', | ||
| 134 | + 'is_event', | ||
| 135 | + 'percent', | ||
| 136 | + ], | ||
| 137 | + 'integer', | ||
| 138 | + ], | ||
| 139 | + [ | ||
| 140 | + [ | ||
| 141 | + 'image', | ||
| 142 | + 'end_at', | ||
| 143 | + 'banner', | ||
| 144 | + ], | ||
| 145 | + 'string', | ||
| 146 | + 'max' => 255, | ||
| 147 | + ], | ||
| 148 | + [ | ||
| 149 | + [ | ||
| 150 | + 'imageUpload', | ||
| 151 | + 'is_sale', | ||
| 152 | + 'is_event', | ||
| 153 | + ], | ||
| 154 | + 'safe', | ||
| 155 | + ], | ||
| 156 | + [ | ||
| 157 | + [ 'imageUpload' ], | ||
| 158 | + 'file', | ||
| 159 | + 'extensions' => 'jpg, gif, png', | ||
| 160 | + ], | ||
| 161 | + [ | ||
| 162 | + [ 'products_file' ], | ||
| 163 | + 'file', | ||
| 164 | + ], | ||
| 165 | + ]; | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + /** | ||
| 169 | + * @inheritdoc | ||
| 170 | + */ | ||
| 171 | + public function attributeLabels() | ||
| 172 | + { | ||
| 173 | + return [ | ||
| 174 | + 'id' => Yii::t('app', 'ID ะฐะบัะธะธ'), | ||
| 175 | + 'name' => Yii::t('app', 'name'), | ||
| 176 | + 'alias' => Yii::t('app', 'alias'), | ||
| 177 | + 'body' => Yii::t('app', 'body'), | ||
| 178 | + 'image' => Yii::t('app', 'image'), | ||
| 179 | + 'meta_title' => Yii::t('app', 'meta_title'), | ||
| 180 | + 'description' => Yii::t('app', 'description'), | ||
| 181 | + 'h1' => Yii::t('app', 'h1'), | ||
| 182 | + 'seo_text' => Yii::t('app', 'seo_text'), | ||
| 183 | + 'created_at' => Yii::t('app', 'created_at'), | ||
| 184 | + 'updated_at' => Yii::t('app', 'updated_at'), | ||
| 185 | + 'end_at' => Yii::t('app', 'end_at'), | ||
| 186 | + 'status' => Yii::t('app', 'ะกัะฐััั ะฐะบัะธะธ'), | ||
| 187 | + 'products_file' => Yii::t('app', 'ะะฐะณััะทะบะฐ ัะฐะนะปะฐ'), | ||
| 188 | + 'is_sale' => Yii::t('app', 'ะ ะฐัะฟัะพะดะฐะถะฐ'), | ||
| 189 | + 'percent' => Yii::t('app', 'ะัะพัะตะฝั'), | ||
| 190 | + 'is_event' => Yii::t('app', 'ะะบัะธั'), | ||
| 191 | + ]; | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | + public function isActive() | ||
| 195 | + { | ||
| 196 | + if ($this->status) { | ||
| 197 | + | ||
| 198 | + if (!empty($this->end_at) && ( strtotime($this->end_at) <= strtotime(date("Y-m-d")) )) { | ||
| 199 | + return false; | ||
| 200 | + } | ||
| 201 | + return true; | ||
| 202 | + } | ||
| 203 | + return false; | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + public function getType() | ||
| 207 | + { | ||
| 208 | + if ($this->is_event) { | ||
| 209 | + return "promo"; | ||
| 210 | + } else if ($this->is_sale) { | ||
| 211 | + return "sale"; | ||
| 212 | + } else { | ||
| 213 | + return "promo"; | ||
| 214 | + } | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | +// public function goEvent($file) | ||
| 218 | +// { | ||
| 219 | +// | ||
| 220 | +// set_time_limit(0); | ||
| 221 | +// | ||
| 222 | +// $handle = fopen($file, 'r'); | ||
| 223 | +// | ||
| 224 | +// while (( $data = fgetcsv($handle, 1000, ";") ) !== false) { | ||
| 225 | +// if (isset($data[ 0 ])) { | ||
| 226 | +// $product = ProductVariant::find() | ||
| 227 | +// ->where([ 'sku' => $data[ 0 ] ]) | ||
| 228 | +// ->joinWith('product') | ||
| 229 | +// ->one(); | ||
| 230 | +// if ($product instanceof ProductVariant) { | ||
| 231 | +// $model = EventsToProducts::find() | ||
| 232 | +// ->where( | ||
| 233 | +// [ | ||
| 234 | +// 'event_id' => $this->id, | ||
| 235 | +// 'product_id' => $product->product->id, | ||
| 236 | +// ] | ||
| 237 | +// ) | ||
| 238 | +// ->one(); | ||
| 239 | +// if (!$model instanceof EventsToProducts) { | ||
| 240 | +// $model = new EventsToProducts; | ||
| 241 | +// $model->event_id = $this->id; | ||
| 242 | +// $model->product_id = $product->product->id; | ||
| 243 | +// $model->save(); | ||
| 244 | +// } | ||
| 245 | +// } | ||
| 246 | +// } | ||
| 247 | +// | ||
| 248 | +// } | ||
| 249 | +// fclose($handle); | ||
| 250 | +// unlink($file); | ||
| 251 | +// | ||
| 252 | +// } | ||
| 253 | + | ||
| 254 | + public function goEvent($file) | ||
| 255 | + { | ||
| 256 | + | ||
| 257 | + set_time_limit(0); | ||
| 258 | + | ||
| 259 | + $handle = fopen($file, 'r'); | ||
| 260 | + | ||
| 261 | + while (( $data = fgetcsv($handle, 1000, ";") ) !== false) { | ||
| 262 | + if (isset($data[ 0 ])) { | ||
| 263 | + $product = ProductVariant::find() | ||
| 264 | + ->where([ 'sku' => $data[ 0 ] ]) | ||
| 265 | + ->one(); | ||
| 266 | + if ($product instanceof ProductVariant) { | ||
| 267 | + $model = EventToVariant::find() | ||
| 268 | + ->where( | ||
| 269 | + [ | ||
| 270 | + 'event_id' => $this->id, | ||
| 271 | + 'variant_id' => $product->id, | ||
| 272 | + ] | ||
| 273 | + ) | ||
| 274 | + ->one(); | ||
| 275 | + if (!$model instanceof EventToVariant) { | ||
| 276 | + $model = new EventToVariant(); | ||
| 277 | + $model->event_id = $this->id; | ||
| 278 | + $model->variant_id = $product->id; | ||
| 279 | + $model->save(); | ||
| 280 | + } | ||
| 200 | } | 281 | } |
| 201 | } | 282 | } |
| 283 | + | ||
| 202 | } | 284 | } |
| 203 | - | 285 | + fclose($handle); |
| 286 | + unlink($file); | ||
| 287 | + | ||
| 204 | } | 288 | } |
| 205 | - fclose($handle); | ||
| 206 | - unlink($file); | ||
| 207 | - | ||
| 208 | - } | ||
| 209 | - | ||
| 210 | - public function getProducts(){ | ||
| 211 | - return $this->hasMany(Product::className(),['id' => 'product_id'] )->viaTable('events_to_products', ['event_id' => 'id']); | ||
| 212 | - } | ||
| 213 | - | ||
| 214 | - public static function getSaleEvents(){ | ||
| 215 | - return ArrayHelper::toArray(self::find()->select('percent')->distinct('percent')->where('is_sale=true AND percent IS NOT NULL')->orderBy('percent')->all()); | 289 | + |
| 290 | + public function getProducts() | ||
| 291 | + { | ||
| 292 | + return $this->hasMany(Product::className(), [ 'id' => 'product_id' ]) | ||
| 293 | + ->viaTable('events_to_products', [ 'event_id' => 'id' ]); | ||
| 294 | + } | ||
| 295 | + | ||
| 296 | + public function getVariants() | ||
| 297 | + { | ||
| 298 | + return $this->hasMany(ProductVariant::className(), [ 'id' => 'variant_id' ]) | ||
| 299 | + ->viaTable('event_to_variant', [ 'event_id' => 'id' ]); | ||
| 300 | + } | ||
| 301 | + | ||
| 302 | + public static function getSaleEvents() | ||
| 303 | + { | ||
| 304 | + return ArrayHelper::toArray( | ||
| 305 | + self::find() | ||
| 306 | + ->select('percent') | ||
| 307 | + ->distinct('percent') | ||
| 308 | + ->where('is_sale=true AND percent IS NOT NULL') | ||
| 309 | + ->orderBy('percent') | ||
| 310 | + ->all() | ||
| 311 | + ); | ||
| 312 | + } | ||
| 313 | + | ||
| 216 | } | 314 | } |
| 217 | - | ||
| 218 | -} |
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace artweb\artbox\event\models; | ||
| 4 | + | ||
| 5 | +use artweb\artbox\ecommerce\models\ProductVariant; | ||
| 6 | +use Yii; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * This is the model class for table "event_to_variant". | ||
| 10 | + * | ||
| 11 | + * @property integer $id | ||
| 12 | + * @property integer $event_id | ||
| 13 | + * @property integer $variant_id | ||
| 14 | + * | ||
| 15 | + * @property Event $event | ||
| 16 | + * @property ProductVariant $variant | ||
| 17 | + */ | ||
| 18 | +class EventToVariant extends \yii\db\ActiveRecord | ||
| 19 | +{ | ||
| 20 | + /** | ||
| 21 | + * @inheritdoc | ||
| 22 | + */ | ||
| 23 | + public static function tableName() | ||
| 24 | + { | ||
| 25 | + return 'event_to_variant'; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * @inheritdoc | ||
| 30 | + */ | ||
| 31 | + public function rules() | ||
| 32 | + { | ||
| 33 | + return [ | ||
| 34 | + [['event_id', 'variant_id'], 'integer'], | ||
| 35 | + [['event_id'], 'exist', 'skipOnError' => true, 'targetClass' => Event::className(), 'targetAttribute' => ['event_id' => 'id']], | ||
| 36 | + [['variant_id'], 'exist', 'skipOnError' => true, 'targetClass' => ProductVariant::className(), 'targetAttribute' => ['variant_id' => 'id']], | ||
| 37 | + ]; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + /** | ||
| 41 | + * @inheritdoc | ||
| 42 | + */ | ||
| 43 | + public function attributeLabels() | ||
| 44 | + { | ||
| 45 | + return [ | ||
| 46 | + 'id' => Yii::t('app', 'ID'), | ||
| 47 | + 'event_id' => Yii::t('app', 'Event ID'), | ||
| 48 | + 'variant_id' => Yii::t('app', 'Variant ID'), | ||
| 49 | + ]; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + /** | ||
| 53 | + * @return \yii\db\ActiveQuery | ||
| 54 | + */ | ||
| 55 | + public function getEvent() | ||
| 56 | + { | ||
| 57 | + return $this->hasOne(Event::className(), ['id' => 'event_id']); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + /** | ||
| 61 | + * @return \yii\db\ActiveQuery | ||
| 62 | + */ | ||
| 63 | + public function getVariant() | ||
| 64 | + { | ||
| 65 | + return $this->hasOne(ProductVariant::className(), ['id' => 'variant_id']); | ||
| 66 | + } | ||
| 67 | +} |
views/event/_form.php
| @@ -116,13 +116,13 @@ use yii\helpers\Html; | @@ -116,13 +116,13 @@ use yii\helpers\Html; | ||
| 116 | <?php $condition = ''; | 116 | <?php $condition = ''; |
| 117 | echo Select2::widget( | 117 | echo Select2::widget( |
| 118 | [ | 118 | [ |
| 119 | - 'name' => 'productIds', | 119 | + 'name' => 'variantsIds', |
| 120 | 'options' => [ | 120 | 'options' => [ |
| 121 | - 'placeholder' => \Yii::t('app', 'Search for products ...'), | 121 | + 'placeholder' => \Yii::t('app', 'Search for variant ...'), |
| 122 | 'multiple' => true, | 122 | 'multiple' => true, |
| 123 | ], | 123 | ], |
| 124 | - 'value' => array_keys($model->productsIds), | ||
| 125 | - 'data' => $model->productsIds, | 124 | + 'value' => array_keys($model->variantsIds), |
| 125 | + 'data' => $model->variantsIds, | ||
| 126 | 'pluginOptions' => [ | 126 | 'pluginOptions' => [ |
| 127 | 'allowClear' => true, | 127 | 'allowClear' => true, |
| 128 | 'minimumInputLength' => 3, | 128 | 'minimumInputLength' => 3, |
| @@ -132,7 +132,7 @@ use yii\helpers\Html; | @@ -132,7 +132,7 @@ use yii\helpers\Html; | ||
| 132 | ), | 132 | ), |
| 133 | ], | 133 | ], |
| 134 | 'ajax' => [ | 134 | 'ajax' => [ |
| 135 | - 'url' => Url::to([ '/ecommerce/manage/list' ]), | 135 | + 'url' => Url::to([ '/ecommerce/variant/list' ]), |
| 136 | 'dataType' => 'json', | 136 | 'dataType' => 'json', |
| 137 | 'data' => new JsExpression( | 137 | 'data' => new JsExpression( |
| 138 | 'function(params) { | 138 | 'function(params) { |