You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CommandeController.php 29KB

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