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

189 行
7.7KB

  1. /**
  2. * Copyright Guillaume Bourgeois (2018)
  3. *
  4. * contact@souke.fr
  5. *
  6. * Ce logiciel est un programme informatique servant à aider les producteurs
  7. * à distribuer leur production en circuits courts.
  8. *
  9. * Ce logiciel est régi par la licence CeCILL soumise au droit français et
  10. * respectant les principes de diffusion des logiciels libres. Vous pouvez
  11. * utiliser, modifier et/ou redistribuer ce programme sous les conditions
  12. * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
  13. * sur le site "http://www.cecill.info".
  14. *
  15. * En contrepartie de l'accessibilité au code source et des droits de copie,
  16. * de modification et de redistribution accordés par cette licence, il n'est
  17. * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
  18. * seule une responsabilité restreinte pèse sur l'auteur du programme, le
  19. * titulaire des droits patrimoniaux et les concédants successifs.
  20. *
  21. * A cet égard l'attention de l'utilisateur est attirée sur les risques
  22. * associés au chargement, à l'utilisation, à la modification et/ou au
  23. * développement et à la reproduction du logiciel par l'utilisateur étant
  24. * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
  25. * manipuler et qui le réserve donc à des développeurs et des professionnels
  26. * avertis possédant des connaissances informatiques approfondies. Les
  27. * utilisateurs sont donc invités à charger et tester l'adéquation du
  28. * logiciel à leurs besoins dans des conditions permettant d'assurer la
  29. * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
  30. * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
  31. *
  32. * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
  33. * pris connaissance de la licence CeCILL, et que vous en avez accepté les
  34. * termes.
  35. */
  36. var selector = '#app-report-index';
  37. if($(selector).length) {
  38. var app = new Vue({
  39. el: selector,
  40. data: {
  41. loading: true,
  42. showLoading: true,
  43. showReport: false,
  44. tableReport: [],
  45. currentSection: 'users',
  46. sections: [
  47. {
  48. name: 'Utilisateurs',
  49. id: 'users',
  50. icon: 'fa-users',
  51. },
  52. {
  53. name: 'Points de vente',
  54. id: 'points-sale',
  55. icon: 'fa-map-marker',
  56. },
  57. {
  58. name: 'Distributions',
  59. id: 'distributions',
  60. icon: 'fa-calendar',
  61. }
  62. ],
  63. termSearchUser: '',
  64. usersArray: [],
  65. pointsSaleArray: [],
  66. distributionYearsArray: [],
  67. distributionYear: null,
  68. distributionsByMonthArray: []
  69. },
  70. mounted: function () {
  71. this.init();
  72. },
  73. methods: {
  74. init: function () {
  75. var app = this;
  76. axios.get("ajax-init", {params: {}})
  77. .then(function (response) {
  78. app.usersArray = response.data.usersArray;
  79. app.pointsSaleArray = response.data.pointsSaleArray;
  80. app.distributionYearsArray = response.data.distributionYearsArray;
  81. app.distributionYear = app.distributionYearsArray[app.distributionYearsArray.length - 1];
  82. app.distributionsByMonthArray = response.data.distributionsByMonthArray;
  83. app.loading = false;
  84. app.showLoading = false;
  85. });
  86. },
  87. changeSection: function (section) {
  88. this.currentSection = section.id;
  89. },
  90. countUsers: function () {
  91. var count = 0;
  92. for (var i = 0; i < this.usersArray.length; i++) {
  93. if (this.usersArray[i].checked) {
  94. count++;
  95. }
  96. }
  97. return count;
  98. },
  99. countPointsSale: function () {
  100. var count = 0;
  101. for (var i = 0; i < this.pointsSaleArray.length; i++) {
  102. if (this.pointsSaleArray[i].checked) {
  103. count++;
  104. }
  105. }
  106. return count;
  107. },
  108. countDistributions: function () {
  109. var count = 0;
  110. for (var i in this.distributionsByMonthArray) {
  111. for (var j = 0; j < this.distributionsByMonthArray[i].distributions.length; j++) {
  112. if (this.distributionsByMonthArray[i].distributions[j].checked) {
  113. count++;
  114. }
  115. }
  116. }
  117. return count;
  118. },
  119. countDistributionsByMonth: function (month) {
  120. var count = 0;
  121. for (var j = 0; j < this.distributionsByMonthArray[month].distributions.length; j++) {
  122. if (this.distributionsByMonthArray[month].distributions[j].checked) {
  123. count++;
  124. }
  125. }
  126. return count;
  127. },
  128. selectDistributions: function (month) {
  129. var countDistributions = this.countDistributionsByMonth(month);
  130. for (var j = 0; j < this.distributionsByMonthArray[month].distributions.length; j++) {
  131. Vue.set(this.distributionsByMonthArray[month].distributions[j], 'checked', countDistributions ? false : true);
  132. }
  133. this.reportChange();
  134. },
  135. generateReport: function (isDownload) {
  136. var app = this;
  137. app.showLoading = true;
  138. var data = new FormData();
  139. var idsUsersArray = [];
  140. for (var i = 0; i < app.usersArray.length; i++) {
  141. if (app.usersArray[i].checked) {
  142. idsUsersArray.push(app.usersArray[i].user_id);
  143. }
  144. }
  145. var idsPointsSaleArray = [];
  146. for (var i = 0; i < app.pointsSaleArray.length; i++) {
  147. if (app.pointsSaleArray[i].checked) {
  148. idsPointsSaleArray.push(app.pointsSaleArray[i].id);
  149. }
  150. }
  151. var idsDistributionsArray = [];
  152. for (var i in this.distributionsByMonthArray) {
  153. for (var j = 0; j < this.distributionsByMonthArray[i].distributions.length; j++) {
  154. if (this.distributionsByMonthArray[i].distributions[j].checked) {
  155. idsDistributionsArray.push(app.distributionsByMonthArray[i].distributions[j].id);
  156. }
  157. }
  158. }
  159. data.append('isDownload', isDownload ? 1 : 0);
  160. data.append('users', idsUsersArray);
  161. data.append('pointsSale', idsPointsSaleArray);
  162. data.append('distributions', idsDistributionsArray);
  163. axios.post("ajax-report", data)
  164. .then(function (response) {
  165. app.showLoading = false;
  166. if(isDownload) {
  167. saveData(response.data, 'rapport.csv');
  168. }
  169. else {
  170. app.tableReport = response.data;
  171. app.showReport = true;
  172. }
  173. });
  174. },
  175. reportChange: function () {
  176. this.showReport = false;
  177. }
  178. }
  179. });
  180. }