diff --git a/common/models/TenderSearch.php b/common/models/TenderSearch.php index 1971337..67941a5 100644 --- a/common/models/TenderSearch.php +++ b/common/models/TenderSearch.php @@ -193,41 +193,127 @@ 'project_payment.payment_id' => $this->payment, ]); - if(!empty( $this->contractual )) { + $currencies = Currency::find() + ->select([ + 'rate', + 'currency_id', + ]) + ->asArray() + ->indexBy('currency_id') + ->column(); + + if(empty( $this->contractual )) { $query->andWhere([ - 'contractual' => $this->contractual, + 'not', + [ 'contractual' => 1 ], ]); - } else { - $currencies = Currency::find() - ->select([ - 'rate', - 'currency_id', - ]) - ->asArray() - ->indexBy('currency_id') - ->column(); - - if(!empty($this->budget_from) && !empty($this->budget_to)) { + if(!empty( $this->budget_from ) && !empty( $this->budget_to )) { $query->andFilterWhere([ 'between', 'total_budget', $this->budget_from * $currencies[ $this->budget_currency ], $this->budget_to * $currencies[ $this->budget_currency ], ]); - } elseif(!empty($this->budget_from)) { + } elseif(!empty( $this->budget_from )) { $query->andFilterWhere([ '>=', 'total_budget', $this->budget_from * $currencies[ $this->budget_currency ], ]); - } elseif(!empty($this->budget_to)) { + } elseif(!empty( $this->budget_to )) { $query->andFilterWhere([ '<=', 'total_budget', $this->budget_to * $currencies[ $this->budget_currency ], ]); } - + } else { + if(!empty( $this->budget_from ) && !empty( $this->budget_to )) { + $query->andWhere([ + 'or', + [ + 'and', + [ + 'between', + 'total_budget', + $this->budget_from * $currencies[ $this->budget_currency ], + $this->budget_to * $currencies[ $this->budget_currency ], + ], + [ + 'not', + [ + 'contractual' => 1, + ], + ], + ], + [ + 'contractual' => 1, + ], + ]); + } elseif(!empty( $this->budget_from )) { + $query->andWhere([ + 'or', + [ + 'and', + [ + '>=', + 'total_budget', + $this->budget_from * $currencies[ $this->budget_currency ], + ], + [ + 'not', + [ + 'contractual' => 1, + ], + ], + ], + [ + 'contractual' => 1, + ], + ]); + } elseif(!empty( $this->budget_to )) { + $query->andWhere([ + 'or', + [ + 'and', + [ + '<=', + 'total_budget', + $this->budget_to * $currencies[ $this->budget_currency ], + ], + [ + 'not', + [ + 'contractual' => 1, + ], + ], + ], + [ + 'contractual' => 1, + ], + ]); + } else { + $query->andWhere([ + 'or', + [ + 'and', + [ + '>=', + 'total_budget', + 0, + ], + [ + 'not', + [ + 'contractual' => 1, + ], + ], + ], + [ + 'contractual' => 1, + ], + ]); + } } return $dataProvider; diff --git a/common/modules/comment/models/CommentProject.php b/common/modules/comment/models/CommentProject.php new file mode 100644 index 0000000..7cc3793 --- /dev/null +++ b/common/modules/comment/models/CommentProject.php @@ -0,0 +1,328 @@ + 0, + ], + [ + [ + 'budget_currency', + ], + 'default', + 'value' => 3, + ], + [ + [ 'budget_currency' ], + 'exist', + 'targetClass' => Currency::className(), + 'targetAttribute' => 'currency_id', + ], + [ + [ + 'files', + ], + 'string', + ], + [ + [ + 'file', + ], + 'safe', + ], + [ + [ 'status' ], + 'default', + 'value' => 1, + ], + ]; + } + + public function scenarios() + { + return [ + self::SCENARIO_USER => [ + 'text', + 'budget_from', + 'budget_to', + 'term_from', + 'term_to', + 'file', + ], + self::SCENARIO_GUEST => [ + + ], + ]; + } + + /** + * @inheritdoc + */ + public function behaviors() + { + return [ + [ + 'class' => \yii\behaviors\TimestampBehavior::className(), + 'createdAtAttribute' => 'date_add', + 'updatedAtAttribute' => 'date_update', + 'value' => new \yii\db\Expression('NOW()'), + ], + ]; + } + + public static function tableName() + { + return '{{%comment_project}}'; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'text' => \Yii::t('app', 'Текст ответа'), + 'budget_from' => \Yii::t('app', 'от'), + 'budget_to' => \Yii::t('app', 'до'), + 'term_from' => \Yii::t('app', 'от'), + 'term_to' => \Yii::t('app', 'до'), + ]; + } + + public function getGuestComment() + { + return $this->guestComment; + } + +// public function setGuestComment($value) +// { +// $this->guestComment = $value; +// } + + /** + * @param string $model + * @param integer $model_id + * + * @return ActiveQuery + */ + public function getComments($model, $model_id) + { + return $this->find() + ->where([ + 'comment_project.model' => $model, + 'comment_project.model_id' => $model_id, + 'comment_project.status' => 1, + ]); + } + + public function postComment() + { + if($this->checkCreate()) { + if(!empty(\Yii::$app->request->post($this->formName())['anonymous'])) { + $this->status = self::STATUS_ANONYMOUS; + } + $this->file = UploadedFile::getInstances($this, 'file'); + if(!empty($this->file)) { + $file_id = []; + if(is_array($this->file)){ + foreach($this->file as $file){ + if($file instanceof UploadedFile){ + $file_model = new File(); + $file_id[] = $file_model->saveFile($file); + } + } + } else { + if($this->file instanceof UploadedFile){ + $file_model = new File(); + $file_id[] = $file_model->saveFile($this->file); + } + } + $this->files = json_encode($file_id); + } + if($this->insert()) { + $this->clearSafe(); + return true; + } else { + return false; + } + } else { + $this->addError('comment_id', 'You can`t post comment here'); + return false; + } + } + + public function updateComment() + { + if($this->checkUpdate()) { + if(empty( $this->comment_id )) { + $this->addError('comment_id', 'Comment ID not found'); + return false; + } else { + if($this->update()) { + $this->clearSafe(); + return true; + } else { + return false; + } + } + } else { + $this->addError('comment_id', 'You can`t update this post'); + return false; + } + } + + public function deleteComment() + { + if($this->checkDelete()) { + if(empty( $this->comment_id )) { + $this->addError('comment_id', 'Comment ID not found'); + return false; + } else { + if($this->status == self::STATUS_DELETED) { + return false; + } + $this->status = self::STATUS_DELETED; + if($this->update()) { + $this->clearSafe(); + return true; + } else { + return false; + } + } + } else { + $this->addError('comment_id', 'You can`t delete this post'); + return false; + } + } + + public function checkCreate() + { + if($this->getGuestComment()) { + return true; + } else { + return \Yii::$app->user->can(\common\modules\comment\Permissions::CREATE, [ + 'model' => $this->model, + 'model_id' => $this->model_id, + ]); + } + } + + public function checkUpdate() + { + if($this->scenario == self::SCENARIO_GUEST) { + return false; + } else { + return \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE, [ + 'model' => $this->model, + 'model_id' => $this->model_id, + ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE_OWN, [ + 'model' => $this->model, + 'model_id' => $this->model_id, + ]); + } + } + + public function checkDelete() + { + if($this->scenario == self::SCENARIO_GUEST) { + return false; + } else { + return \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE, [ + 'model' => $this->model, + 'model_id' => $this->model_id, + ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE_OWN, [ + 'model' => $this->model, + 'model_id' => $this->model_id, + ]); + } + } + + protected function clearSafe($setNew = true) + { + $safe = $this->safeAttributes(); + $count = count($safe); + $values = array_fill(0, $count, NULL); + $result = array_combine($safe, $values); + $this->setAttributes($result); + $this->setIsNewRecord($setNew); + } + + public function getAuthor() + { + // if($this->user_id != NULL) { + return $this->hasOne(\common\models\User::className(), [ 'id' => 'user_id' ]); + // } else { + // return ['firstname' => $this->user_name, 'email' => $this->user_email]; + // } + } + + } diff --git a/common/modules/comment/widgets/views/_project_comment_view.php b/common/modules/comment/widgets/views/_project_comment_view.php new file mode 100644 index 0000000..8e3c04f --- /dev/null +++ b/common/modules/comment/widgets/views/_project_comment_view.php @@ -0,0 +1,113 @@ +user_id )) { + $user = User::find() + ->where([ 'id' => $model->user_id ]) + ->with('userInfo') + ->one(); + } +?> +
+1.1 Строительная площадка расположена по адресу: г. Киев.
+1.2 Существующий объект представляет собой помещение общей площадью ориентировочно – 140 м2.
+1.3. Цель проекта состоит в проведении внутренних общестроительных и отделочных работ.
+1.4. При разработке методов строительства и выборе материалов, используемых в настоящем проекте, необходимо учитывать климатические условия, характерные для г. Киева.
+1.5. Требования к проектированию и производству работ определяются следующими документами:
+- Техническим заданием.
+- Строительными нормами и правилами.
+Все проектные решения и все разделы рабочего проекта должны быть согласованы с Заказчиком в объеме, необходимом для последующей сдачи инженерных систем и коммуникаций.
+