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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?php
  2. /**
  3. * Copyright Souke (2018)
  4. *
  5. * contact@souke.fr
  6. *
  7. * Ce logiciel est un programme informatique servant à aider les producteurs
  8. * à distribuer leur production en circuits courts.
  9. *
  10. * Ce logiciel est régi par la licence CeCILL soumise au droit français et
  11. * respectant les principes de diffusion des logiciels libres. Vous pouvez
  12. * utiliser, modifier et/ou redistribuer ce programme sous les conditions
  13. * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
  14. * sur le site "http://www.cecill.info".
  15. *
  16. * En contrepartie de l'accessibilité au code source et des droits de copie,
  17. * de modification et de redistribution accordés par cette licence, il n'est
  18. * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
  19. * seule une responsabilité restreinte pèse sur l'auteur du programme, le
  20. * titulaire des droits patrimoniaux et les concédants successifs.
  21. *
  22. * A cet égard l'attention de l'utilisateur est attirée sur les risques
  23. * associés au chargement, à l'utilisation, à la modification et/ou au
  24. * développement et à la reproduction du logiciel par l'utilisateur étant
  25. * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
  26. * manipuler et qui le réserve donc à des développeurs et des professionnels
  27. * avertis possédant des connaissances informatiques approfondies. Les
  28. * utilisateurs sont donc invités à charger et tester l'adéquation du
  29. * logiciel à leurs besoins dans des conditions permettant d'assurer la
  30. * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
  31. * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
  32. *
  33. * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
  34. * pris connaissance de la licence CeCILL, et que vous en avez accepté les
  35. * termes.
  36. */
  37. use domain\Feature\Feature\Feature;
  38. use domain\PointSale\UserPointSale\UserPointSale;
  39. use domain\Producer\Producer\Producer;
  40. use yii\grid\GridView;
  41. use yii\helpers\Html;
  42. $pointSaleModule = $this->getPointSaleModule();
  43. $sharedPointSaleModule = $this->getSharedPointSaleModule();
  44. $featureChecker = $this->getFeatureModule()->getChecker();
  45. $this->setTitle('Points de vente');
  46. $this->addBreadcrumb($this->getTitle());
  47. $this->addButton(
  48. [
  49. 'label' => 'Nouveau point de vente <span class="glyphicon glyphicon-plus"></span>',
  50. 'url' => 'point-sale/create',
  51. 'class' => 'btn btn-primary'
  52. ]
  53. );
  54. ?>
  55. <div class="point-sale-index">
  56. <?= GridView::widget([
  57. 'filterModel' => $searchModel,
  58. 'dataProvider' => $dataProvider,
  59. 'columns' => [
  60. [
  61. 'attribute' => 'name',
  62. 'label' => 'Nom',
  63. 'format' => 'raw',
  64. 'contentOptions' => ['class' => 'column-name'],
  65. 'value' => function ($model) use ($featureChecker, $sharedPointSaleModule) {
  66. $html = '';
  67. $html .= '<div class="name">';
  68. $html .= $model->name;
  69. if ($model->is_bread_box) {
  70. $html .= ' <span class="label label-default">Boîte à pain</span> ';
  71. }
  72. $html .= '</div>';
  73. if($featureChecker->isEnabled(Feature::ALIAS_SHARED_POINT_SALE)) {
  74. if($sharedPointSaleModule->getResolver()->countPointsSaleSharedWithPointSale($model)) {
  75. $html .= '<div class="shared-point-sale-producers"><small><span class="fa fa-share-alt"></span> ';
  76. $html .= $sharedPointSaleModule->getResolver()->getProducersSharingPointSaleAsString($model);
  77. $html .= '</small></div>';
  78. }
  79. }
  80. return $html;
  81. }
  82. ],
  83. [
  84. 'attribute' => 'locality',
  85. 'headerOptions' => ['class' => 'column-hide-on-mobile'],
  86. 'filterOptions' => ['class' => 'column-hide-on-mobile'],
  87. 'contentOptions' => ['class' => 'column-hide-on-mobile'],
  88. ],
  89. [
  90. 'attribute' => 'delivery',
  91. 'label' => 'Livraison',
  92. 'filter' => [
  93. 'monday' => 'Lundi',
  94. 'tuesday' => 'Mardi',
  95. 'wednesday' => 'Mercredi',
  96. 'thursday' => 'Jeudi',
  97. 'friday' => 'Vendredi',
  98. 'saturday' => 'Samedi',
  99. 'sunday' => 'Dimanche',
  100. ],
  101. 'value' => function ($model) use ($pointSaleModule) {
  102. return $pointSaleModule->getStrDeliveryDays($model);
  103. }
  104. ],
  105. [
  106. 'attribute' => 'access_type',
  107. 'label' => 'Accès',
  108. 'filter' => [
  109. 'open' => 'Ouvert',
  110. 'code' => 'Code',
  111. 'restricted_access' => 'Accès restreint'
  112. ],
  113. 'format' => 'raw',
  114. 'headerOptions' => ['class' => 'column-hide-on-mobile'],
  115. 'filterOptions' => ['class' => 'column-hide-on-mobile'],
  116. 'contentOptions' => ['class' => 'column-hide-on-mobile'],
  117. 'value' => function ($model) {
  118. $count = UserPointSale::find()->where(
  119. ['id_point_sale' => $model->id]
  120. )->count();
  121. $html = '';
  122. if ($model->restricted_access) {
  123. $html .= '<span class="glyphicon glyphicon-lock"></span> ';
  124. if ($count == 1) {
  125. $html .= '1 utilisateur';
  126. } else {
  127. $html .= $count . ' utilisateurs';
  128. }
  129. }
  130. if (strlen($model->code)) {
  131. if (strlen($html)) {
  132. $html .= '<br />';
  133. }
  134. $html .= 'Code : <strong>' . Html::encode(
  135. $model->code
  136. ) . '</strong>';
  137. }
  138. return $html;
  139. }
  140. ],
  141. [
  142. 'label' => 'Modes de paiement',
  143. 'format' => 'raw',
  144. 'headerOptions' => ['class' => 'column-hide-on-mobile'],
  145. 'filterOptions' => ['class' => 'column-hide-on-mobile'],
  146. 'contentOptions' => ['class' => 'column-hide-on-mobile column-payment-method'],
  147. 'value' => function ($model) {
  148. $html = '<ul>';
  149. if($model->payment_method_onsite) {
  150. $html .= '<li><i class="bi bi-wallet2"></i> Sur place</li>';
  151. }
  152. if ($model->payment_method_credit && isset(Producer::$creditFunctioningArray[$model->credit_functioning])) {
  153. $html .= '<li><i class="bi bi-piggy-bank"></i> Cagnotte ('. strtolower(Producer::$creditFunctioningArray[$model->credit_functioning]).')</li>';
  154. }
  155. if ($model->payment_method_online) {
  156. $html .= '<li><i class="bi bi-credit-card"></i> Paiement en ligne</li>';
  157. }
  158. $html .= '</ul>';
  159. return $html;
  160. }
  161. ],
  162. [
  163. 'attribute' => 'default',
  164. 'label' => 'Par défaut',
  165. 'format' => 'raw',
  166. 'headerOptions' => ['class' => 'column-hide-on-mobile'],
  167. 'filterOptions' => ['class' => 'column-hide-on-mobile'],
  168. 'contentOptions' => ['class' => 'td-default column-hide-on-mobile'],
  169. 'value' => function ($model) {
  170. if ($model->default) {
  171. return Html::a(
  172. '<span class="glyphicon glyphicon-star"></span>',
  173. ['point-sale/default', 'id' => $model->id],
  174. [
  175. 'title' => 'Point de vente par défaut',
  176. 'class' => 'btn btn-default'
  177. ]
  178. );
  179. } else {
  180. return Html::a(
  181. '<span class="glyphicon glyphicon-star-empty"></span>',
  182. ['point-sale/default', 'id' => $model->id],
  183. [
  184. 'title' => 'Point de vente par défaut',
  185. 'class' => 'btn btn-default'
  186. ]
  187. );
  188. }
  189. }
  190. ],
  191. [
  192. //'visible' => $featureChecker->isEnabled(Feature::ALIAS_SHARED_POINT_SALE),
  193. 'visible' => false,
  194. 'label' => 'Partages',
  195. 'format' => 'raw',
  196. 'headerOptions' => ['class' => 'column-hide-on-mobile'],
  197. 'filterOptions' => ['class' => 'column-hide-on-mobile'],
  198. 'contentOptions' => ['class' => 'td-shared-point-sale column-hide-on-mobile'],
  199. 'value' => function ($pointSale) use ($sharedPointSaleModule) {
  200. $countPointsSaleSharedWithPointSale = $sharedPointSaleModule->getResolver()->countPointsSaleSharedWithPointSale($pointSale);
  201. return '<a class="btn btn-'.($countPointsSaleSharedWithPointSale ? 'success' : 'default').'" href="'.Yii::$app->urlManager->createUrl(['shared-point-sale/index']).'" title="'.$sharedPointSaleModule->getResolver()->getProducersSharingPointSaleAsString($pointSale, null, '&#013;').'">'.$countPointsSaleSharedWithPointSale.' <span class="fa fa-share-alt"></span></a>';
  202. }
  203. ],
  204. [
  205. 'class' => 'yii\grid\ActionColumn',
  206. 'template' => '{update} {delete}',
  207. 'headerOptions' => ['class' => 'column-actions'],
  208. 'contentOptions' => ['class' => 'column-actions'],
  209. 'buttons' => [
  210. 'update' => function ($url, $model) {
  211. return Html::a(
  212. '<span class="glyphicon glyphicon-pencil"></span>',
  213. $url,
  214. [
  215. 'title' => 'Modifier',
  216. 'class' => 'btn btn-default'
  217. ]
  218. );
  219. },
  220. 'delete' => function ($url, $model) {
  221. return Html::a(
  222. '<span class="glyphicon glyphicon-trash"></span>',
  223. $url,
  224. [
  225. 'title' => 'Supprimer',
  226. 'class' => 'btn btn-default'
  227. ]
  228. );
  229. }
  230. ],
  231. ],
  232. ],
  233. ]); ?>
  234. </div>