您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

676 行
45KB

  1. <?php
  2. /**
  3. * Copyright distrib (2018)
  4. *
  5. * contact@opendistrib.net
  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 common\helpers\GlobalParam;
  38. use common\logic\Distribution\Distribution\Model\Distribution;
  39. use common\logic\Distribution\Distribution\Wrapper\DistributionManager;
  40. use common\logic\Distribution\PointSaleDistribution\Model\PointSaleDistribution;
  41. use common\logic\Producer\Producer\Model\Producer;
  42. use common\logic\Producer\Producer\Wrapper\ProducerManager;
  43. \producer\assets\VuejsOrderOrderAsset::register($this);
  44. $distributionManager = DistributionManager::getInstance();
  45. $producerManager = ProducerManager::getInstance();
  46. $producer = $this->context->getProducerCurrent();
  47. $this->setTitle('Commander');
  48. ?>
  49. <script>
  50. var appInitValues = {
  51. urlLogin: '<?= \Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/producer', 'id' => $this->context->getProducerCurrent()->id, 'return_url' => \Yii::$app->urlManagerProducer->createAbsoluteUrl(['order/order', 'slug_producer' => $this->context->getProducerCurrent()->slug])]) ?>'
  52. };
  53. </script>
  54. <div id="app-order-order" :class="{'loaded': !loadingInit}">
  55. <?php if (isset($order)): ?>
  56. <span id="order-distribution-date"><?= $order->distribution->date; ?></span>
  57. <?php endif; ?>
  58. <?php if (isset($date)): ?>
  59. <span id="distribution-date"><?= $date; ?></span>
  60. <?php endif; ?>
  61. <div v-if="loadingInit">
  62. Chargement ...
  63. </div>
  64. <div class="wrapper">
  65. <div v-if="!loadingInit && distributions.length == 0" class="alert alert-warning">
  66. Aucune distribution à venir chez ce producteur.
  67. </div>
  68. <div v-else>
  69. <div id="steps">
  70. <ul>
  71. <?php if ($producer->option_order_entry_point == Producer::ORDER_ENTRY_POINT_DATE): ?>
  72. <step-date
  73. first="true"
  74. :step="step"
  75. :point-sale-active="pointSaleActive"
  76. :date-format="dateFormat"
  77. :change-step="changeStep"
  78. :producer="producer"
  79. ></step-date>
  80. <step-point-sale
  81. :step="step"
  82. :point-sale-active="pointSaleActive"
  83. :change-step="changeStep"
  84. :producer="producer"
  85. ></step-point-sale>
  86. <?php else: ?>
  87. <step-point-sale
  88. first="true"
  89. :step="step"
  90. :point-sale-active="pointSaleActive"
  91. :change-step="changeStep"
  92. :producer="producer"
  93. ></step-point-sale>
  94. <step-date
  95. :step="step"
  96. :point-sale-active="pointSaleActive"
  97. :date-format="dateFormat"
  98. :change-step="changeStep"
  99. :producer="producer"
  100. ></step-date>
  101. <?php endif; ?>
  102. <li id="step-products" :class="'col-md-3 '+((step == 'products') ? 'active ' : '')">
  103. <button @click="changeStep('products')"
  104. :class="'btn '+ (step == 'products' ? 'btn-primary' : 'btn-default')"
  105. :disabled="step == 'date' || step == 'point-sale'">
  106. <span class="button-content"><span
  107. class="glyphicon glyphicon-th-list"></span> Produits</span>
  108. </button>
  109. <div class="info-step" v-if="oneProductOrdered()">
  110. {{ countProductOrdered() }} produit{{ (countProductOrdered() > 1) ? 's' : '' }}
  111. </div>
  112. </li>
  113. <li id="step-payment" :class="'col-md-3 '+((step == 'payment') ? 'active' : '')">
  114. <button @click="changeStep('payment')"
  115. :class="'btn '+ (step == 'payment' ? 'btn-primary' : 'btn-default')"
  116. :disabled="step == 'date' || step == 'point-sale' || step == 'products'">
  117. <span class="button-content"><span
  118. class="glyphicon glyphicon-ok"></span> Confirmation</span>
  119. </button>
  120. </li>
  121. </ul>
  122. <div class="clr"></div>
  123. </div>
  124. <div class="content">
  125. <div v-if="errors && errors.length" class="alert alert-danger">
  126. <ul>
  127. <li v-for="error in errors">
  128. <div v-html="error"></div>
  129. </li>
  130. </ul>
  131. </div>
  132. <div v-else-if="loading && step != 'payment'">
  133. Chargement ...
  134. </div>
  135. <transition name="slide">
  136. <div id="content-step-date" v-if="step == 'date'">
  137. <div v-if="!loading">
  138. <?php if ($producer->behavior_order_select_distribution == Producer::BEHAVIOR_ORDER_SELECT_DISTRIBUTION_LIST): ?>
  139. <div style="display:none ;">
  140. <?php endif; ?>
  141. <div id="legend">
  142. <div><span id="distribution-date-color"></span> Prochains jours de distribution
  143. </div>
  144. <div><span id="order-date-color"></span> Vos commandes déjà enregistrées</div>
  145. </div>
  146. <div id="calendar">
  147. <v-calendar
  148. is-inline
  149. is-expanded
  150. v-model="date"
  151. mode="single"
  152. color="green"
  153. :columns="calendar.columns"
  154. :formats="calendar.formats"
  155. :theme-styles="calendar.themeStyles"
  156. :attributes="calendar.attrs"
  157. :available-dates="calendar.availableDates"
  158. @dayclick='dayClick'
  159. ></v-calendar>
  160. </div>
  161. <?php if ($producer->behavior_order_select_distribution == Producer::BEHAVIOR_ORDER_SELECT_DISTRIBUTION_LIST): ?>
  162. </div>
  163. <?php endif; ?>
  164. <?php if ($producer->behavior_order_select_distribution == Producer::BEHAVIOR_ORDER_SELECT_DISTRIBUTION_LIST): ?>
  165. <div id="distributions-list">
  166. <?php $incomingDistributions = $distributionManager->findDistributionsIncoming(); ?>
  167. <?php foreach ($incomingDistributions as $distribution): ?>
  168. <?php
  169. $pointSaleDistributions = PointSaleDistribution::searchAll([
  170. 'id_distribution' => $distribution->id,
  171. 'delivery' => 1
  172. ], []);
  173. ?>
  174. <div class="panel panel-default">
  175. <div class="panel-body">
  176. <button class="btn btn-primary" @click="dayClickList"
  177. data-distribution-date="<?= $distribution->date . ' 00:00:00' ?>">
  178. Sélectionner cette distribution
  179. </button>
  180. <span class="date"><?= ucfirst(strftime('%A %d %B', strtotime($distribution->date))); ?></span>
  181. <?php
  182. if ($pointSaleDistributions && count($pointSaleDistributions) > 0) {
  183. echo '<div class="point-sales">';
  184. foreach ($pointSaleDistributions as $pointSaleDistribution) {
  185. if ($pointSaleDistribution->pointSale->status == 1) {
  186. echo $pointSaleDistribution->pointSale->name . '';
  187. if (strlen($pointSaleDistribution->pointSale->locality)) {
  188. echo ' (' . $pointSaleDistribution->pointSale->locality . ')';
  189. }
  190. echo '<br />';
  191. }
  192. }
  193. echo '</div>';
  194. }
  195. ?>
  196. </div>
  197. </div>
  198. <?php endforeach; ?>
  199. </div>
  200. <?php endif; ?>
  201. </div>
  202. </div>
  203. </transition>
  204. <transition name="slide">
  205. <div id="content-step-point-sale" v-if="step == 'point-sale'">
  206. <div v-if="!loading">
  207. <h3>Où souhaitez-vous récupérer votre commande ?</h3>
  208. <table id="points-sale" class="table table-bordered" v-if="pointsSale.length">
  209. <thead>
  210. <tr>
  211. <th>Nom</th>
  212. <th>Localité</th>
  213. <th></th>
  214. </tr>
  215. </thead>
  216. <tbody>
  217. <tr v-for="pointSale in orderedPointsSale"
  218. v-if="pointSale && (producer.option_order_entry_point == 'point-sale' || (producer.option_order_entry_point == 'date' && pointSale.pointSaleDistribution.delivery))"
  219. :class="(pointSaleActive && pointSale.id == pointSaleActive.id) ? 'selected' : ''">
  220. <td class="name">
  221. <span class="the-name">{{ pointSale.name }}</span>
  222. <div class="comment" v-if="pointSale.userPointSale">
  223. {{ pointSale.userPointSale.comment }}
  224. </div>
  225. <div class="comment" v-if="pointSale.infos && pointSale.infos.length > 0"
  226. v-html="pointSale.infos"></div>
  227. </td>
  228. <td class="locality">{{ pointSale.locality }}</td>
  229. <td class="actions">
  230. <template
  231. v-if="(order == null || order.id_point_sale != pointSale.id) && pointSale.maximum_number_orders && pointSale.count_orders && pointSale.count_orders >= pointSale.maximum_number_orders">
  232. <span class="label label-default">
  233. <template v-if="pointSale.is_bread_box">
  234. Déjà réservée
  235. </template>
  236. <template v-else>
  237. Maximum de commande atteint
  238. </template>
  239. </span>
  240. </template>
  241. <template v-else>
  242. <div :class="'form-group' + (pointSale.invalid_code ? ' has-error' : '')">
  243. <div class="input-group"
  244. v-if="pointSale.code && pointSale.code.length > 0">
  245. <span class="input-group-addon"><span
  246. class="glyphicon glyphicon-lock"></span></span>
  247. <input v-model="pointsSaleCodes[pointSale.id]" type="password"
  248. placeholder="Code" class="form-control input-code"/>
  249. </div>
  250. </div>
  251. <div v-if="!user && producer.credit == 1 && pointSale.credit == 1">
  252. <a :href="urlLogin" class="btn btn-default">
  253. <span class="glyphicon glyphicon-log-in"></span>
  254. Connexion obligatoire
  255. </a>
  256. </div>
  257. <div v-else>
  258. <button class="btn btn-primary" @click="pointSaleClick"
  259. :data-code="pointSale.code && pointSale.code.length > 0"
  260. :data-id-point-sale="pointSale.id">
  261. <span class="glyphicon glyphicon-map-marker"></span>
  262. Choisir
  263. </button>
  264. </div>
  265. </template>
  266. </td>
  267. </tr>
  268. </tbody>
  269. </table>
  270. <div class="alert alert-warning" v-else>
  271. Aucun point de vente disponible pour ce jour de distribution.
  272. </div>
  273. </div>
  274. </div>
  275. </transition>
  276. <transition name="slide">
  277. <div id="content-step-products" v-if="step == 'products'">
  278. <div v-if="!loading">
  279. <div v-if="products.length">
  280. <table id="products" class="table table-bordered">
  281. <thead>
  282. <tr>
  283. <th class="photo">Photo</th>
  284. <th class="name">Nom</th>
  285. <th class="price">Prix unitaire</th>
  286. <th class="quantity">Quantité</th>
  287. <th class="total">Total</th>
  288. </tr>
  289. </thead>
  290. <tbody>
  291. <template v-for="category in categories">
  292. <tr v-if="category.id && countProductsByCategory(category)">
  293. <td class="category-name" colspan="5" @click="setCategoryCurrent(category)">
  294. <span v-if="categoryCurrent && categoryCurrent.id == category.id"
  295. class="glyphicon glyphicon-triangle-bottom"></span>
  296. <span v-else class="glyphicon glyphicon-triangle-right"></span>
  297. {{ category.name }}
  298. <span class="label label-default">{{ countProductsByCategory(category) }} produit<template
  299. v-if="countProductsByCategory(category) > 1">s</template></span>
  300. <span v-if="countSelectedProductsByCategory(category) > 0"
  301. class="label label-success">{{ countSelectedProductsByCategory(category) }} produit<template
  302. v-if="countSelectedProductsByCategory(category) > 1">s</template> sélectionné<template
  303. v-if="countSelectedProductsByCategory(category) > 1">s</template></span>
  304. </td>
  305. </tr>
  306. <template
  307. v-if="(categoryCurrent && categoryCurrent.id == category.id) || category.id == null">
  308. <tr v-for="product in products"
  309. v-if="product.id_product_category == category.id && product.productDistribution && product.productDistribution[0] && product.productDistribution[0].active == 1">
  310. <td class="photo">
  311. <img v-if="product.photo.length" class="photo-product"
  312. :src="product.photo"/>
  313. </td>
  314. <td class="name product-name-description-block">
  315. <span class="name">{{ product.name }}</span>
  316. <span class="other">
  317. <span v-if="product.weight">({{ product.weight }}&nbsp;g)</span>
  318. </span>
  319. <span v-if="product.quantity_max > 0 && ((product.quantity_form / product.coefficient_unit == product.quantity_remaining) || ((product.quantity_remaining * product.coefficient_unit) - product.quantity_form) < product.step)"
  320. class="label label-danger">
  321. Épuisé
  322. </span>
  323. <div class="description" v-if="product.description.length">
  324. {{ product.description }}
  325. </div>
  326. <div class="description-long" v-if="product.recipe.length">
  327. <a href="javascript:void(0);" class="show-more-link">En savoir
  328. plus</a>
  329. <div class="content">
  330. {{ product.recipe }}
  331. </div>
  332. </div>
  333. </td>
  334. <td class="price-unit">
  335. <template v-if="productHasPrice(product)">
  336. <div>
  337. {{ formatPrice(getBestProductPrice(product.id,
  338. product.quantity_form)) }}<br/>
  339. <span class="unit">{{ product.wording_unit }}</span>
  340. </div>
  341. <div v-if="productHasPriceWithFromQuantity(product)"
  342. class="alert alert-info decreasing-prices">
  343. <ul>
  344. <li v-for="price in product.prices"
  345. v-if="price.from_quantity > 0">
  346. <strong>{{ formatPrice(price.price_with_tax)
  347. }}</strong><br/>à partir de {{
  348. price.from_quantity }} {{ product.wording_unit_ref
  349. }}
  350. </li>
  351. </ul>
  352. </div>
  353. </template>
  354. </td>
  355. <td class="td-quantity">
  356. <template v-if="productHasPrice(product)">
  357. <div class="input-group">
  358. <span class="input-group-btn">
  359. <button class="btn btn-default btn-moins"
  360. type="button"
  361. @click="productQuantityClick(product, product.unit == 'piece' ? -1 : -parseFloat(product.step))"
  362. :disabled="product.quantity_form == 0"><span
  363. class="glyphicon glyphicon-minus"></span></button>
  364. </span>
  365. <input type="text" v-model="product.quantity_form"
  366. class="form-control quantity" readonly="readonly"/>
  367. <span class="input-group-addon">{{ product.unit == 'piece' ? 'p.' : product.unit }}</span>
  368. <span class="input-group-btn">
  369. <button class="btn btn-default btn-plus"
  370. type="button"
  371. @click="productQuantityClick(product, product.unit == 'piece' ? 1 : parseFloat(product.step))"
  372. :disabled="product.quantity_form == product.quantity_remaining && product.quantity_max > 0"><span
  373. class="glyphicon glyphicon-plus"></span></button>
  374. </span>
  375. </div>
  376. </template>
  377. </td>
  378. <td class="price-total">
  379. <template
  380. v-if="productHasPrice(product) && product.quantity_form > 0">
  381. {{ formatPrice(getBestProductPrice(product.id,
  382. product.quantity_form) * (product.quantity_form /
  383. product.coefficient_unit )) }}
  384. </template>
  385. </td>
  386. </tr>
  387. </template>
  388. </template>
  389. <tr class="total">
  390. <td class="summary" colspan="4">
  391. <template v-if="priceTotal() > 0">
  392. <h3>&gt; Résumé</h3>
  393. <ul>
  394. <li v-for="product in products" v-if="product.quantity_form > 0">
  395. <span class="quantity">{{ product.quantity_form }} {{ product.unit == 'piece' ? 'p.' : product.unit }} x</span>
  396. <span class="name">{{ product.name }}</span>
  397. <!--<span class="other">
  398. <span v-if="product.description.length">/</span>
  399. <span class="description">{{ product.description }}</span>-->
  400. <span class="other">
  401. <span v-if="product.weight">({{ product.weight }}&nbsp;g)</span>
  402. </span>
  403. </li>
  404. </ul>
  405. </template>
  406. </td>
  407. <td class="price-total">{{ priceTotal(true) }}</td>
  408. </tr>
  409. </tbody>
  410. </table>
  411. <div class="block-actions">
  412. <button class="btn btn-primary" @click="changeStep('payment')">Valider</button>
  413. </div>
  414. </div>
  415. <div class="alert alert-warning" v-else>
  416. Aucun produit disponible
  417. </div>
  418. </div>
  419. </div>
  420. </transition>
  421. <transition name="slide">
  422. <div id="content-step-payment" v-if="step == 'payment'">
  423. <div>
  424. <div class="delivery">
  425. <div class="delivery-home" v-if="producer.option_delivery">
  426. <input type="checkbox" name="delivery" id="delivery" v-model="delivery"/>
  427. <label for="delivery">Je souhaite être livré à domicile</label>
  428. </div>
  429. <div class="delivery-address" v-if="delivery">
  430. <label for="deliver-address">Adresse de livraison</label>
  431. <textarea id="deliver-address" v-model="deliveryAddress" class="form-control"
  432. required="required"></textarea>
  433. </div>
  434. </div>
  435. <div class="comment">
  436. <label for="order-comment">Commentaire</label>
  437. <textarea id="order-comment" v-model="comment" class="form-control"></textarea>
  438. </div>
  439. <template
  440. v-if="producer.credit == 1 && pointSaleActive.credit == 1 && (pointSaleActive.credit_functioning == 'mandatory' || (pointSaleActive.credit_functioning == 'user' && user.credit_active)) && !checkCreditLimit(order) ">
  441. <div class="alert alert-danger">
  442. Vous devez
  443. <template v-if="producer.online_payment == 1"><a
  444. href="<?= \Yii::$app->urlManager->createUrl(['credit/add']) ?>">recharger
  445. votre crédit</a></template>
  446. <template v-else>recharger votre crédit</template>
  447. auprès de votre producteur ou supprimer des produits.</span>
  448. Votre producteur n'autorise pas un crédit inférieur
  449. à <strong>{{ formatPrice(producer.credit_limit) }}</strong>.
  450. </div>
  451. <div class="block-actions">
  452. <a class="btn btn-primary"
  453. href="<?= \Yii::$app->urlManager->createUrl(['site/index']) ?>">Retour à
  454. l'accueil</a>
  455. </div>
  456. </template>
  457. <template v-else>
  458. <div class="credit">
  459. <div v-if="user && producer.credit == 1 && pointSaleActive.credit == 1 && (pointSaleActive.credit_functioning != 'user' || (pointSaleActive.credit_functioning == 'user' && user.credit_active))">
  460. <input type="checkbox" id="use-credit" v-model="useCredit" disabled="disabled"
  461. v-if="pointSaleActive.credit_functioning == 'mandatory' || (pointSaleActive.credit_functioning == 'user' && user.credit_active)"/>
  462. <input type="checkbox" id="use-credit" v-model="useCredit" v-else/> <label
  463. for="use-credit">Utiliser mon Crédit ({{ formatPrice(user.credit)
  464. }})</label>
  465. <div class="info" v-if="useCredit">
  466. <template v-if="order == null || order.amount_paid == 0">
  467. <span v-if="checkCreditLimit(order)">{{ priceTotal(true) }} seront débités</span>
  468. <span v-else>
  469. {{ formatPrice(user.credit) }} seront débités. (Limite de crédit à {{ formatPrice(producer.credit_limit) }})<br/>
  470. Restera {{ formatPrice(priceTotal() - user.credit) }} à régler.
  471. </span>
  472. </template>
  473. <template
  474. v-else-if="order != null && order.amount_paid > 0 && order.amount_paid < priceTotal()">
  475. <span v-if="checkCreditLimit(order)">{{ formatPrice(priceTotal() - order.amount_paid) }} seront débités</span>
  476. <span v-else>
  477. {{ formatPrice(user.credit) }} seront débités. (Limite de crédit à {{ formatPrice(producer.credit_limit) }})<br/>
  478. Restera {{ formatPrice(priceTotal() - order.amount_paid - user.credit) }} à régler.
  479. </span>
  480. </template>
  481. <template v-else-if="order != null && order.amount_paid > priceTotal()">
  482. <span>{{ formatPrice(order.amount_paid - priceTotal()) }} seront remboursés</span>
  483. </template>
  484. </div>
  485. </div>
  486. <div v-else>
  487. <span class="glyphicon glyphicon-chevron-right"></span>
  488. <?php if ($producerManager->isOnlinePaymentActiveAndTypeOrder($producer)): ?>
  489. La commande est à payer en ligne lors de l'étape suivante.
  490. <?php elseif ($producer->option_payment_info && strlen($producer->option_payment_info) > 0): ?>
  491. Confirmez votre commande et retrouvez les informations liées au paiement sur la page suivante.
  492. <?php else: ?>
  493. La commande sera à régler sur place.
  494. <?php endif; ?>
  495. </div>
  496. </div>
  497. <div id="signup-guest" v-if="!user && producer.option_allow_order_guest">
  498. <h3>Informations personnelles</h3>
  499. <form action="#">
  500. <div class="form-group field-signupguest-email required">
  501. <label class="control-label" for="signupguest-email">Email</label>
  502. <input type="email" id="signupguest-email" class="form-control"
  503. name="SignupForm[email]">
  504. <p class="help-block help-block-error"></p>
  505. </div>
  506. <!--<div class="form-group field-signupguest-password required">
  507. <label class="control-label" for="signupguest-password">Mot de passe</label>
  508. <input type="password" id="signupguest-password" class="form-control" name="SignupForm[password]">
  509. <p class="help-block help-block-error"></p>
  510. </div>-->
  511. <div class="form-group field-signupguest-firstname required">
  512. <label class="control-label" for="signupguest-firstname">Prénom</label>
  513. <input type="text" id="signupguest-firstname" class="form-control"
  514. name="SignupForm[firstname]">
  515. <p class="help-block help-block-error"></p>
  516. </div>
  517. <div class="form-group field-signupguest-lastname required">
  518. <label class="control-label" for="signupguest-lastname">Nom</label>
  519. <input type="text" id="signupguest-lastname" class="form-control"
  520. name="SignupForm[lastname]">
  521. <p class="help-block help-block-error"></p>
  522. </div>
  523. <div class="form-group field-signupguest-phone required">
  524. <label class="control-label" for="signupguest-phone">Téléphone</label>
  525. <input type="text" id="signupguest-phone" class="form-control"
  526. name="SignupForm[phone]">
  527. <p class="help-block help-block-error"></p>
  528. </div>
  529. </form>
  530. </div>
  531. <div class="block-actions">
  532. <button class="btn btn-primary" disabled="disabled" v-if="disableConfirmButton">Je
  533. confirme ma commande
  534. </button>
  535. <button class="btn btn-primary" v-else @click="confirmClick">Je confirme ma
  536. commande
  537. </button>
  538. </div>
  539. </template>
  540. </div>
  541. </div>
  542. </transition>
  543. </div>
  544. </div>
  545. <div id="infos" v-if="producer != null && producer.order_infos != null && producer.order_infos.length">
  546. <div class="panel panel-default">
  547. <div class="panel-heading">
  548. <i class="glyphicon glyphicon-info-sign"></i> Informations
  549. </div>
  550. <div class="panel-body">
  551. {{ producer.order_infos }}
  552. </div>
  553. </div>
  554. </div>
  555. <div v-if="producer != null && producer.online_payment && producer.option_online_payment_type == 'credit'"
  556. id="credit-online-payment">
  557. <div class="panel panel-default">
  558. <div class="panel-heading">
  559. <i class="glyphicon glyphicon-euro"></i> Paiement en ligne
  560. <a href="<?= \Yii::$app->urlManager->createUrl(['credit/add']) ?>" class="btn btn-sm btn-default"><i
  561. class="glyphicon glyphicon-credit-card"></i> Créditer mon compte</a>
  562. </div>
  563. <div class="panel-body">
  564. Vous utilisez le crédit pour régler vos commandes ? Simplifiez les paiements avec votre producteur
  565. en créditant votre compte par carte bancaire.
  566. </div>
  567. </div>
  568. </div>
  569. <?php
  570. $producer = GlobalParam::getCurrentProducer();
  571. if ($producerManager->hasSpecificDelays($producer)): ?>
  572. <div id="specific-delays" class="panel panel-default">
  573. <div class="panel-heading">
  574. Délais de commande spécifiques
  575. </div>
  576. <div class="panel-body">
  577. <table class="table table-bordered">
  578. <thead>
  579. <tr>
  580. <th>Jour</th>
  581. <th>Délai</th>
  582. </tr>
  583. </thead>
  584. <?php foreach ($producerManager->getSpecificDelays($producer) as $day => $delay): ?>
  585. <?php if ($delay['order_delay'] && $delay['order_deadline']): ?>
  586. <tr>
  587. <td>
  588. <?php
  589. switch ($day) {
  590. case 'monday':
  591. echo 'Lundi';
  592. break;
  593. case 'tuesday':
  594. echo 'Mardi';
  595. break;
  596. case 'wednesday':
  597. echo 'Mercredi';
  598. break;
  599. case 'thursday':
  600. echo 'Jeudi';
  601. break;
  602. case 'friday':
  603. echo 'Vendredi';
  604. break;
  605. case 'saturday':
  606. echo 'Samedi';
  607. break;
  608. case 'sunday':
  609. echo 'Dimanche';
  610. break;
  611. }
  612. ?>
  613. </td>
  614. <td>
  615. <span><?= $delay['order_delay'] ?> jour<?= ($delay['order_delay'] > 1) ? 's' : '' ?></span>
  616. à l'avance,
  617. avant
  618. <span><?= ($delay['order_deadline'] == 24) ? 'minuit' : $delay['order_deadline'] . 'h'; ?></span>
  619. </td>
  620. </tr>
  621. <?php endif; ?>
  622. <?php endforeach; ?>
  623. </table>
  624. </div>
  625. </div>
  626. <?php endif; ?>
  627. </div>
  628. </div>
  629. <script type="text/x-template" id="template-step-date">
  630. <li id="step-date" :class="'col-md-3'+((step == 'date') ? ' active' : '')+(first ? ' first' : '')">
  631. <button @click="changeStep('date')" :class="'btn '+ (step == 'date' ? 'btn-primary' : 'btn-default')"
  632. :disabled="producer && producer.option_order_entry_point == 'point-sale' && !pointSaleActive">
  633. <span class="button-content"><span class="glyphicon glyphicon-time"></span> Date</span></span>
  634. </button>
  635. <div class="info-step" v-if="dateFormat">
  636. {{ dateFormat }}
  637. </div>
  638. </li>
  639. </script>
  640. <script type="text/x-template" id="template-step-point-sale">
  641. <li id="step-point-sale" :class="'col-md-3'+((step == 'point-sale') ? ' active ' : '')+(first ? ' first' : '')">
  642. <button @click="changeStep('point-sale')"
  643. :class="'btn '+ (step == 'point-sale' ? 'btn-primary' : 'btn-default')"
  644. :disabled="producer && (producer.option_order_entry_point == 'date' && step == 'date')">
  645. <span class="button-content"><span
  646. class="glyphicon glyphicon-map-marker"></span> <?= $producerManager->getPointSaleWording($producer); ?></span>
  647. </button>
  648. <div class="info-step" v-if="pointSaleActive">
  649. {{ pointSaleActive.name }}
  650. </div>
  651. </li>
  652. </script>