Parcourir la source

[backend] Distributions : optimisation chargement des commandes

Chargement ajax à la demande des points de vente favoris des utilisateurs au lieu de tout charger en une seule fois.
dev
Guillaume Bourgeois il y a 5 ans
Parent
révision
e4694e9a85
3 fichiers modifiés avec 24 ajouts et 10 suppressions
  1. +16
    -7
      backend/controllers/DistributionController.php
  2. +1
    -1
      backend/views/distribution/index.php
  3. +7
    -2
      backend/web/js/vuejs/distribution-index.js

+ 16
- 7
backend/controllers/DistributionController.php Voir le fichier

@@ -291,13 +291,6 @@ class DistributionController extends BackendController
// utilisateurs
$usersArray = User::findBy()->all() ;
foreach($usersArray as &$user) {
$userObject = User::findOne(['id' => $user['user_id']]) ;
$favoritePointSale = $userObject->getFavoritePointSale() ;
if($favoritePointSale) {
$user['id_point_sale_favorite'] = $favoritePointSale->id ;
}
}
$json['users'] = $usersArray ;
@@ -339,6 +332,22 @@ class DistributionController extends BackendController
return $json ;
}
public function actionAjaxPointSaleFavorite($idUser)
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$user = User::findOne(['id' => $idUser]) ;
$favoritePointSale = $user->getFavoritePointSale() ;
$idFavoritePointSale = 0 ;
if($favoritePointSale) {
$idFavoritePointSale = $favoritePointSale->id ;
}
return [
'id_favorite_point_sale' => $idFavoritePointSale
] ;
}
/**
* Génére un PDF récapitulatif des des commandes d'un producteur pour une
* date donnée (Méthode appelable via CRON)

+ 1
- 1
backend/views/distribution/index.php Voir le fichier

@@ -462,7 +462,7 @@ $this->setPageTitle('Distributions') ;
</label>
<select class="form-control" v-model="order.id_user">
<option value="0">--</option>
<option v-for="user in users" :value="user.id_user" @click="userChange" :data-id-point-sale-favorite="user.id_point_sale_favorite">{{ user.lastname +' '+ user.name }}</option>
<option v-for="user in users" :value="user.id_user" @click="userChange">{{ user.lastname +' '+ user.name }}</option>
</select>
<input v-model="order.username" type="text" class="form-control" placeholder="Ou saisissez ici le nom de l'utilisateur" />
</div>

+ 7
- 2
backend/web/js/vuejs/distribution-index.js Voir le fichier

@@ -514,8 +514,13 @@ Vue.component('order-form',{
}
},
userChange: function(event) {
var idPointSaleFavorite = event.currentTarget.getAttribute('data-id-point-sale-favorite') ;
this.order.id_point_sale = idPointSaleFavorite ;
var app = this ;
axios.get(UrlManager.getBaseUrlAbsolute()+"distribution/ajax-point-sale-favorite",{params: {
idUser: app.order.id_user,
}})
.then(function(response) {
app.order.id_point_sale = response.data.id_favorite_point_sale ;
}) ;
}
}
}) ;

Chargement…
Annuler
Enregistrer