task.html 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. {% extends "layout.html" %}
  2. {% block title %}{% if task.name.len() > 0 %}{{task.name}}{%else%}Add Task{% endif %}{% endblock %}
  3. {% block description %}{{task.description}}{% endblock %}
  4. {% block head %}
  5. <style>
  6. </style>
  7. {% endblock %}
  8. {% block content %}
  9. <div class="container">
  10. <div class="row justified">
  11. <a href="/project/{{task.project_key}}">Back To Project</a>
  12. <div class="backed col-sm-12 col-md-12 col-lg-12">
  13. <h1>Task {{task.name}}</h1>
  14. {% if task.key.to_string() != "00000000-0000-0000-0000-000000000000" %}
  15. <a class="button center" href="/note/add/Task/{{task.key}}">➕ Add Note</a>
  16. <a class="button center" href="/file/add/Task/{{task.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_task_form">
  22. <label for="name">Name</label>
  23. <input type="text" name="name" id="name" placeholder="Name" value="{{task.name}}" />
  24. <label for="description">Description</label>
  25. <textarea name="description" id="description" placeholder="Description"
  26. value="{{task.description}}">{{task.description}}</textarea>
  27. <label for="tags">Tags</label>
  28. <input type="text" name="tags" id="tags" placeholder="Tags,seperated,by,commas" value="{{task.tags}}" />
  29. <label>Select Status</label>
  30. <select name="status">
  31. {% for status in TaskStatus::iter() %}
  32. <option value='{{status.to_string().replace(" ", "")}}' {% if status==task.status %}selected{% endif %}>
  33. {{status.to_string()}}</option>
  34. {% endfor %}
  35. </select>
  36. <label>Assign</label>
  37. <select name="assignee_key">
  38. <option value='{{uuid::Uuid::nil()}}' {% if task.assignee_key==uuid::Uuid::nil() %}selected{% endif %}>
  39. Unassigned</option>
  40. {% for u in users %}
  41. <option value='{{u.key}}' {% if task.assignee_key==u.key %}selected{% endif %}>{{u.to_string()}}</option>
  42. {% endfor %}
  43. </select>
  44. <label for="estimated_quarter_days">Estimated Quarter Work Days</label>
  45. <input type="number" id="estimated_quarter_days" name="estimated_quarter_days" min="1" max="1000"
  46. value="{{task.estimated_quarter_days}}">
  47. <label for="start">Start Date</label>
  48. <input id="start" type="date" name="start" />
  49. <label for="due">Due Date</label>
  50. <input id="due" type="date" name="due" />
  51. <input type="submit" class="add_button"
  52. value="{% if task.name.len() == 0 %}Create Task!{%else%}Update Task{% endif %}" />
  53. </form>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. <script>
  59. window.addEventListener('load', function () {
  60. {% if !task.key.is_nil() %}
  61. send_delete("delete", "/task/{{task.key}}", (deleted, res) => {
  62. if (deleted) {
  63. window.location.href = `/project/{{task.project_key}}`
  64. }
  65. })
  66. {% endif %}
  67. let due = parseInt("{{task.due}}");
  68. document.getElementById("due").value = (due == 0 ? new Date() : new Date(due * 1000)).toISOString().split('T')[0]
  69. let start = parseInt("{{task.start}}");
  70. document.getElementById("start").value = (start == 0 ? new Date() : new Date(start * 1000)).toISOString().split('T')[0]
  71. console.dir({ y: new Date(start * 1000), z: new Date(start) })
  72. post_form("add_task_form", "/task", data => {
  73. const key = "{{task.key}}"
  74. data.key = key == "" ? "00000000-0000-0000-0000-000000000000" : key
  75. data.organization_key = "{{user.organization_key}}"
  76. data.owner_key = "{{user.key}}"
  77. data.project_key = "{{task.project_key}}"
  78. data.estimated_quarter_days = num_from_string(data.estimated_quarter_days)
  79. data.start = Math.floor(new Date(data.start).getTime() / 1000);
  80. data.due = Math.floor(new Date(data.due).getTime() / 1000);
  81. data.name = data.name || "";
  82. data.status = data.status;
  83. data.assignee_key = data.assignee_key;
  84. data.description = data.description || "";
  85. data.tags = data.tags || "";
  86. data.created = data.created || 0;
  87. data.updated = data.updated || 0;
  88. return data;
  89. }, (response_text) => {
  90. const object = JSON.parse(response_text);
  91. window.location.href = `/task/${object.key}`
  92. });
  93. })
  94. </script>
  95. {% endblock %}