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.

3 jaren geleden
3 jaren geleden
3 jaren geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491
  1. <?php
  2. /**
  3. * Copyright La boîte à pain (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 yii\helpers\Html;
  38. use yii\widgets\ActiveForm;
  39. use common\helpers\Url;
  40. use common\models\Producer;
  41. \backend\assets\VuejsProducerUpdateAsset::register($this);
  42. $this->setTitle('Paramètres');
  43. $this->addBreadcrumb($this->getTitle());
  44. ?>
  45. <script>
  46. var appInitValues = {
  47. isAdmin: <?= (int)User::isCurrentAdmin() ?>
  48. };
  49. </script>
  50. <div class="user-update" id="app-producer-update">
  51. <div id="nav-params">
  52. <button v-for="section in sectionsArray" v-if="!section.isAdminSection || (section.isAdminSection && isAdmin)"
  53. :class="'btn '+((currentSection == section.name) ? 'btn-primary' : 'btn-default')"
  54. @click="changeSection(section)">
  55. {{ section.nameDisplay }}
  56. <span class="glyphicon glyphicon-triangle-bottom"></span>
  57. </button>
  58. </div>
  59. <div class="user-form">
  60. <?php $form = ActiveForm::begin([
  61. 'enableClientValidation' => false,
  62. ]); ?>
  63. <div>
  64. <div v-show="currentSection == 'general'" class="panel panel-default">
  65. <div class="panel-body">
  66. <h4>Logiciel</h4>
  67. <?= $form->field($model, 'option_display_message_new_opendistrib_version')
  68. ->dropDownList([
  69. 1 => 'Oui',
  70. 0 => 'Non'
  71. ], []); ?>
  72. <h4>Accès</h4>
  73. <?= $form->field($model, 'active')
  74. ->dropDownList([
  75. 0 => 'Non',
  76. 1 => 'Oui'
  77. ], [])
  78. ->label('En ligne')
  79. ->hint('Activez cette option pour rendre votre espace visible à vos clients.'); ?>
  80. <?= $form->field($model, 'code')->hint("Saisissez ce champs si vous souhaitez protéger l'accès à votre espace par un code, sinon laissez-le vide.<br />"
  81. . "Ce code est à communiquer à vos clients pour qu'ils puissent ajouter votre espace à leurs favoris.<br />"
  82. . "<a href=\"" . Yii::$app->urlManager->createUrl(['communicate/index']) . "\">Cliquez ici</a> pour télécharger un mode d'emploi comprenant ce code à distribuer à vos clients.") ?>
  83. <h4>Général</h4>
  84. <?= $form->field($model, 'name') ?>
  85. <?= $form->field($model, 'type') ?>
  86. <?= $form->field($model, 'description')
  87. ->textarea(['rows' => 4])
  88. ->hint('Affiché sur la page d\'accueil') ?>
  89. <?= $form->field($model, 'address')
  90. ->textarea(['rows' => 4]) ?>
  91. <?= $form->field($model, 'postcode') ?>
  92. <?= $form->field($model, 'city') ?>
  93. <h4>Apparence</h4>
  94. <?= $form->field($model, 'background_color_logo') ?>
  95. <?= $form->field($model, 'logo')->fileInput() ?>
  96. <?php
  97. if (strlen($model->logo)) {
  98. echo '<img src="' . Yii::$app->urlManagerProducer->getHostInfo() . '/' . Yii::$app->urlManagerProducer->baseUrl . '/uploads/' . $model->logo . '" width="200px" /><br />';
  99. echo '<input type="checkbox" name="delete_logo" id="delete_logo" /> <label for="delete_logo">Supprimer le logo</label><br /><br />';
  100. }
  101. ?>
  102. <?= $form->field($model, 'photo')->fileInput()->hint('Format idéal : 900 x 150 px') ?>
  103. <?php
  104. if (strlen($model->photo)) {
  105. echo '<img src="' . Yii::$app->urlManagerProducer->getHostInfo() . '/' . Yii::$app->urlManagerProducer->baseUrl . '/uploads/' . $model->photo . '" width="400px" /><br />';
  106. echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label><br /><br />';
  107. }
  108. ?>
  109. <?= $form->field($model, 'behavior_home_point_sale_day_list')
  110. ->dropDownList([
  111. Producer::BEHAVIOR_HOME_POINT_SALE_DAY_LIST_WEEK => 'Jours de la semaine',
  112. Producer::BEHAVIOR_HOME_POINT_SALE_DAY_LIST_INCOMING_DISTRIBUTIONS => 'Distributions à venir',
  113. ]); ?>
  114. <?= $form->field($model, 'option_point_sale_wording') ?>
  115. </div>
  116. </div>
  117. <div v-show="currentSection == 'tableau-bord'" class="panel panel-default">
  118. <div class="panel-body">
  119. <h4>Tableau de bord administration</h4>
  120. <?= $form->field($model, 'option_dashboard_number_distributions')
  121. ->dropDownList([
  122. 3 => '3',
  123. 6 => '6',
  124. 9 => '9',
  125. 12 => '12',
  126. 15 => '15',
  127. 18 => '18',
  128. 21 => '21',
  129. 24 => '24',
  130. 27 => '27',
  131. 30 => '30',
  132. ], []); ?>
  133. <?= $form->field($model, 'option_dashboard_date_start')->textInput([
  134. 'class' => 'datepicker form-control'
  135. ]); ?>
  136. <?= $form->field($model, 'option_dashboard_date_end')->textInput([
  137. 'class' => 'datepicker form-control'
  138. ]); ?>
  139. </div>
  140. </div>
  141. <div v-show="currentSection == 'prise-commande'" class="panel panel-default">
  142. <div class="panel-body">
  143. <h4>Horaires</h4>
  144. <?php
  145. $delaysArray = [
  146. 1 => '1 jour',
  147. 2 => '2 jours',
  148. 3 => '3 jours',
  149. 4 => '4 jours',
  150. 5 => '5 jours',
  151. 6 => '6 jours',
  152. 7 => '7 jours',
  153. ];
  154. $deadlinesArray = [
  155. 24 => 'Minuit',
  156. 23 => '23h',
  157. 22 => '22h',
  158. 21 => '21h',
  159. 20 => '20h',
  160. 19 => '19h',
  161. 18 => '18h',
  162. 17 => '17h',
  163. 16 => '16h',
  164. 15 => '15h',
  165. 14 => '14h',
  166. 13 => '13h',
  167. 12 => '12h',
  168. 11 => '11h',
  169. 10 => '10h',
  170. 9 => '9h',
  171. 8 => '8h',
  172. ];
  173. $daysArray = [
  174. 'monday' => 'Lundi',
  175. 'tuesday' => 'Mardi',
  176. 'wednesday' => 'Mercredi',
  177. 'thursday' => 'Jeudi',
  178. 'friday' => 'Vendredi',
  179. 'saturday' => 'Samedi',
  180. 'sunday' => 'Dimanche'
  181. ];
  182. ?>
  183. <div class="row">
  184. <div class="col-md-2">
  185. <strong>Par défaut</strong>
  186. </div>
  187. <div class="col-md-5">
  188. <?= $form->field($model, 'order_delay')
  189. ->dropDownList($delaysArray, ['prompt' => '--'])
  190. ->hint('Si <strong>1 jour</strong> est sélectionné, le client pourra commander jusqu\'à la veille de la production.<br />'
  191. . 'Si <strong>2 jours</strong> est sélectionné, le client pourra commander jusqu\'à l\'avant-veille de la production, etc.'); ?>
  192. </div>
  193. <div class="col-md-5">
  194. <?= $form->field($model, 'order_deadline')
  195. ->dropDownList($deadlinesArray, ['prompt' => '--'])
  196. ->hint('Heure limite jusqu\'à laquelle les clients peuvent commander pour satisfaire le délai de commande.<br />'
  197. . 'Par exemple, si <strong>2 jours</strong> est sélectionné dans le délai de commande, le client devra commander l\'avant-veille de la production avant l\'heure précisée ici.'); ?>
  198. </div>
  199. </div>
  200. <?php foreach ($daysArray as $day => $labelDay): ?>
  201. <div class="row">
  202. <div class="col-md-2">
  203. <strong><?= $labelDay ?></strong>
  204. </div>
  205. <div class="col-md-5">
  206. <?= $form->field($model, 'order_delay_' . $day, [
  207. 'template' => '{input}',
  208. ])->dropDownList($delaysArray, ['prompt' => '--'])->label(''); ?>
  209. </div>
  210. <div class="col-md-5">
  211. <?= $form->field($model, 'order_deadline_' . $day, [
  212. 'template' => '{input}',
  213. ])->dropDownList($deadlinesArray, ['prompt' => '--'])->label(''); ?>
  214. </div>
  215. </div>
  216. <?php endforeach; ?>
  217. <h4>Informations</h4>
  218. <?= $form->field($model, 'order_infos')
  219. ->textarea(['rows' => 6])
  220. ->hint('Affichées au client lors de sa commande') ?>
  221. <?= $form->field($model, 'option_payment_info')
  222. ->textarea(['rows' => 6])
  223. ->hint('Affichées au client à la fin de la prise de commande') ?>
  224. <h4>Tunnel de commande</h4>
  225. <?= $form->field($model, 'option_order_entry_point')
  226. ->dropDownList([
  227. Producer::ORDER_ENTRY_POINT_DATE => 'Date',
  228. Producer::ORDER_ENTRY_POINT_POINT_SALE => 'Point de vente',
  229. ], []); ?>
  230. <?= $form->field($model, 'behavior_order_select_distribution')
  231. ->dropDownList([
  232. Producer::BEHAVIOR_ORDER_SELECT_DISTRIBUTION_CALENDAR => 'Calendrier',
  233. Producer::BEHAVIOR_ORDER_SELECT_DISTRIBUTION_LIST => 'Liste',
  234. ]); ?>
  235. <?= $form->field($model, 'option_delivery')
  236. ->dropDownList([
  237. 0 => 'Non',
  238. 1 => 'Oui'
  239. ], []); ?>
  240. <?php echo $form->field($model, 'option_allow_order_guest')
  241. ->dropDownList([
  242. 0 => 'Non',
  243. 1 => 'Oui'
  244. ], []); ?>
  245. <h4>Notifications</h4>
  246. <?= $form->field($model, 'option_notify_producer_order_summary')
  247. ->dropDownList([
  248. 0 => 'Non',
  249. 1 => 'Oui',
  250. ], []); ?>
  251. <?= $form->field($model, 'option_email_confirm')
  252. ->dropDownList([
  253. 0 => 'Non',
  254. 1 => 'Oui'
  255. ], []); ?>
  256. <?= $form->field($model, 'option_email_confirm_producer')
  257. ->dropDownList([
  258. 0 => 'Non',
  259. 1 => 'Oui'
  260. ], []); ?>
  261. <h4>Exports</h4>
  262. <?= $form->field($model, 'option_csv_separator')
  263. ->dropDownList([
  264. ';' => 'Point-virgule (;)',
  265. ',' => 'Virgule (,)'
  266. ], []); ?>
  267. <?= $form->field($model, 'option_csv_export_all_products')
  268. ->dropDownList([
  269. 0 => 'Non',
  270. 1 => 'Oui'
  271. ], []); ?>
  272. <?= $form->field($model, 'option_csv_export_by_piece')
  273. ->dropDownList([
  274. 0 => 'Non',
  275. 1 => 'Oui'
  276. ], []); ?>
  277. <?= $form->field($model, 'option_display_export_grid')
  278. ->dropDownList([
  279. 0 => 'Non',
  280. 1 => 'Oui'
  281. ], []); ?>
  282. <?= $form->field($model, 'option_export_display_product_reference')
  283. ->dropDownList([
  284. 0 => 'Non',
  285. 1 => 'Oui'
  286. ], []); ?>
  287. <h4>Divers</h4>
  288. <?= $form->field($model, 'option_order_reference_type')
  289. ->dropDownList([
  290. Producer::ORDER_REFERENCE_TYPE_NONE => '--',
  291. Producer::ORDER_REFERENCE_TYPE_YEARLY => 'Annuelle',
  292. ], []); ?>
  293. <?= $form->field($model, 'option_behavior_cancel_order')
  294. ->dropDownList([
  295. Producer::BEHAVIOR_DELETE_ORDER_DELETE => 'Suppression de la commande',
  296. Producer::BEHAVIOR_DELETE_ORDER_STATUS => 'Passage de la commande en statut "supprimé"',
  297. ], []); ?>
  298. </div>
  299. </div>
  300. <div v-show="currentSection == 'abonnements'" class="panel panel-default">
  301. <div class="panel-body">
  302. <h4>Abonnements</h4>
  303. <?= $form->field($model, 'user_manage_subscription')
  304. ->dropDownList([
  305. 0 => 'Non',
  306. 1 => 'Oui',
  307. ], []); ?>
  308. </div>
  309. </div>
  310. <div v-show="currentSection == 'credit-payment'" class="panel panel-default">
  311. <div class="panel-body">
  312. <h4>Crédit</h4>
  313. <?= $form->field($model, 'credit')
  314. ->dropDownList([
  315. 0 => 'Non',
  316. 1 => 'Oui',
  317. ], [])
  318. ->label('Activer le système de Crédit')
  319. ->hint('Le système de Crédit permet à vos clients d\'avoir un compte prépayé sur le site <em>distrib</em>.<br />'
  320. . 'Ils créditent leur compte en vous donnant la somme de leur choix et c\'est ensuite à vous de ' . Html::a('mettre à jour', ['user/index']) . ' leur Crédit en ligne.<br />'
  321. . 'Ceci fait, les clients paient leur commande directement via leur Crédit.'); ?>
  322. <?= $form->field($model, 'credit_functioning')
  323. ->dropDownList([
  324. Producer::CREDIT_FUNCTIONING_OPTIONAL => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_OPTIONAL],
  325. Producer::CREDIT_FUNCTIONING_MANDATORY => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_MANDATORY],
  326. Producer::CREDIT_FUNCTIONING_USER => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_USER],
  327. ], [])->hint(Producer::HINT_CREDIT_FUNCTIONING); ?>
  328. <?= $form->field($model, 'use_credit_checked_default')
  329. ->dropDownList([
  330. 0 => 'Non',
  331. 1 => 'Oui',
  332. ], [])->hint('Utilisation optionnelle du Crédit.'); ?>
  333. <?= $form->field($model, 'credit_limit_reminder', [
  334. 'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>{hint}',
  335. ])
  336. ->hint("Une relance est envoyé au client dès que ce seuil est dépassé."); ?>
  337. <?= $form->field($model, 'credit_limit', [
  338. 'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>{hint}',
  339. ])->hint('Limite de crédit que l\'utilisateur ne pourra pas dépasser. Laisser vide pour permettre un crédit négatif et infini.'); ?>
  340. <h4>Paiement en ligne</h4>
  341. <?= $form->field($model, 'online_payment')
  342. ->dropDownList([
  343. 0 => 'Non',
  344. 1 => 'Oui',
  345. ], []); ?>
  346. <?= $form->field($model, 'option_online_payment_minimum_amount')
  347. ->hint('Valeur par défaut si non défini : '.Producer::ONLINE_PAYMENT_MINIMUM_AMOUNT_DEFAULT.' €')
  348. ->textInput(); ?>
  349. <?= $form->field($model, 'option_stripe_mode_test')->dropDownList([
  350. 0 => 'Non',
  351. 1 => 'Oui'
  352. ], []); ?>
  353. <?= $form->field($model, 'option_online_payment_type')
  354. ->dropDownList([
  355. 'credit' => 'Alimentation du crédit',
  356. 'order' => 'Paiement à la commande',
  357. ], []); ?>
  358. <?= $form->field($model, 'option_stripe_public_key')->textInput(); ?>
  359. <?= $form->field($model, 'option_stripe_private_key')->textInput(); ?>
  360. <?= $form->field($model, 'option_stripe_endpoint_secret')->textInput(); ?>
  361. </div>
  362. </div>
  363. <div v-show="currentSection == 'infos'" class="panel panel-default">
  364. <div class="panel-body">
  365. <h4>Informations légales</h4>
  366. <?= $form->field($model, 'mentions')
  367. ->textarea(['rows' => 15])
  368. ->hint('') ?>
  369. <?= $form->field($model, 'gcs')
  370. ->textarea(['rows' => 15])
  371. ->hint('') ?>
  372. </div>
  373. </div>
  374. <div v-show="currentSection == 'logiciels-caisse'" class="panel panel-default">
  375. <div class="panel-body">
  376. <h4>Tiller</h4>
  377. <?= $form->field($model, 'tiller')
  378. ->dropDownList([
  379. 0 => 'Non',
  380. 1 => 'Oui'
  381. ], [])
  382. ->label('Synchroniser avec Tiller'); ?>
  383. <?= $form->field($model, 'tiller_provider_token'); ?>
  384. <?= $form->field($model, 'tiller_restaurant_token'); ?>
  385. </div>
  386. </div>
  387. <div v-show="currentSection == 'facturation'" class="panel panel-default">
  388. <div class="panel-body">
  389. <h4>Facturation</h4>
  390. <?= $form->field($model, 'id_tax_rate_default')
  391. ->dropDownList(ArrayHelper::map(TaxRate::find()->all(), 'id', function ($model) {
  392. return $model->name;
  393. }))
  394. ->label('TVA à appliquer par défaut'); ?>
  395. <?= $form->field($model, 'option_tax_calculation_method')
  396. ->dropDownList(Document::$taxCalculationMethodArray); ?>
  397. <?= $form->field($model, 'option_export_evoliz')->dropDownList([
  398. 0 => 'Non',
  399. 1 => 'Oui'
  400. ]); ?>
  401. <?= $form->field($model, 'document_quotation_prefix'); ?>
  402. <?= $form->field($model, 'document_quotation_first_reference'); ?>
  403. <?= $form->field($model, 'document_quotation_duration'); ?>
  404. <?= $form->field($model, 'document_invoice_prefix'); ?>
  405. <?= $form->field($model, 'document_invoice_first_reference'); ?>
  406. <?= $form->field($model, 'document_delivery_note_prefix'); ?>
  407. <?= $form->field($model, 'document_delivery_note_first_reference'); ?>
  408. <?= $form->field($model, 'document_display_orders_invoice')->dropDownList([
  409. 0 => 'Non',
  410. 1 => 'Oui'
  411. ]); ?>
  412. <?= $form->field($model, 'document_display_orders_delivery_note')->dropDownList([
  413. 0 => 'Non',
  414. 1 => 'Oui'
  415. ]); ?>
  416. <?= $form->field($model, 'document_display_prices_delivery_note')->dropDownList([
  417. 0 => 'Non',
  418. 1 => 'Oui'
  419. ]); ?>
  420. <?= $form->field($model, 'document_display_product_description')->dropDownList([
  421. 0 => 'Non',
  422. 1 => 'Oui'
  423. ]); ?>
  424. <?= $form->field($model, 'option_document_price_decimals')->dropDownList([
  425. 2 => '2',
  426. 3 => '3'
  427. ]); ?>
  428. <?= $form->field($model, 'document_infos_bottom')
  429. ->textarea(['rows' => 15]) ?>
  430. <?= $form->field($model, 'document_infos_quotation')
  431. ->textarea(['rows' => 15]) ?>
  432. <?= $form->field($model, 'document_infos_invoice')
  433. ->textarea(['rows' => 15]) ?>
  434. <?= $form->field($model, 'document_infos_delivery_note')
  435. ->textarea(['rows' => 15]) ?>
  436. </div>
  437. </div>
  438. <div class="form-group">
  439. <?= Html::submitButton('Mettre à jour', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
  440. </div>
  441. </div>
  442. <?php ActiveForm::end(); ?>
  443. </div>
  444. </div>