login

<     >

2023-08-09 15:44:44 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

show both comments and shifts on ticket page

diff --git a/data.lua b/data.lua
index c1a4774..8d31210 100644
--- a/data.lua
+++ b/data.lua
@@ -248,6 +248,25 @@ function Model:del_ticket(tick_id)
     self.db:execute("DELETE FROM Ticket WHERE id = ?;", tick_id)
 end
 
+function Model:get_shifts(ticket_id, full)
+    local query
+    if full then
+        query = [[
+            SELECT Shift.*, User.nick AS author_nick, User.name AS author_name
+            FROM Shift JOIN User ON Shift.user_id = User.id
+            WHERE Shift.ticket_id = ? ORDER BY time ASC;
+        ]]
+    else
+        query = "SELECT * FROM Shift WHERE ticket_id = ? ORDER BY time ASC;"
+    end
+    local shifts = self.db:execute(query, ticket_id)
+    for i = 1, #shifts do
+        shifts[i].old_stt_name = self.states[shifts[i].old_stt_id]
+        shifts[i].new_stt_name = self.states[shifts[i].new_stt_id]
+    end
+    return shifts
+end
+
 function Model:add_comment(user_id, ticket_id, text)
     local code = self:get_next_code("Comment", "ticket_id", ticket_id)
     self.db:execute([[
@@ -284,6 +303,22 @@ function Model:del_comment(comm_id)
     self.db:execute("DELETE FROM Comment WHERE id = ?;", comm_id)
 end
 
+-- return a list of events associated with a ticket sorted by time
+-- currently there are two types of events: shifts and comments
+function Model:get_events(ticket_id, full)
+    local events = {}
+    for _, ev in ipairs(self:get_shifts(ticket_id, full)) do
+        ev.type = "shift"
+        table.insert(events, ev)
+    end
+    for _, ev in ipairs(self:get_comments(ticket_id, full)) do
+        ev.type = "comment"
+        table.insert(events, ev)
+    end
+    table.sort(events, function (a, b) return a.time < b.time end)
+    return events
+end
+
 -- return a list of columns ordered by state ID
 -- each column is a list of cards ordered by priority
 -- each card is a ticket DB object with some keys added:

diff --git a/skopos.lua b/skopos.lua
index 25a561f..2096e4f 100644
--- a/skopos.lua
+++ b/skopos.lua
@@ -229,10 +229,10 @@ function App:routes()
         if proj == nil then return "not found", 404 end
         local tick = self.model:get_ticket(proj.id, tcode, true)
         if tick == nil then return "not found", 404 end
-        local comments = self.model:get_comments(tick.id, true)
+        local events = self.model:get_events(tick.id, true)
         local env = {
             title=self.title, user=user, proj=proj, tick=tick,
-            states=self.model.states, comments=comments
+            states=self.model.states, events=events
         }
         return lud.template.render_file("view/ticket.html", env)
     end},

diff --git a/view/ticket.css b/view/ticket.css
index 98d6d1c..7db2378 100644
--- a/view/ticket.css
+++ b/view/ticket.css
@@ -14,7 +14,6 @@
     display: flex;
     justify-content: space-between;
     font-size: 0.8em;
-    margin-bottom: 10px;
 }
 
 .footer-details {
@@ -39,3 +38,8 @@
 .comment p:last-child {
     margin-bottom: 0;
 }
+
+.shift {
+    font-size: 1.3em;
+    margin-top: 0px;
+}

diff --git a/view/ticket.html b/view/ticket.html
index 30257ff..cec5956 100644
--- a/view/ticket.html
+++ b/view/ticket.html
@@ -34,24 +34,29 @@
   </div>
   <div class="comments-section">
     <h2>Comments</h2>
-    % for comm in $comments do
+    % for ev in $events do
     <div class="comment">
       <div class="header-details">
-        <p class="date"><strong>Date:</strong> {{os.date("%Y-%m-%d", $comm.time)}}</p>
+        <p class="date"><strong>Date:</strong> {{os.date("%Y-%m-%d", $ev.time)}}</p>
         <p class="author">
           <strong>Author:</strong>
-          <a href="/u/{{$comm.author_nick}}">{{$comm.author_name}}</a>
+          <a href="/u/{{$ev.author_nick}}">{{$ev.author_name}}</a>
         </p>
       </div>
-      <pre>{{$comm.text}}</pre>
+      % if $ev.type == "comment" then
+      <pre>{{$ev.text}}</pre>
       <div class="footer-details">
         <div class="menu">
-          <a href="/p/{{$proj.name}}/t/{{$tick.code}}/c/{{$comm.code}}/edit">edit</a>
-          <form action="/p/{{$proj.name}}/t/{{$tick.code}}/c/{{$comm.code}}/del" method="post">
+          <a href="/p/{{$proj.name}}/t/{{$tick.code}}/c/{{$ev.code}}/edit">edit</a>
+          <form action="/p/{{$proj.name}}/t/{{$tick.code}}/c/{{$ev.code}}/del" method="post">
             <button type="submit">delete</button>
           </form>
         </div>
       </div>
+      % end
+      % if $ev.type == "shift" then
+      <p class="centered shift"><em>{{$ev.old_stt_name}} → {{$ev.new_stt_name}}</em></p>
+      % end
     </div>
     % end
   </div>