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.

index.php 21KB

8 vuotta sitten
8 vuotta sitten
8 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <?php
  2. /**
  3. Copyright La boîte à pain (2018)
  4. contact@laboiteapain.net
  5. Ce logiciel est un programme informatique servant à aider les producteurs
  6. à distribuer leur production en circuits courts.
  7. Ce logiciel est régi par la licence CeCILL soumise au droit français et
  8. respectant les principes de diffusion des logiciels libres. Vous pouvez
  9. utiliser, modifier et/ou redistribuer ce programme sous les conditions
  10. de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
  11. sur le site "http://www.cecill.info".
  12. En contrepartie de l'accessibilité au code source et des droits de copie,
  13. de modification et de redistribution accordés par cette licence, il n'est
  14. offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
  15. seule une responsabilité restreinte pèse sur l'auteur du programme, le
  16. titulaire des droits patrimoniaux et les concédants successifs.
  17. A cet égard l'attention de l'utilisateur est attirée sur les risques
  18. associés au chargement, à l'utilisation, à la modification et/ou au
  19. développement et à la reproduction du logiciel par l'utilisateur étant
  20. donné sa spécificité de logiciel libre, qui peut le rendre complexe à
  21. manipuler et qui le réserve donc à des développeurs et des professionnels
  22. avertis possédant des connaissances informatiques approfondies. Les
  23. utilisateurs sont donc invités à charger et tester l'adéquation du
  24. logiciel à leurs besoins dans des conditions permettant d'assurer la
  25. sécurité de leurs systèmes et ou de leurs données et, plus généralement,
  26. à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
  27. Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
  28. pris connaissance de la licence CeCILL, et que vous en avez accepté les
  29. termes.
  30. */
  31. use yii\helpers\Html;
  32. use common\models\Order;
  33. use common\models\User ;
  34. use yii\helpers\ArrayHelper ;
  35. use yii\widgets\ActiveForm;
  36. $this->title = 'Commande';
  37. ?>
  38. <div id="page-order">
  39. <div class="col-md-3" id="col-left">
  40. <div class="panel panel-default">
  41. <div class="panel-heading">
  42. <h3 class="panel-title">Calendrier</h3>
  43. </div>
  44. <div class="panel-body">
  45. <?php
  46. // chargement assets
  47. common\components\fullcalendar\FullcalendarWidget::widget();
  48. // --> lancement du js en manuel (via lechatdesnoisettes.js)
  49. ?>
  50. <div id="calendar"></div>
  51. <?php if (!$date): ?>
  52. <br />
  53. <div class="alert alert-info">
  54. <span class="glyphicon glyphicon-share-alt"></span> Choisissez une date pour initier ou
  55. éditer un jour de production.
  56. </div>
  57. <?php else: ?>
  58. <a class="btn btn-sm btn-default btn-active-week" href="<?= Yii::$app->urlManager->createUrl(['order/change-state-week', 'date' => $date, 'active' => !$oneDistributionWeekActive, ]); ?>"><span class="glyphicon glyphicon-<?= $oneDistributionWeekActive ? 'remove' : 'ok' ?>"></span> <?= $oneDistributionWeekActive ? 'Désactiver' : 'Activer' ?> cette semaine de production</a>
  59. <?php endif; ?>
  60. </div>
  61. </div>
  62. <?php if ($date != ''): ?>
  63. <div id="bloc-production">
  64. <input type="hidden" id="date-production" value="<?= $date ?>" />
  65. <input type="hidden" id="id-production" value="<?= $distribution->id ?>" />
  66. <div class="panel panel-default">
  67. <div class="panel-heading">
  68. <h3 class="panel-title">Distribution du <strong><?php echo date('d/m/Y', strtotime($date)); ?></strong></h3>
  69. </div>
  70. <div class="panel-body">
  71. <strong>Distribution</strong><br />
  72. <div class="btn-group" role="group">
  73. <a class="btn btn-default<?php if ($distribution->active): ?> btn-success<?php endif; ?>" href="<?php echo Yii::$app->urlManager->createUrl(['order/change-state', 'date' => $date, 'active' => 1]); ?>">Activé</a>
  74. <a class="btn btn-default<?php if (!$distribution->active): ?> btn-danger<?php endif; ?>" href="<?php echo Yii::$app->urlManager->createUrl(['order/change-state', 'date' => $date, 'active' => 0]); ?>">Désactivé</a>
  75. </div>
  76. <br />
  77. <br />
  78. <?php if (!$distribution->active): ?>
  79. <div class="alert alert-info">
  80. <span class="glyphicon glyphicon-share-alt"></span> Activez ici la distribution pour qu'elle soit visible au client.
  81. </div>
  82. <?php endif; ?>
  83. <?php if($distribution->delivery && count($arrayPointsSaleDistribution)): ?>
  84. <div id="productions-point-vente">
  85. <strong>Points de vente : </strong>
  86. <div class="checkbox-list">
  87. <?= Html::activeCheckboxList(
  88. $pointSaleDistribution,
  89. 'points_sale_distribution',
  90. $arrayPointsSaleDistribution ,
  91. ['encode' => false, 'class' => '']) ?>
  92. </div>
  93. </div>
  94. <?php endif; ?>
  95. </div>
  96. </div>
  97. </div>
  98. <?php endif; ?>
  99. <?php if ($distribution): ?>
  100. <div id="bloc-produits">
  101. <div class="panel panel-default">
  102. <div class="panel-heading">
  103. <h3 class="panel-title">Produits</h3>
  104. </div>
  105. <div class="panel-body">
  106. <!-- produits sélectionnés -->
  107. <form id="produits-production" action="<?php echo Yii::$app->urlManager->createUrl(['order/index', 'date' => $date]); ?>" method="post">
  108. <div class="overflow">
  109. <table class="table table-condensed">
  110. <thead>
  111. <tr>
  112. <th class="td-active">Actif</th>
  113. <th class="td-produit">Produit</th>
  114. <th class="td-max">Max. <span class="glyphicon glyphicon-info-sign" data-toggle="tooltip" data-placement="top" data-original-title="Quantité disponible à la commande. Laisser vide si vous ne souhaitez pas avoir de limite de commande. La valeur par défaut est configurable dans vos produits."></span></th>
  115. </tr>
  116. </thead>
  117. <tbody>
  118. <?php foreach ($arrayProducts as $p): ?>
  119. <tr <?php if (isset($selectedProducts[$p->id]['active']) && $selectedProducts[$p->id]['active']): ?>class="active"<?php endif; ?>>
  120. <td class="td-active"><input id="product-<?php echo $p->id; ?>" name="Product[<?php echo $p->id; ?>][active]" type="checkbox" <?php if (isset($selectedProducts[$p->id]['active']) && $selectedProducts[$p->id]['active']): ?>checked="checked"<?php endif; ?> /></td>
  121. <td class="td-produit"><label for="product-<?php echo $p->id; ?>"><?= Html::encode($p->name) ?></label></td>
  122. <td class="td-max"><input class="quantity-max" name="Product[<?php echo $p->id; ?>][quantity_max]" type="text" value="<?php if (isset($selectedProducts[$p->id])) echo $selectedProducts[$p->id]['quantity_max']; ?>" /></td>
  123. </tr>
  124. <?php endforeach; ?>
  125. </tbody>
  126. </table>
  127. </div>
  128. <input type="submit" name="valider_produit_selec" class="btn btn-default" value="Valider" />
  129. </form>
  130. </div>
  131. </div>
  132. </div>
  133. <?php endif; ?>
  134. </div>
  135. <div class="col-md-9" id="col-right">
  136. <input type="hidden" value="<?php echo $date; ?>" id="current-date" />
  137. <ul id="jours-production">
  138. <?php foreach ($arrayDistributionDays as $distributionDay) : ?>
  139. <li><?php echo $distributionDay->date; ?></li>
  140. <?php endforeach; ?>
  141. </ul>
  142. <?php if ($date != ''): ?>
  143. <div id="bloc-totaux">
  144. <?= $this->render('_total_orders.php',[
  145. 'arrayProducts' => $arrayProducts,
  146. 'arrayOrders' => $arrayOrders,
  147. 'arrayProductsSelected' => $selectedProducts,
  148. 'revenues' => $revenues,
  149. 'weight' => $weight,
  150. 'potentialTurnover' => $potentialTurnover,
  151. 'totalWeight' => $totalWeight,
  152. ]); ?>
  153. </div>
  154. <?php
  155. $num_jour_semaine = date('w', strtotime($date));
  156. $arr_jour_semaine = [0 => 'dimanche', 1 => 'lundi', 2 => 'mardi', 3 => 'mercredi', 4 => 'jeudi', 5 => 'vendredi', 6 => 'samedi'];
  157. $champs_horaires_point_vente = 'horaires_' . $arr_jour_semaine[$num_jour_semaine];
  158. ?>
  159. <div class="panel panel-default" id="panel-commandes">
  160. <div class="panel-heading">
  161. <h3 class="panel-title">
  162. Commandes
  163. <?php if (!count($arrayOrders)): ?><span class="label label-danger">0</span>
  164. <?php else: ?><span class="label label-success"><?= count($arrayOrders) ?></span>
  165. <?php endif; ?>
  166. <?php if (count($arrayOrders)): ?>
  167. <a id="btn-export-commandes" class="btn btn-primary" href="<?php echo Yii::$app->urlManager->createUrl(['order/report', 'date' => $date, 'idPointSale' => 0, 'global' => 1]); ?>"><span class="glyphicon glyphicon-download-alt"></span> Exporter</a>
  168. <?php endif; ?>
  169. <div id="btn-commandes-auto" class="btn-group">
  170. <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  171. <span class="glyphicon glyphicon-repeat"></span> Abonnements <span class="caret"></span>
  172. </button>
  173. <ul class="dropdown-menu">
  174. <li><a href="<?= Yii::$app->urlManager->createUrl(['order/add-subscriptions', 'date' => $date]); ?>">Importer toutes les commandes</a></li>
  175. </ul>
  176. </div>
  177. </h3>
  178. </div>
  179. <div class="panel-body">
  180. <div class="col-md-12">
  181. <div class="alert alert-danger" style="display:none;">Aucun point de vente activé</div>
  182. <!-- Nav tabs -->
  183. <ul id="tabs-points-vente" class="nav nav-tabs" role="tablist">
  184. <?php foreach($arrayPointsSale as $pointSale): ?>
  185. <li role="presentation" class="<?php if($pointSale->point_production): ?>active<?php endif; ?>">
  186. <a href="#point-vente-<?= $pointSale->id ?>" id="btn-point-vente-<?= $pointSale->id ?>" aria-controls="point-sale-<?= $pointSale->id ?>" role="tab" data-toggle="tab"><?= Html::encode($pointSale->name) ?> <span class="badge badge-<?php if(count($pointSale->orders)): ?>success<?php else: ?>danger<?php endif; ?>"><?php echo count($pointSale->orders); ?></span></a>
  187. </li>
  188. <?php endforeach; ?>
  189. </ul>
  190. <!-- Tab panes -->
  191. <div class="tab-content" id="commandes-points-vente">
  192. <?php foreach($arrayPointsSale as $pointSale): ?>
  193. <div role="tabpanel" data-id-pv="<?= $pointSale->id ?>" class="bloc-point-vente tab-pane <?php if($pointSale->point_production): ?> active<?php endif; ?>" id="point-vente-<?= $pointSale->id ?>">
  194. <div class="col-md-12">
  195. <div class="alert alert-warning recap-pv <?php if(!count($pointSale->orders)): ?>no-order<?php endif; ?>">
  196. <?php if(count($pointSale->orders)): ?>
  197. <strong class="commandes"><?= count($pointSale->orders) ?> commande<?php if(count($pointSale->orders) > 1): ?>s<?php endif; ?></strong>
  198. <span class="recettes"><?= number_format($pointSale->revenues, 2) ?> €</span>
  199. <?php else: ?>
  200. <strong class="commandes">Aucune commande</strong>
  201. <span class="recettes"></span>
  202. <?php endif; ?>
  203. </div>
  204. <ul class="liste-commandes btn-group-vertical<?php if(!count($pointSale->orders)): ?> no-order<?php endif; ?>">
  205. <?php foreach($pointSale->orders as $order): ?>
  206. <li>
  207. <a href="javascript:void(0);" class="btn btn-default" data-pv-id="<?= $pointSale->id ?>" data-id-commande="<?= $order->id ?>" data-commande='<?= $pointSale->data_options_orders[$order->id]['data-order'] ?>' data-commentaire="<?= Html::encode($order->comment) ?>" data-date="<?= date('d/m à H:i',strtotime($order->date)); ?>">
  208. <span class="montant <?php if(number_format($order->paid_amount,2) >= number_format($order->amount,2)): ?>paye<?php endif; ?>">
  209. <?= Html::encode(number_format($order->amount, 2)); ?> €
  210. <?php if($order->paid_amount - $order->amount > 0.01): ?><span class="glyphicon glyphicon-warning-sign"></span><?php endif; ?>
  211. </span>
  212. <span class="user">
  213. <?php if($order->origin): ?>
  214. <?php if($order->origin == Order::ORIGIN_ADMIN): ?>
  215. <span class="label label-warning">vous</span>
  216. <?php elseif($order->origin == Order::ORIGIN_AUTO): ?>
  217. <span class="label label-default">auto</span>
  218. <?php elseif($order->origin == Order::ORIGIN_USER): ?>
  219. <span class="label label-success">client</span>
  220. <?php endif; ?>
  221. <?php endif; ?>
  222. <?php if(isset($order->user)): ?>
  223. <?= Html::encode($order->user->lastname.' '.$order->user->name); ?>
  224. <?php else: ?>
  225. <?= Html::encode($order->username); ?>
  226. <?php endif; ?>
  227. <?php if(!is_null($order->date_delete)): ?>
  228. (<span class="glyphicon glyphicon-remove"></span> Annulée)
  229. <?php endif; ?>
  230. </span>
  231. <?php if (strlen($order->comment)): ?>
  232. <span class="glyphicon glyphicon-comment"></span>
  233. <?php endif; ?>
  234. </a>
  235. </li>
  236. <?php endforeach; ?>
  237. </ul>
  238. <?= Html::a('<span class="glyphicon glyphicon-plus"></span> Créer une commande', 'javascript:void(0);', ['class' => 'btn btn-default creer-commande', 'data-pv-id' => $pointSale->id]) ?>
  239. </div>
  240. <div class="col-md-12 bloc-commande">
  241. <h2 class="title-user">
  242. <span class="buttons-edit-remove">
  243. <?= Html::a('<span class="glyphicon glyphicon-trash"></span> Supprimer', 'javascript:void(0);', ['class' => 'btn btn-default btn-remove']) ?>
  244. <?= Html::a('<span class="glyphicon glyphicon-pencil"></span> Modifier', 'javascript:void(0);', ['class' => 'btn btn-default btn-edit']) ?>
  245. </span>
  246. <span class="buttons-save-cancel">
  247. <?= Html::a('<span class="glyphicon glyphicon-ok"></span> Sauvegarder', 'javascript:void(0);', ['class' => 'btn btn-primary btn-save']) ?>
  248. <?= Html::a('<span class="glyphicon glyphicon-remove"></span> Annuler', 'javascript:void(0);', ['class' => 'btn btn-default btn-cancel']) ?>
  249. </span>
  250. <span class="the-title"></span>
  251. <span class="choix-user">
  252. <?= Html::activeDropDownList(new User, 'id', ArrayHelper::map(User::find()->joinWith('userProducer')->where('user_producer.id_producer = '.Producer::getId())->andWhere('user_producer.active = 1')->orderBy('user.lastname ASC, user.name ASC')->all(), 'id', function($model, $defaultValue) {
  253. return $model['lastname'].' '.$model['name'];
  254. }), ['prompt' => '--','class' => 'form-control user-id']) ?>
  255. OU <input type="text" class="form-control username" placeholder="Choisissez un nom" />
  256. </span>
  257. </h2>
  258. <div class="commentaire alert alert-info">
  259. </div>
  260. <textarea name="comment" class="form-control textarea-commentaire" placeholder="Commentaire"></textarea>
  261. <table class="table table-bordered table-condensed tab-content table-produits">
  262. <tbody>
  263. <?php foreach ($arrayProducts as $p): ?>
  264. <tr class="produit-<?= $p->id ?> <?php if(!$selectedProducts[$p->id]['active']): ?> disabled<?php endif; ?>" data-id-produit="<?= $p->id ?>">
  265. <td class="td-commande"></td>
  266. <td class="td-produit"><?php echo Html::encode($p->getStrWordingAdmin()); ?></td>
  267. </tr>
  268. <?php endforeach; ?>
  269. <tr class="tr-total">
  270. <td class="td-total"></td>
  271. <td class="td-paiement"></td>
  272. </tr>
  273. </tbody>
  274. </table>
  275. </div>
  276. </div>
  277. <?php endforeach; ?>
  278. </div>
  279. </div>
  280. </div>
  281. </div>
  282. <?php endif; ?>
  283. </div>
  284. </div>