hasOne(Product::className(), ['id' => 'id_product']); } public function getDistribution() { return $this->hasOne(Distribution::className(), ['id' => 'id_distribution']); } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'id_distribution' => 'Distribution', 'id_product' => 'Produit', 'active' => 'Actif', 'quantity_max' => 'Quantité max', ]; } /** * Retourne les options de base nécessaires à la fonction de recherche. * * @return array */ public static function defaultOptionsSearch() { return [ 'with' => ['product','distribution'], 'join_with' => [], 'orderby' => '', 'attribute_id_producer' => '' ] ; } /** * Recherche les enregistrement ProductionProduit liés à une production. * * @param integer $idDistribution * @return array */ public static function searchByDistribution($idDistribution) { $arrayProductsDistribution = ProductDistribution::searchAll([ 'id_distribution' => $idDistribution ]) ; $orders = Order::searchAll([ 'distribution.id' => $idDistribution ]) ; foreach ($arrayProductsDistribution as $productDistribution) { if (isset($productDistribution->product)) { $arrayProductsDistribution[$productDistribution->id_product] = [ 'active' => (int) $productDistribution->active, 'unavailable' => (int) $productDistribution->product->unavailable, 'quantity_max' => $productDistribution->quantity_max, 'quantity_order' => Order::getProductQuantity($productDistribution->id_product, $orders), 'quantity_remaining' => $productDistribution->quantity_max - Order::getProductQuantity($productDistribution->id_product, $orders) ]; } } return $arrayProductsDistribution; } }