I have a toggle dropdown
7124
7125
I have three tables building_tariff, inspector and inspector_category.
How do I split the value (varchar in the table) in the toggle popup which is separated by comma(,)
7128
and relate each of the values in tariff_code to tariff_id and save its id into inspector_category table
7129
building_tariff
7126
7127
model
<?php
namespace app\modules\consumers\models;
use Yii;
use app\modules\consumers\models\BuildingTariff;
class BuildingTariff extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'building_tariff';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['cat_id', 'tariff_code', 'tariff_desc'], 'required', 'message' => ''],
[['cat_id'], 'integer'],
[['tariff_code'], 'unique'],
[['tariff_code'], 'string', 'max' => 5],
[['tariff_desc'], 'string', 'max' => 100],
[['cat_id', 'tariff_desc'], 'unique', 'targetAttribute' => ['cat_id', 'tariff_desc'], 'message' => Yii::t('consumers', 'The combination of Customer Classificaton and Description has already been taken.')]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'tariff_id' => Yii::t('consumers', 'Tariff'),
'cat_id' => Yii::t('consumers', 'Tariff Class'),
'tariff_code' => Yii::t('consumers', 'Classification Code'),
'tariff_desc' => Yii::t('consumers', 'Description'),
'tariff_group' => Yii::t('consumers', 'Group'),
'tariff_group_detail' => Yii::t('consumers', 'Group Detail'),
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getTariffCategory()
{
return $this->hasOne(BuildingCategory::className(), ['cat_id' => 'cat_id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getCategory()
{
return $this->hasOne(BuildingCategory::className(), ['cat_id' => 'cat_id']);
}
public static function getBuildingTariffs()
{
$dataTmp = BuildingTariff::find()->orderBy('tariff_name')->all();
$result = yii\helpers\ArrayHelper::map($dataTmp, 'tariff_id', 'tariff_name');
return $result;
}
}
Inspector
model
<?php
namespace app\modules\contractors\models;
use Yii;
use app\modules\contractors\models\Inspector;
use app\models\User;
use yii\base\Exception;
use app\models\City;
use app\models\State;
use app\models\Zone;
use app\modules\consumers\models\BuildingTariff;
class Inspector extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public $email_confirm, $importFile;
const TYPE_YES = 'Yes';
const TYPE_NO = 'No';
public static function tableName()
{
return 'inspector';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['inspector_name','is_valid', 'city_id','state_id','zone_id', 'location_long', 'address', 'cac_number', 'email', 'phone_num', 'location_lat', 'created_at', 'created_by'], 'required', 'message' => ''],
[['email'],'email', 'message'=>"The email isn't correct"],
['email','filter', 'filter' => 'trim'],
['inspector_name', 'unique'],
// [['email_confirm'],'required', 'on'=>'register'],
[['city_id','state_id','zone_id','created_by', 'updated_by'], 'integer', 'message' => ''],
[['laptop_num', 'pc_num', 'printer_num', 'phone_num', 'staff_yoe1','staff_yoe2','staff_yoe3', 'is_certified','nerc_staff'], 'integer', 'message' => ''],
[['staff_name3','staff_name2','staff_name1','electrical_equipment_name', 'electrical_software_name', 'address'], 'string'],
[['inspector_name','cac_number','inspector_category'], 'string', 'max' => 254],
[['email'], 'string', 'max' => 254],
// ['email', 'compare', 'compareAttribute'=>'email_confirm','message'=>'Email mismatch. Please confirm...', 'on' => 'register'],
[['email'], 'email'],
[['importFile'], 'file', 'extensions' => 'xlsx, csv', 'skipOnEmpty' => false, 'checkExtensionByMimeType'=>false, 'uploadRequired' => Yii::t('contractors', 'Please select file'), 'on' => 'import-inspector'],
//['confirm_password', 'compare','compareAttribute'=>'create_password', 'on'=>'firstTime'],
];
}
//'contractor_unique_id',
// 'electrical_equipment_name', 'electrical_software_name', 'laptop_num', 'pc_num', 'printer_num',
//'staff_name1', 'staff_yoe1', 'staff_nerc_no1','staff_name2', 'staff_yoe2', 'staff_nerc_no2','staff_name3', 'staff_yoe3', 'staff_nerc_no3',
/**
* @inheritdoc
*/
/*
* get Import file path
*/
public function getImportFilePath()
{
return Yii::getAlias('@webroot').'/data/import_files/contractor_files/';
}
/*
* save import file
*/
public function saveImportFile()
{
if ($this->validate(['importFile'])) {
$newName = $this->importFile->basename.'_'.\Yii::$app->session->get('clg_id').'_'.\Yii::$app->user->id.'_'.time().'.'.$this->importFile->extension;
//print_r($this->getImportFilePath()); exit;
$returnResults = $this->importFile->saveAs($this->getImportFilePath().$this->importFile = $newName);
if($returnResults) {
return true;
}
}
return false;
}
public function attributeLabels()
{
return [
'inspector_name' => Yii::t('contractors', 'Inspector Name'),
'company_id' => Yii::t('contractors', 'Company'),
'contractor_unique_id' => Yii::t('contractors', 'Contractor Unique ID'),
'is_valid' => Yii::t('contractors', 'Is Valid'),
'nerc_staff' => Yii::t('contractors', 'Quantity of NERC Staff (1, 2, 3, ...etc)'),
'location_long' => Yii::t('contractors', 'Longitude'),
'location_lat' => Yii::t('contractors', 'Lattitude'),
'address' => Yii::t('contractors', 'Address'),
'city_id' => Yii::t('consumers', 'City'),
'state_id' => Yii::t('consumers', 'State'),
'zone_id' => Yii::t('consumers', 'Inspection Zones Address'),
'inspector_category' => Yii::t('consumers', 'Tariff Class'),
'cac_number' => Yii::t('contractors', 'Cac Number'),
'email' => Yii::t('contractors', 'Email'),
'electrical_equipment_name' => Yii::t('contractors', 'Electrical Diagnostic Computer Hardware'),
'electrical_software_name' => Yii::t('contractors', 'Electrical Diagnostic Computer Software'),
'laptop_num' => Yii::t('contractors', 'Number of Laptop'),
'pc_num' => Yii::t('contractors', 'Number of Desktop Computer'),
'printer_num' => Yii::t('contractors', 'Number of Printer'),
'phone_num' => Yii::t('contractors', 'Phone Number'),
// 'email_confirm' => Yii::t('contractors', 'Confirm Email'),
'staff_name1' => Yii::t('contractors', 'Nerc Certfied Staff Name 1'),
'staff_name2' => Yii::t('contractors', 'Nerc Certfied Staff Name 2'),
'staff_name3' => Yii::t('contractors', 'Nerc Certfied Staff Name 3'),
'staff_yoe1' => Yii::t('contractors', 'Nerc Certfied staff Yr of Exp 1'),
'staff_yoe2' => Yii::t('contractors', 'Nerc Certfied staff Yr of Exp 2'),
'staff_yoe3' => Yii::t('contractors', 'Nerc Certfied staff Yr of Exp 3'),
'staff_nerc_no1' => Yii::t('contractors', 'Nerc Certfied staff Number 1'),
'staff_nerc_no2' => Yii::t('contractors', 'Nerc Certfied staff Number 2'),
'staff_nerc_no3' => Yii::t('contractors', 'Nerc Certfied staff Number 3'),
'is_certified' => Yii::t('contractors', 'Is Certified'),
'contractor_user_id' => Yii::t('contractors', 'contractor Manager User ID'),
'created_at' => Yii::t('contractors', 'Created At'),
'created_by' => Yii::t('contractors', 'Created By'),
'updated_at' => Yii::t('contractors', 'Updated At'),
'updated_by' => Yii::t('contractors', 'Updated By'),
];
}
function getName()
{
return $this->inspector_name;
}
function getContractorNo()
{
return $this->contractor_unique_id;
}
public function getCity() {
return $this->hasOne(City::className(), ['city_id' => 'city_id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getState()
{
return $this->hasOne(State::className(), ['state_id' => 'state_id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getZone()
{
return $this->hasOne(Zone::className(), ['zone_id' => 'zone_id']);
}
/*
* get unique id of contractor/inspector
*/
public function getUniqueId()
{
$contractor_uniq_no = \app\modules\contractors\models\Inspector::find()->max('contractor_unique_id');
$uniq_id = NULL;
if(empty($contractor_uniq_no)) {
$uniq_id = $model->contractor_unique_id = 1;
}
else {
$chk_id = Inspector::find()->where(['contractor_unique_id' => $contractor_uniq_no])->exists();
if($chk_id)
$uniq_id = $contractor_uniq_no + 1;
else
$uniq_id = $contractor_uniq_no;
}
return $uniq_id;
}
public static function getContractorPhoto($imgName)
{
$dispImg = is_file(Yii::getAlias('@webroot').'/data/contractor_images/'.$imgName) ? true :false;
return Yii::getAlias('@web')."/data/contractor_images/".(($dispImg) ? $imgName : "no-photo.png");
}
/**
* @return \yii\db\ActiveQuery
*/
public function getUpdatedBy()
{
return $this->hasOne(User::className(), ['user_id' => 'updated_by']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getCreatedBy()
{
return $this->hasOne(User::className(), ['user_id' => 'created_by']);
}
public function getContractorpMaster()
{
return $this->hasOne(EmpMaster::className(), ['emp_master_id' => 'emp_info_emp_master_id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getContractorUser()
{
return $this->hasOne(\app\models\User::className(), ['user_id' => 'contractor_user_id']);
}
public static function getValidStatus()
{
return [
Yii::t('contractors', self::TYPE_YES) => Yii::t('contractors', 'Yes'),
Yii::t('contractors', self::TYPE_NO) => Yii::t('contractors', 'No'),
];
}
/*
public function getInspectorClassification()
{
return $this->hasMany(InspectorClassificationRating::className(), ['cat_id' => 'cat_id']);
}
*/
}
view
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use yii\jui\DatePicker;
use yii\helpers\Url;
use kartik\widgets\Select2;
use app\models\City;
use app\models\State;
use app\models\Zone;
use app\modules\contractors\models\Inspector;
use app\modules\consumers\models\BuildingTariff;
use app\modules\consumers\models\InspectorCategory;
use kartik\typehead\TypeaheadBasic;
//use kartik\widgets\DepDrop;
use kartik\depdrop\DepDrop;
?>
<style>
.box .box-solid {
background-color: #F8F8F8;
}
</style>
<script>
$(function () {
$('[data-toggle="popover"]').popover({placement: function() { return $(window).width() < 768 ? 'bottom' : 'right'; }})
})
</script>
<!--
-->
<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="inspector-form">
<?php $form = ActiveForm::begin([
'id' => 'inspector-form',
'fieldConfig' => [
'template' => "{label}{input}{error}",
],
]); ?>
<div class="col-xs-12 col-sm-12 col-lg-12 no-padding">
<div class="col-xs-12 col-sm-6 col-lg-6">
<?= $form->field($model, 'inspector_name')->textInput(['maxlength' => true]) ?>
</div>
<div class="col-xs-12 col-sm-6 col-lg-6">
<?php $data = ArrayHelper::map(BuildingTariff::find()->asArray()->all(), 'tariff_code', 'tariff_code');
foreach($data as $d)
$tariffcode[]=$d;
echo $form->field($model, 'inspector_category')->widget(Select2::classname(),[
'name' => 'inspector_category[]',
'options' => ['placeholder' => ''],
'pluginOptions' => [
'tags' => $tariffcode,
'maximumInputLength' => 20,
'multiple' => true
],
]);
?>
</div>