milestone.html 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. {% extends "layout.html" %}
  2. {% block title %}{% if milestone.name.len() > 0 %}{{milestone.name}}{%else%}Add Milestone{% endif %}{% endblock %}
  3. {% block description %}{{milestone.description}}{% endblock %}
  4. {% block head %}
  5. <style>
  6. </style>
  7. {% endblock %}
  8. {% block content %}
  9. <div class="container">
  10. <div class="row justified">
  11. <div class+="content">
  12. <div class="backed col-sm-12 col-md-12 col-lg-12">
  13. <h1>Milestone {{milestone.name}}</h1>
  14. {% if milestone.key.to_string() != "00000000-0000-0000-0000-000000000000" %}
  15. <a class="button center" href="/note/add/Milestone/{{milestone.key}}">➕ Add Note</a>
  16. <a class="button center" href="/file/add/Milestone/{{milestone.key}}">➕ Attach File</a>
  17. <button id="delete" class="delete_button center">🗑️ Delete</button>
  18. {% endif %}
  19. <div class="row justified">
  20. <div class="content">
  21. <form id="add_milestone_form">
  22. <div>
  23. <label for="name">Name</label>
  24. <input type="text" name="name" id="name" placeholder="Name" value="{{milestone.name}}" />
  25. </div>
  26. <div>
  27. <label for="description">Description</label>
  28. <textarea name="description" id="description" placeholder="Description"
  29. value="{{milestone.description}}">{{milestone.description}}</textarea>
  30. </div>
  31. <div>
  32. <label for="tags">Tags</label>
  33. <input type="text" name="tags" id="tags" placeholder="Tags,seperated,by,commas"
  34. value="{{milestone.tags}}" />
  35. </div>
  36. <label for="estimated_quarter_days">Estimated Quarter Work Days</label>
  37. <input type="number" id="estimated_quarter_days" name="estimated_quarter_days" min="1" max="1000"
  38. value="{{milestone.estimated_quarter_days}}">
  39. <label for="start">Start Date</label>
  40. <input id="start" type="date" name="start" />
  41. <label for="due">Due Date</label>
  42. <input id="due" type="date" name="due" />
  43. <div>
  44. <input type="submit" class="add_button"
  45. value="{% if milestone.name.len() == 0%}Create Milestone!{%else%}Update Milestone{% endif %}" />
  46. </div>
  47. </form>
  48. </div>
  49. </div>
  50. </div>
  51. </div>
  52. </div>
  53. </div>
  54. <script>
  55. window.addEventListener('load', function () {
  56. {% if milestone.key.to_string() != "00000000-0000-0000-0000-000000000000" %}
  57. send_delete("delete", "/milestone/{{milestone.key}}", (deleted, res) => {
  58. if (deleted) {
  59. window.location.href = `/project/{{milestone.project_key}}`
  60. }
  61. })
  62. {% endif %}
  63. post_form("add_milestone_form", "/milestone", data => {
  64. const key = "{{milestone.key}}"
  65. data.key = key == "" ? "00000000-0000-0000-0000-000000000000" : key
  66. data.organization_key = "{{user.organization_key}}"
  67. data.owner_key = "{{user.key}}"
  68. data.project_key = "{{milestone.project_key}}"
  69. data.name = data.name || "";
  70. data.description = data.description || "";
  71. data.tags = data.tags || "";
  72. data.estimated_quarter_days = parseInt(data.estimated_quarter_days || "0");
  73. data.start = Math.floor(new Date(data.start).getTime() / 1000);
  74. data.due = Math.floor(new Date(data.due).getTime() / 1000);
  75. data.created = data.created || 0;
  76. data.updated = data.updated || 0;
  77. return data;
  78. }, (response_text) => {
  79. const object = JSON.parse(response_text);
  80. window.location.href = `/milestone/${object.key}`
  81. });
  82. let due = parseInt("{{milestone.due}}");
  83. document.getElementById("due").value = (due == 0 ? new Date() : new Date(due * 1000)).toISOString().split('T')[0]
  84. let start = parseInt("{{milestone.start}}");
  85. document.getElementById("start").value = (start == 0 ? new Date() : new Date(start * 1000)).toISOString().split('T')[0]
  86. })
  87. </script>
  88. {% endblock %}