Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

752 linhas
28KB

  1. <?php
  2. namespace backend\controllers;
  3. use common\models\ProductionProduit;
  4. use Yii;
  5. use common\models\Production;
  6. use yii\filters\AccessControl;
  7. use yii\web\Controller;
  8. use common\models\LoginForm;
  9. use yii\filters\VerbFilter;
  10. use common\models\Commande;
  11. use common\models\PointVente;
  12. use common\models\Produit;
  13. use common\helpers\CSV;
  14. use common\models\User;
  15. use common\models\CommandeProduit;
  16. use kartik\mpdf\Pdf;
  17. class CommandeController extends \yii\web\Controller {
  18. var $enableCsrfValidation = false;
  19. public function behaviors() {
  20. return [
  21. 'access' => [
  22. 'class' => AccessControl::className(),
  23. 'rules' => [
  24. [
  25. 'allow' => true,
  26. 'roles' => ['@'],
  27. 'matchCallback' => function ($rule, $action) {
  28. return Yii::$app->user->identity->status == USER::STATUS_ADMIN
  29. || Yii::$app->user->identity->status == USER::STATUS_BOULANGER;
  30. }
  31. ]
  32. ],
  33. ],
  34. ];
  35. }
  36. public function actionReport($date = '') {
  37. $commandes = Commande::find()
  38. ->with('commandeProduits', 'user')
  39. ->joinWith('production')
  40. ->where(['production.date' => $date])
  41. ->orderBy('date ASC')
  42. ->all();
  43. foreach ($commandes as $c)
  44. $c->init();
  45. $production = Production::find()
  46. ->where('date LIKE \'' . $date . '\'')
  47. ->one();
  48. if($production)
  49. {
  50. $produits_selec = ProductionProduit::findProduits($production->id);
  51. $points_vente = PointVente::find()->all();
  52. foreach ($points_vente as $pv)
  53. $pv->initCommandes($commandes);
  54. // produits
  55. $produits = Produit::find()
  56. ->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement])
  57. ->orderBy('order ASC')
  58. ->all();
  59. // get your HTML raw content without any layouts or scripts
  60. $content = $this->renderPartial('report',[
  61. 'production' => $production,
  62. 'produits_selec' => $produits_selec,
  63. 'points_vente' => $points_vente,
  64. 'date' => $date,
  65. 'produits' => $produits
  66. ]);
  67. $date_str = date('d/m/Y',strtotime($date)) ;
  68. $pdf = new Pdf([
  69. // set to use core fonts only
  70. 'mode' => Pdf::MODE_UTF8,
  71. // A4 paper format
  72. 'format' => Pdf::FORMAT_A4,
  73. // portrait orientation
  74. 'orientation' => Pdf::ORIENT_LANDSCAPE,
  75. // stream to browser inline
  76. 'destination' => Pdf::DEST_BROWSER,
  77. // your html content input
  78. 'content' => $content,
  79. // format content from your own css file if needed or use the
  80. // enhanced bootstrap css built by Krajee for mPDF formatting
  81. //'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css',
  82. // any css to be embedded if required
  83. //'cssInline' => '.kv-heading-1{font-size:18px}',
  84. // set mPDF properties on the fly
  85. //'options' => ['title' => 'Krajee Report Title'],
  86. // call mPDF methods on the fly
  87. 'methods' => [
  88. 'SetHeader'=>['Commandes du '.$date_str],
  89. 'SetFooter'=>['{PAGENO}'],
  90. ]
  91. ]);
  92. // return the pdf output as per the destination setting
  93. return $pdf->render();
  94. }
  95. }
  96. public function actionDeleteCommande($date, $id_commande) {
  97. $commande = Commande::find()->where(['id' => $id_commande])->one();
  98. if ($commande) {
  99. $commande->delete();
  100. CommandeProduit::deleteAll(['id_commande' => $id_commande]);
  101. }
  102. $this->redirect(['index', 'date' => $date]);
  103. }
  104. public function gestionFormCommandes($production, $date, $points_vente, $produits, $users) {
  105. if ($date != '') {
  106. // commandes
  107. $commandes = Commande::find()
  108. ->with('commandeProduits', 'user')
  109. ->joinWith('production')
  110. ->where(['production.date' => $date])
  111. ->andWhere(['production.id_etablissement' => Yii::$app->user->identity->id_etablissement])
  112. ->all();
  113. foreach ($commandes as $c)
  114. $c->init();
  115. foreach ($points_vente as $pv) {
  116. $pv->initCommandes($commandes);
  117. if (isset($_POST['submit_pv']) && $_POST['submit_pv']) {
  118. // modifs
  119. foreach ($pv->commandes as $c) {
  120. // suppression des commande_produit
  121. $commande_produits = CommandeProduit::find()->where(['id_commande' => $c->id])->all();
  122. foreach ($commande_produits as $cp)
  123. $cp->delete();
  124. // création des commande_produit modifiés
  125. foreach ($produits as $p) {
  126. $quantite = Yii::$app->getRequest()->post('produit_' . $c->id . '_' . $p->id, 0);
  127. if ($quantite) {
  128. $commande_produit = new CommandeProduit;
  129. $commande_produit->id_commande = $c->id;
  130. $commande_produit->id_produit = $p->id;
  131. $commande_produit->quantite = $quantite;
  132. $commande_produit->prix = $p->prix;
  133. $commande_produit->save();
  134. }
  135. }
  136. }
  137. // ajout
  138. //$id_client = Yii::$app->getRequest()->post('user_pv_'.$pv->id, 0) ;
  139. $username = Yii::$app->getRequest()->post('username_pv_' . $pv->id, 0);
  140. $date = Yii::$app->getRequest()->post('date_commande_pv_' . $pv->id, 0);
  141. $one_product = false;
  142. foreach ($produits as $p) {
  143. $quantite = Yii::$app->getRequest()->post('produit_pv_' . $pv->id . '_' . $p->id, 0);
  144. if ($quantite) {
  145. $one_product = true;
  146. }
  147. }
  148. if (strlen($username) && $date && $one_product) {
  149. $commande = new Commande;
  150. $commande->id_point_vente = $pv->id;
  151. $commande->id_production = $production->id;
  152. $commande->id_user = 0;
  153. $commande->username = $username;
  154. $tab_date = explode('/', $date);
  155. $commande->date = $tab_date[2] . '-' . $tab_date[1] . '-' . $tab_date[0] . ' 00:00:00';
  156. $commande->save();
  157. foreach ($produits as $p) {
  158. $quantite = Yii::$app->getRequest()->post('produit_pv_' . $pv->id . '_' . $p->id, 0);
  159. if ($quantite) {
  160. $commande_produit = new CommandeProduit;
  161. $commande_produit->id_commande = $commande->id;
  162. $commande_produit->id_produit = $p->id;
  163. $commande_produit->quantite = $quantite;
  164. $commande_produit->prix = $p->prix;
  165. $commande_produit->save();
  166. }
  167. }
  168. }
  169. }
  170. }
  171. }
  172. }
  173. public function actionIndex($date = '', $return_data = false) {
  174. $commandes = [];
  175. // points de vente
  176. $points_vente = PointVente::find()
  177. ->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement])
  178. ->all();
  179. // produits
  180. $produits = Produit::find()
  181. ->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement])
  182. ->orderBy('order ASC')
  183. ->all();
  184. // users
  185. $arr_users = [0 => '--'];
  186. $users = User::find()->orderBy('prenom, nom ASC')->all();
  187. foreach ($users as $u) {
  188. $arr_users[$u->id] = $u->prenom . ' ' . $u->nom;
  189. }
  190. // création du jour de production
  191. $production = null;
  192. if ($date != '') {
  193. $production = Production::find()
  194. ->where(['date' => $date])
  195. ->andWhere(['id_etablissement'=>Yii::$app->user->identity->id_etablissement])
  196. ->one();
  197. if (!$production) {
  198. $production = new Production;
  199. $production->date = $date;
  200. $production->livraison = 1;
  201. $production->id_etablissement = Yii::$app->user->identity->id_etablissement ;
  202. $production->save();
  203. }
  204. }
  205. // gestion des commandes
  206. $this->gestionFormCommandes($production, $date, $points_vente, $produits, $users);
  207. // commandes
  208. $commandes = Commande::find()
  209. ->with('commandeProduits', 'user')
  210. ->joinWith('production')
  211. ->where(['production.date' => $date])
  212. ->andWhere(['production.id_etablissement' => Yii::$app->user->identity->id_etablissement])
  213. ->orderBy('date ASC')
  214. ->all();
  215. $recettes = 0;
  216. $recettes_pain = 0;
  217. $recettes_vrac = 0;
  218. $recettes_pain_livre = 0;
  219. $poids_pain = 0;
  220. $poids_vrac = 0;
  221. foreach ($commandes as $c) {
  222. $c->init();
  223. $recettes += $c->montant;
  224. $recettes_pain += $c->montant_pain;
  225. $recettes_vrac += $c->montant_vrac;
  226. if ($c->id_point_vente != 1)
  227. $recettes_pain_livre += $c->montant_pain;
  228. $poids_pain += $c->poids_pain;
  229. $poids_vrac += $c->poids_vrac;
  230. }
  231. $recettes = number_format($recettes, 2);
  232. $recettes_pain = number_format($recettes_pain, 2);
  233. $recettes_vrac = number_format($recettes_vrac, 2);
  234. // init commandes point de vente
  235. foreach ($points_vente as $pv) {
  236. $pv->initCommandes($commandes);
  237. }
  238. // gestion produits selec
  239. if (isset($_POST['valider_produit_selec'])) {
  240. if (isset($_POST['Produit'])) {
  241. foreach ($produits as $p) {
  242. $produit_production = ProductionProduit::find()->where(['id_production' => $production->id, 'id_produit' => $p->id])->one();
  243. if (!$produit_production) {
  244. $produit_production = new ProductionProduit();
  245. $produit_production->id_production = $production->id;
  246. $produit_production->id_produit = $p->id;
  247. $produit_production->actif = 0;
  248. if (isset($p->quantite_max))
  249. $produit_production->quantite_max = $p->quantite_max;
  250. $produit_production->save();
  251. }
  252. if (isset($_POST['Produit'][$p->id]['actif'])) {
  253. $produit_production->actif = 1;
  254. } else {
  255. $produit_production->actif = 0;
  256. }
  257. if ((isset($_POST['Produit'][$p->id]['quantite_max']) && $_POST['Produit'][$p->id]['quantite_max'] != '')) {
  258. $produit_production->quantite_max = (int) $_POST['Produit'][$p->id]['quantite_max'];
  259. } else {
  260. if (isset($p->quantite_max) && is_numeric($p->quantite_max) && $p->quantite_max > 0) {
  261. $produit_production->quantite_max = $p->quantite_max;
  262. }
  263. }
  264. $produit_production->save();
  265. }
  266. }
  267. }
  268. // init produits sélectionnés pour cette production
  269. $produits_selec = [];
  270. if ($production) {
  271. $day_production = date('N', strtotime($production->date));
  272. $produits_production = ProductionProduit::find()->where(['id_production' => $production->id])->all();
  273. if (!count($produits_production)) {
  274. foreach ($produits as $p) {
  275. $pp = new ProductionProduit();
  276. $pp->id_production = $production->id;
  277. $pp->id_produit = $p->id;
  278. $pp->actif = 0;
  279. if ($day_production == 1 && $p->lundi)
  280. $pp->actif = 1;
  281. if ($day_production == 2 && $p->mardi)
  282. $pp->actif = 1;
  283. if ($day_production == 3 && $p->mercredi)
  284. $pp->actif = 1;
  285. if ($day_production == 4 && $p->jeudi)
  286. $pp->actif = 1;
  287. if ($day_production == 5 && $p->vendredi)
  288. $pp->actif = 1;
  289. if ($day_production == 6 && $p->samedi)
  290. $pp->actif = 1;
  291. if ($day_production == 7 && $p->dimanche)
  292. $pp->actif = 1;
  293. $pp->quantite_max = $p->quantite_max;
  294. $pp->save();
  295. }
  296. }
  297. // produits selec pour production
  298. $produits_selec = ProductionProduit::findProduits($production->id);
  299. }
  300. // produit en vrac forcément activé
  301. if ($date != '') {
  302. foreach ($produits as $p) {
  303. $produit_production = ProductionProduit::find()->where(['id_production' => $production->id, 'id_produit' => $p->id])->one();
  304. if ($p->vrac) {
  305. if (!$produit_production) {
  306. $produit_production = new ProductionProduit();
  307. $produit_production->id_production = $production->id;
  308. $produit_production->id_produit = $p->id;
  309. $produit_production->quantite_max = 0;
  310. $produit_production->actif = 1;
  311. $produit_production->save();
  312. } else {
  313. $produit_production->actif = 1;
  314. $produit_production->save();
  315. }
  316. }
  317. }
  318. }
  319. // poids total de la production et CA potentiel
  320. $ca_potentiel = 0;
  321. $poids_total = 0;
  322. foreach ($produits_selec as $id_produit_selec => $produit_selec) {
  323. if ($produit_selec['actif']) {
  324. foreach ($produits as $produit) {
  325. if ($produit->id == $id_produit_selec) {
  326. //echo $produit->nom.' : '.$produit_selec['quantite_max'].'<br />' ;
  327. $ca_potentiel += $produit_selec['quantite_max'] * $produit->prix;
  328. $poids_total += $produit_selec['quantite_max'] * $produit->poids;
  329. }
  330. }
  331. }
  332. }
  333. // jours de production
  334. $jours_production = Production::find()
  335. ->where([
  336. 'actif' => 1,
  337. 'id_etablissement' => Yii::$app->user->identity->id_etablissement
  338. ])
  339. ->all();
  340. $datas = [
  341. 'produits' => $produits,
  342. 'points_vente' => $points_vente,
  343. 'commandes' => $commandes,
  344. 'date' => $date,
  345. 'production' => $production,
  346. 'jours_production' => $jours_production,
  347. 'produits_selec' => $produits_selec,
  348. 'users' => $arr_users,
  349. 'recettes' => $recettes,
  350. 'recettes_pain' => $recettes_pain,
  351. 'recettes_vrac' => $recettes_vrac,
  352. 'recettes_pain_livre' => $recettes_pain_livre,
  353. 'poids_pain' => $poids_pain,
  354. 'poids_vrac' => $poids_vrac,
  355. 'ca_potentiel' => $ca_potentiel,
  356. 'poids_total' => $poids_total,
  357. ];
  358. if ($return_data) {
  359. return $datas;
  360. } else {
  361. return $this->render('index', $datas);
  362. }
  363. }
  364. public function actionDownload($date = '', $id_point_vente = 0, $global = 0) {
  365. // commandes
  366. $commandes = Commande::find()
  367. ->with('commandeProduits', 'user')
  368. ->joinWith('production')
  369. ->where(['production.date' => $date])
  370. ->orderBy('date ASC')
  371. ->all();
  372. foreach ($commandes as $c)
  373. $c->init();
  374. // points de vente
  375. $points_vente = PointVente::find()->all();
  376. foreach ($points_vente as $pv)
  377. $pv->initCommandes($commandes);
  378. // produits
  379. $produits = Produit::find()->orderBy('order ASC')->all();
  380. $production = Production::find()->where('date LIKE \'' . $date . '\'')->one();
  381. $produits_selec = ProductionProduit::findProduits($production->id);
  382. /*
  383. * export global
  384. */
  385. if ($global) {
  386. $data = [];
  387. $filename = 'export_' . $date . '_global';
  388. $num_jour_semaine = date('w', strtotime($date));
  389. $arr_jour_semaine = [0 => 'dimanche', 1 => 'lundi', 2 => 'mardi', 3 => 'mercredi', 4 => 'jeudi', 5 => 'vendredi', 6 => 'samedi'];
  390. $champs_horaires_point_vente = 'horaires_' . $arr_jour_semaine[$num_jour_semaine];
  391. // header
  392. /* $line = [''] ;
  393. foreach($produits as $p) {
  394. if(isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  395. $line[] = $p->getLibelleAdmin() ;
  396. }
  397. }
  398. $data[] = $line ; */
  399. // par point de vente
  400. foreach ($points_vente as $pv) {
  401. if (count($pv->commandes) && strlen($pv->$champs_horaires_point_vente)) {
  402. //$data[] = [$pv->nom] ;
  403. $line = [$pv->nom, 'Produits', 'Montant', 'Commentaire'];
  404. /* foreach($produits as $p) {
  405. if(isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  406. $line[] = $p->getLibelleAdmin() ;
  407. }
  408. } */
  409. $data[] = $line;
  410. $res = $this->contentPointVenteCSV($date, $produits, $points_vente, $pv->id);
  411. foreach ($res['data'] as $line) {
  412. $data[] = $line;
  413. }
  414. }
  415. if (count($pv->commandes) && strlen($pv->$champs_horaires_point_vente)) {
  416. $line = ['Total pain'];
  417. $str_produits = '';
  418. foreach ($produits as $p) {
  419. if (!$p->vrac && isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  420. $quantite = Commande::getQuantiteProduit($p->id, $pv->commandes);
  421. $str_quantite = '';
  422. if ($quantite) {
  423. $str_quantite = $quantite;
  424. $str_produits .= $str_quantite . $p->diminutif . ', ';
  425. }
  426. }
  427. }
  428. $line[] = substr($str_produits, 0, strlen($str_produits) - 2);
  429. $line[] = number_format($pv->recettes_pain, 2) . ' €';
  430. $data[] = $line;
  431. $line = ['Total vrac'];
  432. $str_produits = '';
  433. foreach ($produits as $p) {
  434. if ($p->vrac && isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  435. $quantite = Commande::getQuantiteProduit($p->id, $pv->commandes);
  436. $str_quantite = '';
  437. if ($quantite) {
  438. $str_quantite = $quantite;
  439. $str_produits .= $str_quantite . $p->diminutif . ', ';
  440. }
  441. }
  442. }
  443. $line[] = substr($str_produits, 0, strlen($str_produits) - 2);
  444. $line[] = number_format($pv->recettes_vrac, 2) . ' €';
  445. $data[] = $line;
  446. $data[] = [];
  447. }
  448. }
  449. // récap
  450. //$line = ['Totaux'] ;
  451. // pain
  452. $line = ['Total pain'];
  453. $str_produits = '';
  454. foreach ($produits as $p) {
  455. if (!$p->vrac && isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  456. $quantite = Commande::getQuantiteProduit($p->id, $commandes);
  457. $str_quantite = '';
  458. if ($quantite) {
  459. $str_quantite = $quantite;
  460. $str_produits .= $str_quantite . '' . $p->diminutif . ', ';
  461. }
  462. }
  463. }
  464. $line[] = substr($str_produits, 0, strlen($str_produits) - 2);
  465. $data[] = $line;
  466. // vrac
  467. $line = ['Total vrac'];
  468. $str_produits = '';
  469. foreach ($produits as $p) {
  470. if ($p->vrac && isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  471. $quantite = Commande::getQuantiteProduit($p->id, $commandes);
  472. $str_quantite = '';
  473. if ($quantite) {
  474. $str_quantite = $quantite;
  475. $str_produits .= $str_quantite . '' . $p->diminutif . ', ';
  476. }
  477. }
  478. }
  479. $line[] = substr($str_produits, 0, strlen($str_produits) - 2);
  480. $data[] = $line;
  481. $infos = $this->actionIndex($date, true);
  482. // $data[] = [] ;
  483. /* $data[] = [
  484. 'CA potentiel boutique',
  485. number_format($infos['ca_potentiel'] - $infos['recettes_pain_livre'], 2).' €',
  486. ] ; */
  487. /* $res = $this->contentRecapCSV($date, $produits, $points_vente, $commandes) ;
  488. $data[] = ['Récapitulatif global'] ;
  489. foreach($res['data'] as $line) {
  490. $data[] = $line ;
  491. } */
  492. CSV::downloadSendHeaders($filename . '.csv');
  493. echo CSV::array2csv($data);
  494. die();
  495. }
  496. /*
  497. * export individuel
  498. */ else {
  499. if ($commandes && count($commandes)) {
  500. $data = [];
  501. // par point de vente
  502. if ($id_point_vente) {
  503. $res = $this->contentPointVenteCSV($date, $produits, $points_vente, $id_point_vente);
  504. $data = $res['data'];
  505. $filename = $res['filename'];
  506. }
  507. // récapitulatif
  508. else {
  509. $res = $this->contentRecapCSV($date, $produits, $points_vente, $commandes);
  510. $filename = 'recapitulatif_' . $date;
  511. $data = $res['data'];
  512. }
  513. CSV::downloadSendHeaders($filename . '.csv');
  514. echo CSV::array2csv($data);
  515. die();
  516. }
  517. }
  518. }
  519. public function contentRecapCSV($date, $produits, $points_vente, $commandes) {
  520. $data = [];
  521. $filename = 'recapitulatif_' . $date;
  522. $production = Production::find()->where('date LIKE \'' . $date . '\'')->one();
  523. $produits_selec = ProductionProduit::findProduits($production->id);
  524. // head
  525. $data[0] = ['Lieu'];
  526. foreach ($produits as $p) {
  527. if (isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  528. $data[0][] = $p->description;
  529. }
  530. }
  531. $num_jour_semaine = date('w', strtotime($date));
  532. $arr_jour_semaine = [0 => 'dimanche', 1 => 'lundi', 2 => 'mardi', 3 => 'mercredi', 4 => 'jeudi', 5 => 'vendredi', 6 => 'samedi'];
  533. $champs_horaires_point_vente = 'horaires_' . $arr_jour_semaine[$num_jour_semaine];
  534. // datas
  535. foreach ($points_vente as $pv) {
  536. if (count($pv->commandes) && strlen($pv->$champs_horaires_point_vente)) {
  537. $data_add = [$pv->nom];
  538. foreach ($produits as $p) {
  539. if (isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  540. $data_add[] = Commande::getQuantiteProduit($p->id, $pv->commandes);
  541. }
  542. }
  543. $data[] = $data_add;
  544. }
  545. }
  546. $data_add = ['Total'];
  547. foreach ($produits as $p) {
  548. if (isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  549. $data_add[] = Commande::getQuantiteProduit($p->id, $commandes);
  550. }
  551. }
  552. $data[] = $data_add;
  553. return [
  554. 'data' => $data,
  555. 'filename' => $filename
  556. ];
  557. }
  558. public function contentPointVenteCSV($date, $produits, $points_vente, $id_point_vente) {
  559. $data = [];
  560. $production = Production::find()->where('date LIKE \'' . $date . '\'')->one();
  561. $produits_selec = ProductionProduit::findProduits($production->id);
  562. // head
  563. /* $data[0] = ['Client', 'Date commande'] ;
  564. foreach($produits as $p) {
  565. if(isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  566. $data[0][] = $p->description ;
  567. }
  568. } */
  569. // datas
  570. foreach ($points_vente as $pv) {
  571. if ($pv->id == $id_point_vente) {
  572. $filename = 'export_' . $date . '_' . strtolower(str_replace(' ', '-', $pv->nom));
  573. foreach ($pv->commandes as $c) {
  574. $str_user = '';
  575. // username
  576. if ($c->user) {
  577. $str_user = $c->user->prenom . " " . $c->user->nom; //.' - '.date('d/m', strtotime($c->date)) ;
  578. } else {
  579. $str_user = $c->username; //.' - '.date('d/m', strtotime($c->date)) ;
  580. }
  581. // téléphone
  582. if (isset($c->user) && strlen($c->user->telephone)) {
  583. $str_user .= ' (' . $c->user->telephone . ')';
  584. }
  585. $data_add = [$str_user];
  586. // produits
  587. $str_produits = '';
  588. foreach ($produits as $p) {
  589. if (isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) {
  590. $add = false;
  591. foreach ($c->commandeProduits as $cp) {
  592. if ($p->id == $cp->id_produit) {
  593. $str_produits .= $cp->quantite . '' . $p->diminutif . ', ';
  594. $add = true;
  595. }
  596. }
  597. }
  598. }
  599. $data_add[] = substr($str_produits, 0, strlen($str_produits) - 2);
  600. $data_add[] = number_format($c->montant, 2) . ' €';
  601. $data_add[] = $c->commentaire;
  602. $data[] = $data_add;
  603. }
  604. }
  605. }
  606. return [
  607. 'data' => $data,
  608. 'filename' => $filename
  609. ];
  610. }
  611. public function actionChangeState($date, $actif) {
  612. // changement état
  613. $production = Production::find()->where(['date' => $date])->one();
  614. $production->actif = $actif;
  615. $production->save();
  616. $this->redirect(['index', 'date' => $date]);
  617. }
  618. public function actionChangeLivraison($date, $livraison) {
  619. $production = Production::find()->where(['date' => $date])->one();
  620. $production->livraison = $livraison;
  621. $production->save();
  622. $this->redirect(['index', 'date' => $date]);
  623. }
  624. }