bsw/jbe@4: bsw/jbe@4: local initiative = param.get("initiative", "table") bsw/jbe@0: local suggestions_selector = param.get("suggestions_selector", "table") bsw/jbe@0: bsw/jbe@4: ui.order{ bsw/jbe@4: name = name, bsw/jbe@0: selector = suggestions_selector, bsw/jbe@4: options = { bsw/jbe@4: { bsw/jbe@4: name = "all", bsw/jbe@4: label = _"all", bsw/jbe@4: order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count + plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: name = "plus2", bsw/jbe@4: label = _"must", bsw/jbe@4: order_by = "plus2_unfulfilled_count + plus2_fulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: name = "plus", bsw/jbe@4: label = _"must/should", bsw/jbe@4: order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: name = "minus", bsw/jbe@4: label = _"must/should not", bsw/jbe@4: order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: name = "minus2", bsw/jbe@4: label = _"must not", bsw/jbe@4: order_by = "minus2_unfulfilled_count + minus2_fulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: name = "unfulfilled", bsw/jbe@4: label = _"not implemented", bsw/jbe@4: order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: name = "plus2_unfulfilled", bsw/jbe@4: label = _"must", bsw/jbe@4: order_by = "plus2_unfulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: name = "plus_unfulfilled", bsw/jbe@4: label = _"must/should", bsw/jbe@4: order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: name = "minus_unfulfilled", bsw/jbe@4: label = _"must/should not", bsw/jbe@4: order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: name = "minus2_unfulfilled", bsw/jbe@4: label = _"must not", bsw/jbe@4: order_by = "minus2_unfulfilled_count DESC, id" bsw/jbe@4: }, bsw/jbe@4: }, bsw/jbe@0: content = function() bsw/jbe@4: ui.paginate{ bsw/jbe@4: selector = suggestions_selector, bsw/jbe@4: content = function() bsw/jbe@4: ui.list{ bsw/jbe@4: attr = { style = "table-layout: fixed;" }, bsw/jbe@4: records = suggestions_selector:exec(), bsw/jbe@4: columns = { bsw/jbe@4: { bsw/jbe@4: label = _"Suggestion", bsw/jbe@4: content = function(record) bsw/jbe@4: ui.link{ bsw/jbe@4: text = record.name, bsw/jbe@4: module = "suggestion", bsw/jbe@4: view = "show", bsw/jbe@4: id = record.id bsw/jbe@0: } bsw/jbe@4: end bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: label = _"Collective opinion", bsw/jbe@4: label_attr = { style = "width: 101px;" }, bsw/jbe@4: content = function(record) bsw/jbe@4: if record.minus2_unfulfilled_count then bsw/jbe@4: local max_value = record.initiative.issue.population bsw/jbe@4: ui.bargraph{ bsw/jbe@4: max_value = max_value, bsw/jbe@4: width = 50, bsw/jbe@4: bars = { bsw/jbe@4: { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, bsw/jbe@4: { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count }, bsw/jbe@4: { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count }, bsw/jbe@4: { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count }, bsw/jbe@4: { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count }, bsw/jbe@4: { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, bsw/jbe@4: } bsw/jbe@4: } bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: label = _"My opinion", bsw/jbe@4: content = function(record) bsw/jbe@4: local degree bsw/jbe@4: local opinion = Opinion:by_pk(app.session.member.id, record.id) bsw/jbe@4: if opinion then bsw/jbe@4: degree = opinion.degree bsw@3: end bsw/jbe@5: ui.container{ bsw/jbe@5: attr = { class = "suggestion_my_opinion" }, bsw/jbe@5: content = function() bsw/jbe@5: ui.link{ bsw/jbe@5: attr = { class = "action" .. (degree == -2 and " active_red2" or "") }, bsw/jbe@5: text = _"must not", bsw/jbe@5: module = "opinion", bsw/jbe@5: action = "update", bsw/jbe@5: routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, bsw/jbe@5: params = { bsw/jbe@5: suggestion_id = record.id, bsw/jbe@5: degree = -2 bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: slot.put(" ") bsw/jbe@5: ui.link{ bsw/jbe@5: attr = { class = "action" .. (degree == -1 and " active_red1" or "") }, bsw/jbe@5: text = _"should not", bsw/jbe@5: module = "opinion", bsw/jbe@5: action = "update", bsw/jbe@5: routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, bsw/jbe@5: params = { bsw/jbe@5: suggestion_id = record.id, bsw/jbe@5: degree = -1 bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: slot.put(" ") bsw/jbe@5: ui.link{ bsw/jbe@5: attr = { class = "action" .. (degree == nil and " active" or "") }, bsw/jbe@5: text = _"neutral", bsw/jbe@5: module = "opinion", bsw/jbe@5: action = "update", bsw/jbe@5: routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, bsw/jbe@5: params = { bsw/jbe@5: suggestion_id = record.id, bsw/jbe@5: delete = true bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: slot.put(" ") bsw/jbe@5: ui.link{ bsw/jbe@5: attr = { class = "action" .. (degree == 1 and " active_green1" or "") }, bsw/jbe@5: text = _"should", bsw/jbe@5: module = "opinion", bsw/jbe@5: action = "update", bsw/jbe@5: routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, bsw/jbe@5: params = { bsw/jbe@5: suggestion_id = record.id, bsw/jbe@5: degree = 1 bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: slot.put(" ") bsw/jbe@5: ui.link{ bsw/jbe@5: attr = { class = "action" .. (degree == 2 and " active_green2" or "") }, bsw/jbe@5: text = _"must", bsw/jbe@5: module = "opinion", bsw/jbe@5: action = "update", bsw/jbe@5: routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, bsw/jbe@5: params = { bsw/jbe@5: suggestion_id = record.id, bsw/jbe@5: degree = 2 bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: end bsw/jbe@0: } bsw/jbe@0: end bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: content = function(record) bsw/jbe@4: local opinion = Opinion:by_pk(app.session.member.id, record.id) bsw/jbe@4: if opinion and not opinion.fulfilled then bsw/jbe@4: ui.image{ static = "icons/16/cross.png" } bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: label = _"Suggestion currently not implemented", bsw/jbe@4: label_attr = { style = "width: 101px;" }, bsw/jbe@4: content = function(record) bsw/jbe@4: if record.minus2_unfulfilled_count then bsw/jbe@4: local max_value = record.initiative.issue.population bsw/jbe@4: ui.bargraph{ bsw/jbe@4: max_value = max_value, bsw/jbe@4: width = 50, bsw/jbe@4: bars = { bsw/jbe@4: { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count }, bsw/jbe@4: { color = "#f88", value = record.minus1_unfulfilled_count }, bsw/jbe@4: { color = "#a00", value = record.minus2_unfulfilled_count }, bsw/jbe@4: { color = "#0a0", value = record.plus2_unfulfilled_count }, bsw/jbe@4: { color = "#8f8", value = record.plus1_unfulfilled_count }, bsw/jbe@4: { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count }, bsw/jbe@4: } bsw/jbe@4: } bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: content = function(record) bsw/jbe@4: local opinion = Opinion:by_pk(app.session.member.id, record.id) bsw/jbe@4: if opinion and opinion.fulfilled then bsw/jbe@4: ui.image{ static = "icons/16/tick.png" } bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: label = _"Suggestion currently implemented", bsw/jbe@4: label_attr = { style = "width: 101px;" }, bsw/jbe@4: content = function(record) bsw/jbe@4: if record.minus2_fulfilled_count then bsw/jbe@4: local max_value = record.initiative.issue.population bsw/jbe@4: ui.bargraph{ bsw/jbe@4: max_value = max_value, bsw/jbe@4: width = 50, bsw/jbe@4: bars = { bsw/jbe@4: { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, bsw/jbe@4: { color = "#f88", value = record.minus1_fulfilled_count }, bsw/jbe@4: { color = "#a00", value = record.minus2_fulfilled_count }, bsw/jbe@4: { color = "#0a0", value = record.plus2_fulfilled_count }, bsw/jbe@4: { color = "#8f8", value = record.plus1_fulfilled_count }, bsw/jbe@4: { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, bsw/jbe@4: } bsw/jbe@4: } bsw/jbe@4: end bsw@3: end bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: label_attr = { style = "width: 200px;" }, bsw/jbe@4: content = function(record) bsw/jbe@4: local degree bsw/jbe@4: local opinion = Opinion:by_pk(app.session.member.id, record.id) bsw/jbe@4: if opinion then bsw/jbe@4: degree = opinion.degree bsw/jbe@4: end bsw/jbe@4: if opinion then bsw/jbe@4: if not opinion.fulfilled then bsw/jbe@4: local text = "" bsw/jbe@4: if opinion.degree > 0 then bsw/jbe@4: text = _"Mark suggestion as implemented and express satisfaction" bsw/jbe@4: else bsw/jbe@4: text = _"Mark suggestion as implemented and express dissatisfaction" bsw/jbe@4: end bsw/jbe@4: ui.link{ bsw/jbe@4: attr = { class = "action" }, bsw/jbe@4: text = text, bsw/jbe@4: module = "opinion", bsw/jbe@4: action = "update", bsw/jbe@4: routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, bsw/jbe@4: params = { bsw/jbe@4: suggestion_id = record.id, bsw/jbe@4: fulfilled = true bsw/jbe@4: } bsw/jbe@4: } bsw/jbe@4: else bsw/jbe@4: if opinion.degree > 0 then bsw/jbe@4: text = _"Mark suggestion as not implemented and express dissatisfaction" bsw/jbe@4: else bsw/jbe@4: text = _"Mark suggestion as not implemented and express satisfaction" bsw/jbe@4: end bsw/jbe@4: ui.link{ bsw/jbe@4: attr = { class = "action" }, bsw/jbe@4: text = text, bsw/jbe@4: module = "opinion", bsw/jbe@4: action = "update", bsw/jbe@4: routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, bsw/jbe@4: params = { bsw/jbe@4: suggestion_id = record.id, bsw/jbe@4: fulfilled = false bsw/jbe@4: } bsw/jbe@4: } bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: }, bsw/jbe@4: { bsw/jbe@4: content = function(record) bsw/jbe@4: local opinion = Opinion:by_pk(app.session.member.id, record.id) bsw/jbe@4: if opinion then bsw/jbe@4: if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then bsw/jbe@4: ui.image{ static = "icons/16/thumb_up_green.png" } bsw/jbe@4: else bsw/jbe@4: ui.image{ static = "icons/16/thumb_down_red.png" } bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: }, bsw/jbe@4: } bsw/jbe@4: } bsw/jbe@4: end bsw/jbe@0: } bsw/jbe@0: end bsw/jbe@0: } bsw/jbe@4: bsw/jbe@4: if initiative then bsw/jbe@4: ui.field.timestamp{ label = _"Last snapshot:", value = initiative.issue.snapshot } bsw/jbe@4: end