public function actionForm($id = NULL)
 {
     $model = $id ? Observations::findOne($id) : new Observations();
     if (Yii::$app->getRequest()->getQueryParam('visit_id') && is_null($id)) {
         $model->visit_id = Yii::$app->getRequest()->getQueryParam('visit_id');
     }
     if ($model->load(Yii::$app->request->post())) {
         /* Load picture file */
         $model->pictureFile = UploadedFile::getInstance($model, 'pictureFile');
         /* Validate model */
         if ($model->validate()) {
             /* Upload picture */
             if ($model->pictureFile) {
                 $model->upload();
             }
             /* Delete picture if selected */
             if ($model->deleteImage && !$model->pictureFile) {
                 $model->picture = NULL;
             }
             /* Check for auto-validation on observqation */
             if (Yii::$app->user->getIdentity()->hasRole(['validator', 'administrator'])) {
                 $model->markAsValidated();
             }
             /* When the observation type equals a null-observation, clear all other fields */
             if ($model->observation_type == Observations::OBSERVATION_TYPE_NULL) {
                 foreach ($model->attributes as $attribute => $value) {
                     if (!in_array($attribute, ['id', 'visit_id', 'observation_type', 'validated_by_id', 'validated_date', 'box_id', 'date_created', 'date_updated', 'deleted'])) {
                         $model->{$attribute} = NULL;
                     }
                 }
             }
             $model->save(false);
             if ($model->observation_type != Observations::OBSERVATION_TYPE_NULL && Observations::find()->where(['and', ['deleted' => false], ['box_id' => $model->box_id], ['observation_type' => Observations::OBSERVATION_TYPE_NULL]])->exists()) {
                 foreach (Observations::find()->where(['and', ['deleted' => false], ['observation_type' => Observations::OBSERVATION_TYPE_NULL], ['box_id' => $model->box_id]])->all() as $nullObservation) {
                     $nullObservation->delete();
                 }
             }
             return $this->redirect(Url::toRoute(['visits/detail/' . $model->visit_id]));
         }
     }
     return $this->render('form', ['model' => $model, 'boxes' => Boxes::find()->where(['project_id' => Visits::findOne($model->visit_id)->project_id])->all(), 'species' => Species::find()->asArray()->all(), 'parasites' => Species::find()->where(['taxon' => Species::TAXONOMY_ARTHROPOD])->all()]);
 }
Example #2
0
 public function rules()
 {
     return [[['code', 'cord_lat', 'cord_lng', 'province'], 'required'], [['project_id', 'boxtype_id'], 'integer'], [['placement_date', 'removal_date', 'date_created', 'date_updated', 'cluster_id', 'deleteImage'], 'safe'], [['remarks', 'placement_height'], 'string'], [['deleted'], 'boolean'], [['code', 'location'], 'string', 'max' => 45], [['cord_lat', 'cord_lng'], 'string', 'max' => 50], ['province', 'string', 'max' => 20], [['direction'], 'string', 'max' => 2], [['picture'], 'string', 'max' => 100], ['placement_height', 'trim'], ['project_id', 'required', 'when' => function () {
         return $this->isNewRecord ? true : false;
     }], ['code', function ($attribute, $params) {
         if (isset($this->project)) {
             $uniqueQuery = Boxes::find()->where(['and', ['code' => $this->{$attribute}], ['project_id' => $this->project->id]]);
             if (!$this->isNewRecord) {
                 $uniqueQuery->andWhere(['<>', 'id', $this->id]);
             }
             if ($uniqueQuery->exists()) {
                 $this->addError($attribute, Yii::t('app', 'Kastcode bestaat al binnen dit project.'));
             }
         }
     }], ['placement_date', function ($attribute, $params) {
         if ($this->placement_date >= $this->removal_date && !empty($this->removal_date)) {
             $this->addError($attribute, Yii::t('app', 'Plaatsingsdatum mag niet na de verwijderdatum liggen.'));
         }
     }], ['removal_date', function ($attribute, $params) {
         if ($this->removal_date <= $this->placement_date && !empty($this->removal_date)) {
             $this->addError($attribute, Yii::t('app', 'Verwijderdatum mag niet voor de plaatsingsdatum liggen.'));
         }
     }], ['cord_lat', function ($attribute, $params) {
         if (!WGS84::inrange(-90, $this->cord_lat, 90)) {
             $this->addError($attribute, Yii::t('app', 'Latitude coördinaat is niet valide'));
         }
     }], ['cord_lng', function ($attribute, $params) {
         if (!WGS84::inrange(-180, $this->cord_lng, 180)) {
             $this->addError($attribute, Yii::t('app', 'Longitude coördinaat is niet valide'));
         }
     }], ['project_id', function ($attribute, $params) {
         if (!Projects::find()->andWhere(['projects.id' => $this->{$attribute}])->hasRights()->exists() && $this->isNewRecord) {
             return $this->addError($attribute, Yii::t('app', 'U heeft geen toegang tot het geselecteerde project'));
         }
     }]];
 }
Example #3
0
 public function getBoxes()
 {
     return $this->hasMany(Boxes::className(), ['boxtype_id' => 'id']);
 }
Example #4
0
    } else {
        ?>
	    			<?php 
        echo $form->field($model, 'imageFile')->fileInput();
        ?>
	    		<?php 
    }
    ?>
		    	<?php 
    echo $form->field($model, 'removal_date')->widget(DatePicker::classname(), ['type' => 1, 'options' => ['placeholder' => Yii::t('app', 'Selecteer datum')], 'pluginOptions' => ['format' => 'dd-mm-yyyy', 'todayHighlight' => true, 'autoclose' => true]]);
    ?>
		    	<?php 
    echo $form->field($model, 'remarks')->widget(\yii\redactor\widgets\Redactor::className(), ['clientOptions' => ['buttons' => ['formatting', 'bold', 'italic', 'unorderedlist', 'orderedlist', 'outdent', 'indent', 'link', 'alignment', 'horizontalrule']]]);
    ?>
		    	<?php 
    echo $form->field($model, 'direction')->dropDownList(Boxes::getDirectionOptions());
    ?>
		    	<?php 
    echo $form->field($model, 'placement_height');
    ?>
		    	<?php 
    echo $form->field($model, 'cluster')->widget(Select2::className(), ['options' => ['placeholder' => Yii::t('app', 'Selecteer een cluster')], 'pluginOptions' => ['minimumInputLength' => 2, 'tags' => true, 'tokenSeparators' => [',', ' '], 'ajax' => ['url' => Url::toRoute('boxes/ajax-get-clusters'), 'dataType' => 'json', 'data' => new JsExpression('function(params) { return {q:params.term, pid:$("#boxes-project_id").val()}; }')]]]);
    ?>
	    	</div>
	        <div class="form-group">
	            <?php 
    echo Html::submitButton(Yii::t('app', 'Opslaan'), ['class' => 'btn btn-primary pull-right']);
    ?>
	        </div>
	    <?php 
    ActiveForm::end();
Example #5
0
 public function actionDelete($id)
 {
     if (!($box = Boxes::findOne($id)) == false) {
         $box->deleted = true;
         $box->save(false);
     }
     return $this->redirect(Url::toRoute('boxes/index'));
 }
Example #6
0
 public function getBox()
 {
     return $this->hasOne(Boxes::className(), ['id' => 'box_id']);
 }
Example #7
0
 public function getUserAdoptions()
 {
     return $this->hasMany(Boxes::className(), ['id' => 'adopted_by_id']);
 }
Example #8
0
 public function actionAjaxGetBoxes($q = NULL, $pid = 0, $vid = NULL)
 {
     Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
     $boxes = Boxes::find()->select(['id', 'code'])->byProject($pid)->all();
     return $boxes;
 }