sprint_end.html 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. {% extends '_layout.html' %}
  2. {% block title %}
  3. Clotûre de {{ sprint }}
  4. {% endblock %}
  5. {% block breadcrumb %}
  6. <li><a href="{% url 'index' %}">Accueil</a></li>
  7. <li><a>Clotûre du {{ sprint }}</a></li>
  8. {% endblock %}
  9. {% block main %}
  10. <header>
  11. <div class="flex-row">
  12. <h2 class="flex-extend">Clotûre du {{ sprint }}</h2>
  13. <span>
  14. </span>
  15. </div>
  16. </header>
  17. <h4>Clore les stories</h4>
  18. <table>
  19. {% for story in sprint.stories.all|dictsort:"id" %}
  20. <tr data-id="{{ story.id }}">
  21. <td class="btn-cell">
  22. {% if story.closed %}
  23. <a href="" class="story_close button special icon fa-check tool-btn already-checked"></a>
  24. {% else %}
  25. <a href="" class="story_close button special icon fa-check tool-btn" title="Clôre"></a>
  26. {% endif %}
  27. </td>
  28. <td class="btn-cell-2">
  29. {% if story.closed %}
  30. <a class="button special icon fa-mail-forward tool-btn disabled"></a>
  31. {% else %}
  32. <a href="" class="story_reaffect button special icon fa-mail-forward tool-btn" title="Ré-affecter à {{ next_sprint }}"></a>
  33. {% endif %}
  34. </td>
  35. <td><a href="{% url 'story_details' story_id=story.id %}">{{ story.name }}</a></td>
  36. <td width="1%">{% if story.weight %}<span>{% include 'weight_svg.html' with weight=story.weight h=20 %}</span>{% endif %}</td>
  37. </tr>
  38. {% endfor %}
  39. </table>
  40. <h4>Rétrospective</h4>
  41. <form id="retro-section" action="." method="post" enctype="multipart/form-data">
  42. {% csrf_token %}
  43. {{ form.retro }}
  44. <div class="flex-row flex-end" style="margin-top: 10px;">
  45. <input type="submit" value="Enregistrer et clôre le sprint">
  46. </div>
  47. </form>
  48. <script>
  49. function csrfSafeMethod(method) {
  50. // these HTTP methods do not require CSRF protection
  51. return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
  52. }
  53. function getCookie(name) {
  54. var cookieValue = null;
  55. if (document.cookie && document.cookie !== '') {
  56. var cookies = document.cookie.split(';');
  57. for (var i = 0; i < cookies.length; i++) {
  58. var cookie = jQuery.trim(cookies[i]);
  59. // Does this cookie string begin with the name we want?
  60. if (cookie.substring(0, name.length + 1) === (name + '=')) {
  61. cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
  62. break;
  63. }
  64. }
  65. }
  66. return cookieValue;
  67. }
  68. var csrftoken = getCookie('csrftoken');
  69. $(".story_close").click(function(event) {
  70. event.preventDefault();
  71. var story_tr = $(this).closest('tr');
  72. var story_id = story_tr.data('id');
  73. $.ajax({
  74. type: "POST",
  75. url: "/stories/axclose/" + story_id + "/",
  76. data: '{story_id:' + story_id + '}',
  77. contentType: "application/json; charset=utf-8",
  78. dataType: "json",
  79. beforeSend: function(xhr, settings) {
  80. if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
  81. xhr.setRequestHeader("X-CSRFToken", csrftoken);
  82. }
  83. },
  84. success: function (response) {
  85. story_tr.find('.btn-cell').html('<a class="button special icon fa-check tool-btn already-checked"></a>');
  86. story_tr.find('.btn-cell-2').html('<a class="button special icon fa-mail-forward tool-btn disabled"></a>');
  87. },
  88. failure: function (response) {
  89. alert(response.responseText);
  90. },
  91. error: function (response) {
  92. alert(response.responseText);
  93. }
  94. });
  95. });
  96. $(".story_reaffect").click(function(event) {
  97. event.preventDefault();
  98. var story_tr = $(this).closest('tr');
  99. var story_id = story_tr.data('id');
  100. $.ajax({
  101. type: "POST",
  102. url: "/stories/axreaffect/" + story_id + "/",
  103. data: '{story_id:' + story_id + '}',
  104. contentType: "application/json; charset=utf-8",
  105. dataType: "json",
  106. beforeSend: function(xhr, settings) {
  107. if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
  108. xhr.setRequestHeader("X-CSRFToken", csrftoken);
  109. }
  110. },
  111. success: function (response) {
  112. story_tr.find('.btn-cell').html('<a class="button special icon fa-check tool-btn disabled"></a>');
  113. story_tr.find('.btn-cell-2').html('<a class="button special icon fa-mail-forward tool-btn already-checked"></a>');
  114. },
  115. failure: function (response) {
  116. alert(response.responseText);
  117. },
  118. error: function (response) {
  119. alert(response.responseText);
  120. }
  121. });
  122. });
  123. $(".retro-section input").click(function (event) {
  124. if (confirm('Le sprint courant va être marqué comme terminé, continuer?')) {
  125. return true;
  126. }
  127. });
  128. </script>
  129. {% endblock %}