ソースを参照

Priorités des développements

Gestion de la priorité des développements suivant chaque établissement. Chaque producteur peut définir une priorité (basse, normale, haute) pour chaque développement.
master
keun 7年前
コミット
68e9bb11a2
9個のファイルの変更199行の追加19行の削除
  1. +36
    -2
      backend/controllers/DeveloppementController.php
  2. +57
    -12
      backend/views/developpement/index.php
  3. バイナリ
      backend/web/.sass-cache/c8fef7d48da4dc7f024edc2b0fada9d8d6de5dac/screen.scssc
  4. +19
    -0
      backend/web/css/screen.css
  5. +22
    -0
      backend/web/sass/screen.scss
  6. +9
    -0
      common/models/Developpement.php
  7. +38
    -4
      common/models/DeveloppementPriorite.php
  8. +1
    -1
      console/migrations/m171226_200642_tables_developpement.php
  9. +17
    -0
      console/migrations/m171227_090138_champs_priorite_developpement.php

+ 36
- 2
backend/controllers/DeveloppementController.php ファイルの表示

@@ -5,6 +5,7 @@ namespace backend\controllers;
use Yii;
use common\models\User;
use common\models\Developpement;
use common\models\DeveloppementPriorite;
use yii\data\ActiveDataProvider;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
@@ -44,7 +45,7 @@ class DeveloppementController extends Controller {
*/
public function actionIndex() {
$dataProvider = new ActiveDataProvider([
'query' => Developpement::find(),
'query' => Developpement::find()->with(['developpementPriorite','developpementPrioriteCurrentEtablissement']),
]);

return $this->render('index', [
@@ -109,6 +110,39 @@ class DeveloppementController extends Controller {
return $this->redirect(['index']);
}

public function actionPriorite($id_developpement, $priorite = null) {
$developpement_priorite = DeveloppementPriorite::find()
->where(['id_developpement' => $id_developpement, 'id_etablissement' => Yii::$app->user->identity->id_etablissement])
->one() ;
if(in_array($priorite,
[DeveloppementPriorite::PRIORITE_HAUTE,
DeveloppementPriorite::PRIORITE_NORMALE,
DeveloppementPriorite::PRIORITE_BASSE])) {
if($developpement_priorite) {
$developpement_priorite->priorite = $priorite ;
$developpement_priorite->id_etablissement = Yii::$app->user->identity->id_etablissement ;
}
else {
$developpement_priorite = new DeveloppementPriorite ;
$developpement_priorite->id_developpement = $id_developpement ;
$developpement_priorite->priorite = $priorite ;
$developpement_priorite->id_etablissement = Yii::$app->user->identity->id_etablissement ;
}
$developpement_priorite->save() ;
}
else {
if($developpement_priorite) {
$developpement_priorite->delete() ;
}
}
$this->redirect(['index']) ;
}
/**
* Finds the Developpement model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
@@ -123,5 +157,5 @@ class DeveloppementController extends Controller {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
}

+ 57
- 12
backend/views/developpement/index.php ファイルの表示

@@ -3,6 +3,7 @@
use yii\helpers\Html;
use yii\grid\GridView;
use common\models\Developpement;
use common\models\DeveloppementPriorite;
use common\models\User;

/* @var $this yii\web\View */
@@ -24,7 +25,12 @@ $this->params['breadcrumbs'][] = $this->title;
<?php
$columns = [
['class' => 'yii\grid\SerialColumn'],
[
'header' => '#',
'value' => function($model) {
return '#'.$model->id ;
}
],
[
'attribute' => 'type',
'header' => 'Type',
@@ -73,24 +79,62 @@ $this->params['breadcrumbs'][] = $this->title;
return '' ;
}],
] ;
if(Yii::$app->user->identity->status == USER::STATUS_ADMIN
|| Yii::$app->user->identity->status == USER::STATUS_BOULANGER) {
$columns[] = [
'header' => 'Priorité',
'format' => 'raw',
'value' => function($model) {

$current_priorite = (isset($model->developpementPrioriteCurrentEtablissement)) ? $model->developpementPrioriteCurrentEtablissement->getStrPriorite() : 'Non' ;
$style_bouton = (isset($model->developpementPrioriteCurrentEtablissement)) ? $model->developpementPrioriteCurrentEtablissement->getClassCssStyleBouton() : 'default' ;
$html = '<div class="btn-group btn-group-priorite">
<button type="button" class="btn btn-priorite btn-sm btn-'.$style_bouton.' dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
'.$current_priorite.' <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/priorite','id_developpement'=>$model->id]).'">Non</a></li>
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/priorite','id_developpement'=>$model->id, 'priorite' => DeveloppementPriorite::PRIORITE_BASSE]).'">Basse</a></li>
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/priorite','id_developpement'=>$model->id, 'priorite' => DeveloppementPriorite::PRIORITE_NORMALE]).'">Normale</a></li>
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/priorite','id_developpement'=>$model->id, 'priorite' => DeveloppementPriorite::PRIORITE_HAUTE]).'">Haute</a></li>
</ul>
</div><br />' ;
if(isset($model->developpementPriorite) && count($model->developpementPriorite)) {
foreach($model->developpementPriorite as $developpement_priorite) {
if($developpement_priorite->id_etablissement != Yii::$app->user->identity->id_etablissement)
$html .= '<div class="label label-priorite label-sm label-'.$developpement_priorite->getClassCssStyleBouton().'">'.Html::encode($developpement_priorite->etablissement->nom).'</div> ' ;
}
}
return $html ;
}
] ;
}
if(Yii::$app->user->identity->status == USER::STATUS_ADMIN) {
if(Yii::$app->user->identity->status == USER::STATUS_ADMIN) {
$columns[] = [
'class' => 'yii\grid\ActionColumn',
'template' => '{update} {delete}',
'template' => '{update}',
'headerOptions' => ['class' => 'actions'],
'buttons' => [
'update' => function ($url, $model) {
return Html::a('<span class="glyphicon glyphicon-pencil"></span> Modifier', $url, [
'title' => Yii::t('app', 'Modifier'), 'class' => 'btn btn-default'
]);
return '<div class="btn-group">
<a href="'.$url.'" class="btn btn-default"><span class="glyphicon glyphicon-pencil"></span> Modifier</a>
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/delete','id' => $model->id]).'" class=""><span class="glyphicon glyphicon-trash"></span> Supprimer</a></li>
</ul>
</div>' ;
},
'delete' => function ($url, $model) {
return Html::a('<span class="glyphicon glyphicon-trash"></span> Suprimer', $url, [
'title' => Yii::t('app', 'Supprimer'), 'class' => 'btn btn-default'
]);
}
],
] ;
}
@@ -99,6 +143,7 @@ $this->params['breadcrumbs'][] = $this->title;
<?=
GridView::widget([
'id' => 'tab-developpements',
'dataProvider' => $dataProvider,
'columns' => $columns
]);

バイナリ
backend/web/.sass-cache/c8fef7d48da4dc7f024edc2b0fada9d8d6de5dac/screen.scssc ファイルの表示


+ 19
- 0
backend/web/css/screen.css ファイルの表示

@@ -1212,3 +1212,22 @@ a:hover, a:focus, a:active {
padding: 10px;
text-align: center;
}

/* line 1230, ../sass/screen.scss */
.developpement-index #tab-developpements .btn-group-priorite {
width: 100%;
margin-bottom: 5px;
}
/* line 1234, ../sass/screen.scss */
.developpement-index #tab-developpements .btn-group-priorite .btn-priorite {
display: block;
float: none;
width: 100%;
}
/* line 1241, ../sass/screen.scss */
.developpement-index #tab-developpements .label-priorite {
display: block;
width: 100%;
margin-bottom: 2px;
padding: 5px 8px;
}

+ 22
- 0
backend/web/sass/screen.scss ファイルの表示

@@ -1223,4 +1223,26 @@ a {
padding: 10px ;
text-align: center ;
}
}

.developpement-index {
#tab-developpements {
.btn-group-priorite {
width: 100% ;
margin-bottom: 5px ;

.btn-priorite {
display: block ;
float: none ;
width: 100% ;
}
}
.label-priorite {
display: block ;
width: 100% ;
margin-bottom: 2px ;
padding: 5px 8px ;
}
}
}

+ 9
- 0
common/models/Developpement.php ファイルの表示

@@ -3,6 +3,7 @@
namespace common\models;

use Yii;
use common\models\DeveloppementPriorite ;

/**
* This is the model class for table "developpement".
@@ -43,6 +44,14 @@ class Developpement extends \yii\db\ActiveRecord {
[['objet', 'statut','type'], 'string', 'max' => 255],
];
}
public function getDeveloppementPriorite() {
return $this->hasMany(DeveloppementPriorite::className(), ['id_developpement' => 'id'])->with('etablissement') ;
}
public function getDeveloppementPrioriteCurrentEtablissement() {
return $this->hasOne(DeveloppementPriorite::className(), ['id_developpement' => 'id'])->where(['id_etablissement'=>Yii::$app->user->identity->id_etablissement])->with('etablissement') ;
}

/**
* @inheritdoc

+ 38
- 4
common/models/DeveloppementPriorite.php ファイルの表示

@@ -3,6 +3,7 @@
namespace common\models;

use Yii;
use common\models\Etablissement ;

/**
* This is the model class for table "developpement_priorite".
@@ -12,6 +13,10 @@ use Yii;
*/
class DeveloppementPriorite extends \yii\db\ActiveRecord {

const PRIORITE_HAUTE = 'haute' ;
const PRIORITE_NORMALE = 'normale' ;
const PRIORITE_BASSE = 'basse' ;
/**
* @inheritdoc
*/
@@ -24,19 +29,48 @@ class DeveloppementPriorite extends \yii\db\ActiveRecord {
*/
public function rules() {
return [
[['id_user', 'id_developpement'], 'required'],
[['id_user', 'id_developpement'], 'integer'],
[['id_etablissement', 'id_developpement'], 'required'],
[['id_etablissement', 'id_developpement'], 'integer'],
[['priorite'], 'string'],
];
}
public function getEtablissement() {
return $this->hasOne(Etablissement::className(), ['id' => 'id_etablissement']) ;
}

/**
* @inheritdoc
*/
public function attributeLabels() {
return [
'id_user' => 'Id User',
'id_developpement' => 'Id Developpement',
'id_etablissement' => 'Établissement',
'id_developpement' => 'Développement',
'priorite' => 'Priorité'
];
}
public function getStrPriorite()
{
switch($this->priorite)
{
case self::PRIORITE_BASSE : return 'Basse' ; break ;
case self::PRIORITE_NORMALE : return 'Normale' ; break ;
case self::PRIORITE_HAUTE : return 'Haute' ; break ;
default: return 'Non définie' ; break ;
}
}
public function getClassCssStyleBouton() {
$style_bouton = 'default' ;
if($this->priorite == DeveloppementPriorite::PRIORITE_BASSE)
$style_bouton = 'info' ;
elseif($this->priorite == DeveloppementPriorite::PRIORITE_NORMALE)
$style_bouton = 'warning' ;
elseif($this->priorite == DeveloppementPriorite::PRIORITE_HAUTE)
$style_bouton = 'danger' ;
return $style_bouton ;
}

}

+ 1
- 1
console/migrations/m171226_200642_tables_developpement.php ファイルの表示

@@ -19,7 +19,7 @@ class m171226_200642_tables_developpement extends Migration {
]);

$this->createTable('developpement_priorite', [
'id_user' => Schema::TYPE_INTEGER . ' NOT NULL',
'id_etablissement' => Schema::TYPE_INTEGER . ' NOT NULL',
'id_developpement' => Schema::TYPE_INTEGER . ' NOT NULL',
'PRIMARY KEY (`id_user`, `id_developpement`)'
]);

+ 17
- 0
console/migrations/m171227_090138_champs_priorite_developpement.php ファイルの表示

@@ -0,0 +1,17 @@
<?php

use yii\db\Migration;
use yii\db\Schema;
use common\models\DeveloppementPriorite ;

class m171227_090138_champs_priorite_developpement extends Migration {

public function up() {
$this->addColumn('developpement_priorite','priorite',Schema::TYPE_STRING.' DEFAULT \''.DeveloppementPriorite::PRIORITE_NORMALE.'\'');
}

public function down() {
$this->dropColumn('developpement_priorite','priorite');
}
}

読み込み中…
キャンセル
保存