mapping

I am new to Yii2. Am working on Electrical Inspection Project for Building.

I have these tables:

building, inspector, inspection, zone

CREATE TABLE building

(

building_id int not null auto_increment primary key,

category varchar(50) not null,

building_name varchar(100) not null,

zone_id int not null

);

CREATE TABLE inspector

(

inspector_id int not null auto_increment primary key,

category varchar(50) not null,

inspector_name varchar(100) not null,

zone_id int not null

);

CREATE TABLE inspection

(

inspection_id int not null auto_increment primary key,

inspector_id int not null,

building_id int not null,

inspection_booking_date date not null,

inspection_date date not null

);

CREATE TABLE zone

(

zone_id int not null auto_increment primary key,

zone_name varchar(100) not null

);

The buildings are categorized and also belong to respective zones.

I want to:

  1. Select at random 33.3% of the Building List in year one and compartmentalize the

aggregate buildings for use in the first three years

  1. The Select List shall be mapped to Inspectors of the same category in the same zone

  2. The Select Buildings to be mapped to respective Zones.

Please how do I perform this logic

What code do you have so far? What do you struggle with?

Please note that in this forum we are happy to help you with Yii-related issues. It’s not our job to translate business requirements into code. That’s your job.

See my Code so far

Zone:

view




<?php


use yii\helpers\Html;

use yii\widgets\ActiveForm;

use yii\bootstrap\Modal;

?>

    <?php

    if($this->context->action->id == 'update')

        $action = ['update', 'id'=>$_REQUEST['id']];

    else

        $action = ['create'];

        ?>




<div class="col-xs-12 col-lg-12">

  <div class="<?php echo $model->isNewRecord ? 'box-success' : 'box-info'; ?> box view-item col-xs-12 col-lg-12">

    <div class="zone-form">


    <?php $form = ActiveForm::begin([

            'id' => 'zone-form',

            'action' => $action,

            'enableAjaxValidation' => true,

            

    ]); ?>


        <?= $form->field($model, 'zone_name', ['inputOptions'=>[ 'class'=>'form-control', 'placeholder' => Yii::t('app', 'Inspection Zone')] ] )->textInput(['maxlength' => 50])->label(false); ?>


     <div class="form-group col-xs-12 col-sm-6 col-lg-4 no-padding">

    <div class="col-xs-6">

        <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord  ? 'btn btn-block btn-success' : 'btn btn-block btn-info']) ?>

    </div>

    <div class="col-xs-6">

    <?= Html::resetButton(Yii::t('app', 'Reset'), ['class' => 'btn btn-default btn-block']) ?>

    </div>

     </div>


    <?php ActiveForm::end(); ?>

    </div>

  </div>

</div>




Inspection

Model




<?php


namespace app\modules\inspection\models;


use Yii;

use app\modules\inspection\models\Inspection;

use app\modules\inspection\models\InspectionSearch;

use app\modules\consumers\models\Building;

use app\modules\contractors\models\Inspector;

use app\modules\User;


/**

 * This is the model class for table "inspector".

 *

 * @property string $inspector_name

 * @property integer $company_id

 * @property integer $is_valid

 * @property string $location_long

 * @property string $location_lat

 * @property string $address

 * @property integer $cac_number

 * @property string $email

 * @property string $electrical_equipment_name

 * @property string $electrical_software_name

 * @property integer $laptop_num

 * @property integer $pc_num

 * @property integer $printer_num

 * @property string $phone_num

 * @property string $nerc_staff_num

 * @property string $years_of_experience

 * @property string $nerc_staff_name

 * @property integer $is_certified

 */

class Inspection extends \yii\db\ActiveRecord

{

    /**

     * @inheritdoc

     */

    public static function tableName()

    {

        return 'inspection_sheet';

    }


    /**

     * @inheritdoc

     */

    public function rules()

    {

        return [

            [['name', 'building_id', 'inspector_id', 'date_inspected', 'compliance_score'], 'required'],

            [['building_id', 'inspector_id'], 'integer'],

            [['name'], 'string'],

            [['inspection_comment'], 'string'],

            [['name'], 'string', 'max' => 254]

            

        ];

    }


    /**

     * @inheritdoc

     */

    public function attributeLabels()

    {

        return [

            'name' => 'Inspection Sheet Name',

            'building_id' => 'Building',

            'inspector_id' => 'Inspector',

            'compliance_score' => 'Score',

            'inspection_comment' => 'Inspection Comment',

            'date_inspected' => 'Date Inspected',

        ];

    }


    public static function getBuildingInspectionCategory($bid)

    {

    $buildingIcc = self::find()->andWhere(['is_status'=>0, 'building_id'=>$bid]);

    return $buildingIcc;

    }


    public function getInspectionInspector()

    {

        return $this->hasOne(Inspector::className(), ['company_id' => 'inspector_id']);

    }


    public function getInspectionBuilding()

    {

        return $this->hasOne(Building::className(), ['building_id' => 'building_id']);

    }


    public static function getInspectionView($inspector=-1,$appraisal=-1)

    {

        $conection=Yii::$app()->db;

        

    }

    public static function getRatingScale()

    {

        $conection=Yii::$app()->db;

        $sql="select * from inspection_rating_scale";

        $command=$conection->createCommand($sql);

        $vapp=$command->queryAll();

        return new ArrayDataProvider($vapp);

    }  


    public static function getAppraisalView()      

    {


    }


    public static function getOverallRatingAverage()

    {


    }    

}



View




<?php


use yii\helpers\Html;

use yii\grid\GridView;

use yii\helpers\ArrayHelper;

use yii\widgets\Pjax;


/* @var $this yii\web\View */

/* @var $searchModel app\models\InspectorSearch */

/* @var $dataProvider yii\data\ActiveDataProvider */


$this->title = 'Inspections';

$this->params['breadcrumbs'][] = $this->title;


$this->title = Yii::t('inspection', 'Manage Inspection Sheet');

$this->params['breadcrumbs'][] = ['label' => Yii::t('inspection', 'Inspection & Monitoring'), 'url' => ['default/index']];

$this->params['breadcrumbs'][] = $this->title;

?>


<?php

if(Yii::$app->session->hasFlash('green-0') || Yii::$app->session->hasFlash('red-0')) :

?>

<div class="col-xs-12">

  <div class="alert alert-dismissible" style="background-color: #FFFFFF;border-color: #00c0ef;">

    <button type="button" class="close" data-dismiss="alert" aria-label="Close">

    <span aria-hidden="true">&times;</span></button>

    <?php

        foreach (Yii::$app->session->getAllFlashes() as $key => $message) {

             echo '<p class="text-'.preg_split('/[\s,-]+/', $key)[0].'" style="padding-bottom:10px">'.$message.'</p>';

        }

    ?>

  </div>

</div>

<?php

endif;

?>


<div class="col-xs-12">

  <div class="col-lg-8 col-sm-8 col-xs-12 no-padding"><h3 class="box-title"><i class="fa fa-th-list"></i> <?= $this->title ?></h3></div>

  <div class="col-lg-4 col-sm-4 col-xs-12 no-padding" style="padding-top: 20px !important;">

    <div class="col-xs-4 left-padding">

        <?= Html::a(Yii::t('inspection', 'CREATE SHEET'), ['inspection0step'], ['class' => 'btn btn-block btn-success']) ?>

    </div>

    <div class="col-xs-4 left-padding">

    <?= Html::a(Yii::t('inspection', 'PDF'), ['/export-data/export-to-pdf', 'model'=>get_class($searchModel)], ['class' => 'btn btn-block btn-warning', 'target'=>'_blank']) ?>

    </div>

    <div class="col-xs-4 left-padding">

    <?= Html::a(Yii::t('inspection', 'EXCEL'), ['/export-data/export-excel', 'model'=>get_class($searchModel)], ['class' => 'btn btn-block btn-primary', 'target'=>'_blank']) ?>

    </div>

  </div>

</div>


<div class="col-xs-12" style="padding-top: 10px;">

   <div class="box">

      <div class="box-body table-responsive">

<div class="inspector-sheet-index">


    <?php $visible = Yii::$app->user->can("/inspection/inspection/view") ? true : false; ?>

    <?php Pjax::begin([ 'enablePushState' => false ]); ?>


    <?= GridView::widget([

        'dataProvider' => $dataProvider,

        'filterModel' => $searchModel,

        'summary'=>'',

        'columns' => [

            ['class' => 'yii\grid\SerialColumn'],


            [

                  'label' => Yii::t('app','Building'),

                  'attribute' => 'building_id',

                  'value' => 'inspectionBuilding.building_name',

                  'filter' => ArrayHelper::map(app\modules\consumers\models\Building::find()->all(), 'building_id', 'building_name')

            ],


            [

                  'label' => Yii::t('app','Inspector'),

                  'attribute' => 'inspector_id',

                  'value' => 'inspectionInspector.inspector_name',

                  'filter' => ArrayHelper::map(app\modules\contractors\models\Inspector::find()->all(), 'company_id', 'inspector_name')

            ],


            [

            'attribute' => 'date_inspected',

            'value' => function ($model) {

                    return Yii::$app->formatter->asDate($model->date_inspected);

                   },

            'filter' => \yii\jui\DatePicker::widget([

                    'model'=>$searchModel,

                    'attribute'=>'date_inspected',

                    'clientOptions' =>[

                        'dateFormat' => 'dd-mm-yyyy',

                        'changeMonth'=> true,

                        'changeYear'=> true,

                'defaultValue'=>null,

                'yearRange'=>'1900:'.(date('Y')+1),

                'defaultDate'=> null,],

                 'options'=>[

                'class' => 'form-control',

                        'value' => NULL,

                      ],

                ]),

            'format' => 'html', 

            ],            


            'compliance_score',




            [

            'class' => 'app\components\CustomActionColumn',

            'template' => '{view}',

            'buttons' => [

                'view' => function ($url, $model) {

                        return ((Yii::$app->user->can("")) ? Html::a('<span class="glyphicon glyphicon-search"></span>', $url, ['title' => Yii::t('inspection', 'View'),]) : '');

                        //      /inspection/inspection/view

                    }

            ],

            'visible' => $visible,

            ],


        ],

    ]); 


  Pjax::end(); ?>

    </div>

      </div>

    </div>

</div>




And what part exactly do you have problems with?

The problem is in the Inspection (model, view, controller).

I’ve done everything relating to zone, building and inspector.

As I stated earlier

As stated earlier:

Thus, what code have you written for 1., 2. and 3. respectively so far?

For step 1 (Select at random 33.3% of the Building List in year one and compartmentalize the

aggregate buildings for use in the first three years), I tried to add this to the inspection model. I dont know if am correct.




$query = new Query;

$query->select(['b.building_id as buildingid', 'b.building_name'])

    ->from('building b')

    ->orderBy(new Expression('rand()'))

    ->limit(0,33);

   $command = $query->createCommand();

   return $command->queryAll();




For step 2 (The Select List shall be mapped to Inspectors of the same category in the same zone)

and step 3 (The Select Buildings to be mapped to respective Zones), I dont even know what to do. Please just give me a guide.