From 729ed13521c5f18074cdc8fa73ef75602fe02d95 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 31 Oct 2024 23:13:18 +0100 Subject: [PATCH] start of iteration 2 --- .gitignore | 3 +- .vscode/launch.json | 2 +- .vscode/tasks.json | 1 + Gemfile | 1 + Gemfile.lock | 20 +++--- app/controllers/elements_controller.rb | 28 +++++--- app/controllers/pages_controller.rb | 64 ++++++++++++++++++ app/controllers/reports_controller.rb | 12 +++- .../success_criteria_controller.rb | 60 +++++++++++++++-- app/helpers/pages_helper.rb | 2 + app/models/element.rb | 8 +-- app/models/page.rb | 6 ++ app/models/pdf_documents/customer_report.rb | 4 +- app/models/report.rb | 5 +- app/models/success_criterion.rb | 19 ++++-- app/views/checklists/show.html.erb | 2 +- app/views/elements/_element.html.erb | 27 ++++---- app/views/elements/_form.html.erb | 16 ++--- .../_new_success_criterion_button.html.erb | 3 + app/views/elements/create.turbo_stream.erb | 2 +- app/views/elements/edit.html.erb | 8 +-- app/views/elements/new.html.erb | 3 +- app/views/elements/show.html.erb | 2 +- app/views/layouts/application.html.erb | 7 +- app/views/pages/_form.html.erb | 6 ++ app/views/pages/_new_element_button.html.erb | 1 + app/views/pages/_page.html.erb | 13 ++++ app/views/pages/_page.json.jbuilder | 2 + app/views/pages/edit.html.erb | 8 +++ app/views/pages/index.html.erb | 37 +++++++++++ app/views/pages/index.json.jbuilder | 1 + app/views/pages/new.html.erb | 12 ++++ app/views/pages/show.html.erb | 9 +++ app/views/pages/show.json.jbuilder | 1 + app/views/reports/_form.html.erb | 2 +- .../reports/_new_element_button.html.erb | 1 - app/views/reports/_new_page_button.html.erb | 1 + app/views/reports/_report.html.erb | 2 +- app/views/reports/_report.json.jbuilder | 2 +- app/views/reports/index.html.erb | 4 +- .../{show.html.erb => show.html.erb.delete} | 16 ++--- app/views/reports/show.html.slim | 47 +++++++++++++ app/views/reports/show.odt.erb | 4 +- app/views/reports/show.rtf.erb | 6 +- app/views/success_criteria/_form.html.erb | 10 +-- app/views/success_criteria/_header.html.erb | 2 +- .../_success_criterion.html.erb | 66 ++++++++++--------- .../_success_criterion.json.jbuilder | 2 +- .../success_criteria/create.turbo_stream.erb | 2 + .../create_from_checklist.turbo_stream.erb | 5 ++ app/views/success_criteria/edit.html.erb | 2 +- app/views/success_criteria/index.html.erb | 10 +-- app/views/success_criteria/new.html.erb | 7 -- app/views/success_criteria/new.html.erb.old | 21 ++++++ app/views/success_criteria/new.html.slim | 11 ++++ .../new_from_checklist.html.slim | 8 +++ app/views/success_criteria/show.html.erb | 6 +- bin/{bundle => _bundle} | 0 config/generation.sh | 31 +++++++++ config/locales/activerecord.yml | 4 +- config/routes.rb | 18 ++++- db/migrate/20241030230805_create_pages.rb | 12 ++++ .../20241030231244_add_page_id_to_elements.rb | 6 ++ ...30231338_remove_report_id_from_elements.rb | 5 ++ ...4_add_quick_fields_to_success_criterion.rb | 6 ++ ...0241031183755_remove_path_from_elements.rb | 5 ++ db/schema.rb | 25 +++++-- test/controllers/pages_controller_test.rb | 48 ++++++++++++++ test/controllers/reports_controller_test.rb | 4 +- .../success_criteria_controller_test.rb | 4 +- test/fixtures/pages.yml | 13 ++++ test/models/page_test.rb | 7 ++ test/system/pages_test.rb | 47 +++++++++++++ test/system/reports_test.rb | 4 +- test/system/success_criteria_test.rb | 4 +- 75 files changed, 705 insertions(+), 170 deletions(-) create mode 100644 app/controllers/pages_controller.rb create mode 100644 app/helpers/pages_helper.rb create mode 100644 app/models/page.rb create mode 100644 app/views/elements/_new_success_criterion_button.html.erb create mode 100644 app/views/pages/_form.html.erb create mode 100644 app/views/pages/_new_element_button.html.erb create mode 100644 app/views/pages/_page.html.erb create mode 100644 app/views/pages/_page.json.jbuilder create mode 100644 app/views/pages/edit.html.erb create mode 100644 app/views/pages/index.html.erb create mode 100644 app/views/pages/index.json.jbuilder create mode 100644 app/views/pages/new.html.erb create mode 100644 app/views/pages/show.html.erb create mode 100644 app/views/pages/show.json.jbuilder delete mode 100644 app/views/reports/_new_element_button.html.erb create mode 100644 app/views/reports/_new_page_button.html.erb rename app/views/reports/{show.html.erb => show.html.erb.delete} (83%) create mode 100644 app/views/reports/show.html.slim create mode 100644 app/views/success_criteria/create.turbo_stream.erb create mode 100644 app/views/success_criteria/create_from_checklist.turbo_stream.erb delete mode 100644 app/views/success_criteria/new.html.erb create mode 100644 app/views/success_criteria/new.html.erb.old create mode 100644 app/views/success_criteria/new.html.slim create mode 100644 app/views/success_criteria/new_from_checklist.html.slim rename bin/{bundle => _bundle} (100%) create mode 100644 db/migrate/20241030230805_create_pages.rb create mode 100644 db/migrate/20241030231244_add_page_id_to_elements.rb create mode 100644 db/migrate/20241030231338_remove_report_id_from_elements.rb create mode 100644 db/migrate/20241030231824_add_quick_fields_to_success_criterion.rb create mode 100644 db/migrate/20241031183755_remove_path_from_elements.rb create mode 100644 test/controllers/pages_controller_test.rb create mode 100644 test/fixtures/pages.yml create mode 100644 test/models/page_test.rb create mode 100644 test/system/pages_test.rb diff --git a/.gitignore b/.gitignore index f03a098..ae07c40 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,5 @@ /.irbrc_history .~lock* .build_version -/core* \ No newline at end of file +/core* +.ruby-lsp/* \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 50a9a5d..b391a9e 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,7 +10,7 @@ // "name": "Attach to a debuggee" // }, { - "type": "rdbg", + "type": "ruby_lsp", "name": "Debug server", "request": "attach", "preLaunchTask": "dev" diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 1f77ccb..ba7fc6e 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -17,6 +17,7 @@ "command": "dev", "label": "dev", "isBackground": true, + "problemMatcher": [] } ] } \ No newline at end of file diff --git a/Gemfile b/Gemfile index e332e6a..d9a6c72 100644 --- a/Gemfile +++ b/Gemfile @@ -77,6 +77,7 @@ group :development do # Speed up commands on slow machines / big apps [https://github.com/rails/spring] # gem "spring" gem "brakeman" + gem "html2slim" gem "rubocop" gem "rubocop-capybara" gem "rubocop-rails" diff --git a/Gemfile.lock b/Gemfile.lock index 5389183..14bb19a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -128,6 +128,9 @@ GEM ffi (1.17.0-x86_64-linux-gnu) globalid (1.2.1) activesupport (>= 6.1) + hpricot (0.8.6) + html2slim (0.2.0) + hpricot htmlentities (4.3.4) i18n (1.14.5) concurrent-ruby (~> 1.0) @@ -145,7 +148,7 @@ GEM railties (>= 6.0.0) json (2.7.2) language_server-protocol (3.17.0.3) - logger (1.6.0) + logger (1.6.1) loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) @@ -216,7 +219,7 @@ GEM prawn-table prawn-table (0.2.2) prawn (>= 1.3.0, < 3.0.0) - prism (0.30.0) + prism (1.2.0) psych (5.1.2) stringio public_suffix (6.0.0) @@ -262,7 +265,7 @@ GEM zeitwerk (~> 2.6) rainbow (3.1.1) rake (13.2.1) - rbs (3.5.2) + rbs (3.6.1) logger rdoc (6.7.0) psych (>= 4.0.0) @@ -317,13 +320,13 @@ GEM rubocop-minitest rubocop-performance rubocop-rails - ruby-lsp (0.17.7) + ruby-lsp (0.20.1) language_server-protocol (~> 3.17.0) - prism (>= 0.29.0, < 0.31) + prism (>= 1.2, < 2.0) rbs (>= 3, < 4) sorbet-runtime (>= 0.5.10782) - ruby-lsp-rails (0.3.10) - ruby-lsp (>= 0.17.2, < 0.18.0) + ruby-lsp-rails (0.3.21) + ruby-lsp (>= 0.20.0, < 0.21.0) ruby-progressbar (1.13.0) ruby-vips (2.2.1) ffi (~> 1.12) @@ -347,7 +350,7 @@ GEM slim (5.2.1) temple (~> 0.10.0) tilt (>= 2.1.0) - sorbet-runtime (0.5.11481) + sorbet-runtime (0.5.11625) sprockets (4.2.1) concurrent-ruby (~> 1.0) rack (>= 2.2.4, < 4) @@ -411,6 +414,7 @@ DEPENDENCIES caxlsx_rails cssbundling-rails debug + html2slim image_processing (~> 1.2) jbuilder jsbundling-rails diff --git a/app/controllers/elements_controller.rb b/app/controllers/elements_controller.rb index 4824ec5..7574183 100644 --- a/app/controllers/elements_controller.rb +++ b/app/controllers/elements_controller.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class ElementsController < ApplicationController + before_action :set_page, only: %i[index new create] before_action :set_element, only: %i[show edit update destroy] # GET /elements @@ -13,7 +14,8 @@ class ElementsController < ApplicationController # GET /elements/new def new - @element = Element.new(report_id: params[:report_id]) + @element = Element.new(page_id: params[:page_id]) + @element.page = @page end # GET /elements/1/edit @@ -21,16 +23,20 @@ class ElementsController < ApplicationController # POST /elements def create - checklist_id = element_params.delete(:checklist_id) - checklist = Checklist.find(checklist_id) + # checklist_id = element_params.delete(:checklist_id) + # checklist = Checklist.find(checklist_id) @element = Element.new(element_params) - @element.title = checklist.name if @element.title.blank? + @element.page = @page + # @element.title = checklist.name if @element.title.blank? if @element.save - checklist.checks.each do |check| - @element.success_criteria.create!(title: check.t_name, description_html: check.t_criterion, - level: check.level) - end + # checklist.checks.each do |check| + # @element.success_criteria.create!( + # check:, + # title: check.t_name, + # level: check.conformity_level, + # quick_criterion: check.t_quick_criterion) + # end respond_to do |format| format.html { redirect_to @element.report, notice: "Element was successfully created." } format.turbo_stream @@ -62,8 +68,12 @@ class ElementsController < ApplicationController @element = Element.find(params[:id]) end + def set_page + @page = Page.find(params[:page_id]) + end + # Only allow a list of trusted parameters through. def element_params - params.require(:element).permit(:report_id, :path, :title, :description_html, :checklist_id) + params.require(:element).permit(:page_id, :title, :description) end end diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb new file mode 100644 index 0000000..dbd4a59 --- /dev/null +++ b/app/controllers/pages_controller.rb @@ -0,0 +1,64 @@ +class PagesController < ApplicationController + before_action :set_page, only: %i[ show edit update destroy ] + before_action :set_report, only: %i[ new create index ] + + # GET /pages + def index + @pages = Page.all + end + + # GET /pages/1 + def show + end + + # GET /pages/new + def new + @page = Page.new + @page.report = @report + end + + # GET /pages/1/edit + def edit + end + + # POST /pages + def create + @page = Page.new(page_params) + @page.report = @report + if @page.save + redirect_to [ @page.report, page_id: @page.id ], notice: "Page was successfully created." + else + render :new, status: :unprocessable_entity + end + end + + # PATCH/PUT /pages/1 + def update + if @page.update(page_params) + redirect_to @page, notice: "Page was successfully updated.", status: :see_other + else + render :edit, status: :unprocessable_entity + end + end + + # DELETE /pages/1 + def destroy + @page.destroy! + redirect_to pages_url, notice: "Page was successfully destroyed.", status: :see_other + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_page + @page = Page.find(params[:id]) + end + + def set_report + @report = Report.find(params[:report_id]) + end + + # Only allow a list of trusted parameters through. + def page_params + params.require(:page).permit(:position, :path, :url, :report_id) + end +end diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 1ada068..f3bd0f0 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -11,7 +11,9 @@ class ReportsController < ApplicationController # GET /reports/1 def show respond_to do |format| - format.html + format.html do + @current_page = page_param && @report.pages.find(page_param) || @report.pages.first + end format.pdf format.xlsx do response.headers["Content-Disposition"] = %(attachment; filename="#{filename(@report, extension: 'xlsx')}") @@ -35,7 +37,7 @@ class ReportsController < ApplicationController format.docx do send_file(Docx::Document.new.generate do |document| document.heading1(@report.name) - document.paragraph(@report.comment_html) + document.paragraph(@report.comment) # document.heading1("slfkj") # document.paragraph("sldkfj") @report.elements.each do |element| @@ -127,10 +129,14 @@ class ReportsController < ApplicationController # Only allow a list of trusted parameters through. def report_params - params.require(:report).permit(:name, :comment_html) + params.require(:report).permit(:name, :comment) end def filename(report, extension: "html") "#{report.name}-#{Time.current.strftime('%Y%m%d%H%M')}.#{extension}" end + + def page_param + params[:page_id] + end end diff --git a/app/controllers/success_criteria_controller.rb b/app/controllers/success_criteria_controller.rb index 7784d09..535de27 100644 --- a/app/controllers/success_criteria_controller.rb +++ b/app/controllers/success_criteria_controller.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class SuccessCriteriaController < ApplicationController + before_action :set_element, only: %i[new create index new_from_checklist create_from_checklist] before_action :set_success_criterion, only: %i[show edit update destroy] # GET /success_criteria @@ -13,7 +14,7 @@ class SuccessCriteriaController < ApplicationController # GET /success_criteria/new def new - @success_criterion = SuccessCriterion.new + @success_criterion = SuccessCriterion.new(element: @element) end # GET /success_criteria/1/edit @@ -21,11 +22,26 @@ class SuccessCriteriaController < ApplicationController # POST /success_criteria def create - @success_criterion = SuccessCriterion.new(success_criterion_params) + check_id = success_criterion_params.delete(:check_id) + check = Check.find(check_id) + merge_params = { + element: @element, + title: check.name_de, + quick_criterion: check.quick_criterion_de, + quick_fail: check.quick_fail_de, + quick_fix: check.quick_fix_de + } + @success_criterion = SuccessCriterion.new(success_criterion_params.merge(merge_params)) if @success_criterion.save - redirect_to @success_criterion, notice: "Erfolgskriterium was successfully created." + respond_to do |format| + format.html do + redirect_to @success_criterion, notice: "Erfolgskriterium was successfully created." + end + format.turbo_stream + end else + Rails.logger.debug(@success_criterion.errors) render :new, status: :unprocessable_entity end end @@ -50,6 +66,38 @@ class SuccessCriteriaController < ApplicationController end end + def new_from_checklist + @success_criterion = SuccessCriterion.new(element: @element) + end + + def create_from_checklist + checklist = Checklist.find(params[:checklist_id]) + success = false + SuccessCriterion.transaction do + @success_criteria = checklist.checks.map do |check| + SuccessCriterion.create!(check:, + element: @element, + title: check.name_de, + quick_criterion: check.quick_criterion_de, + quick_fail: check.quick_fail_de, + quick_fix: check.quick_fix_de, + level: check.conformity_level) + end + success = true + end + if success + respond_to do |format| + format.html do + redirect_to @success_criteria.first.element, notice: "Erfolgskriterium was successfully created." + end + format.turbo_stream + end + else + Rails.logger.debug(@success_criterion.errors) + render :new, status: :unprocessable_entity + end + end + private # Use callbacks to share common setup or constraints between actions. @@ -59,6 +107,10 @@ class SuccessCriteriaController < ApplicationController # Only allow a list of trusted parameters through. def success_criterion_params - params.require(:success_criterion).permit(:element_id, :title, :description_html, :level, :result, :comment_html) + params.require(:success_criterion).permit(:element_id, :title, :quick_criterion, :quick_fail, :quick_fix, :priority, :level, :result, :test_comment, :check_id) + end + + def set_element + @element = Element.find(params[:element_id]) end end diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb new file mode 100644 index 0000000..2c057fd --- /dev/null +++ b/app/helpers/pages_helper.rb @@ -0,0 +1,2 @@ +module PagesHelper +end diff --git a/app/models/element.rb b/app/models/element.rb index 333ef9f..f9f3dd3 100644 --- a/app/models/element.rb +++ b/app/models/element.rb @@ -1,14 +1,12 @@ # frozen_string_literal: true class Element < ApplicationRecord - attr_accessor :checklist_id + has_rich_text :description - has_rich_text :description_html - - belongs_to :report, touch: true + belongs_to :page, touch: true has_many :success_criteria, dependent: :destroy - validates :path, :title, presence: true + delegate :report, to: :page # Calculate actual conformity level: # - if a success_criterion has result :failed -> the confirmity_level diff --git a/app/models/page.rb b/app/models/page.rb new file mode 100644 index 0000000..3686935 --- /dev/null +++ b/app/models/page.rb @@ -0,0 +1,6 @@ +class Page < ApplicationRecord + belongs_to :report + has_many :elements + + has_rich_text :comment +end diff --git a/app/models/pdf_documents/customer_report.rb b/app/models/pdf_documents/customer_report.rb index e6e98d8..463be57 100644 --- a/app/models/pdf_documents/customer_report.rb +++ b/app/models/pdf_documents/customer_report.rb @@ -11,7 +11,7 @@ module PdfDocuments } ], align: :right heading1 params.report.name - rich_text params.report.comment_html + rich_text params.report.comment params.report.elements.each.with_index(1) do |element, element_index| heading2 "#{element_index} #{element.title}" @@ -22,7 +22,7 @@ module PdfDocuments element.success_criteria.each.with_index(1) do |success_criterion, sc_index| heading3 "#{element_index}.#{sc_index} #{success_criterion.title}" rich_text success_criterion.description_html - rich_text success_criterion.comment_html + rich_text success_criterion.comment end end end diff --git a/app/models/report.rb b/app/models/report.rb index 2b6974f..9acc234 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -1,9 +1,10 @@ # frozen_string_literal: true class Report < ApplicationRecord - has_rich_text :comment_html + has_many :pages, dependent: :destroy + has_many :elements, through: :pages, dependent: :destroy + has_rich_text :comment - has_many :elements, dependent: :destroy validates :name, presence: true end diff --git a/app/models/success_criterion.rb b/app/models/success_criterion.rb index 11d5837..0165c4d 100644 --- a/app/models/success_criterion.rb +++ b/app/models/success_criterion.rb @@ -1,17 +1,26 @@ # frozen_string_literal: true class SuccessCriterion < ApplicationRecord + belongs_to :element, touch: true + belongs_to :check, optional: true + + has_rich_text :test_comment + has_rich_text :quick_criterion + has_rich_text :quick_fail + has_rich_text :quick_fix + + delegate :page, :report, to: :element + enum :result, %i[passed failed not_applicable] enum :level, %i[A AA AAA] - has_rich_text :comment_html - has_rich_text :description_html - - belongs_to :element, touch: true - def level_value return nil unless level self.class.levels.values.index_of(level) end + + def header + "HEADER" + end end diff --git a/app/views/checklists/show.html.erb b/app/views/checklists/show.html.erb index 7dac49c..3178363 100644 --- a/app/views/checklists/show.html.erb +++ b/app/views/checklists/show.html.erb @@ -1,4 +1,4 @@ -

<%= "#{@checklist.name}" %>

+

<%= "#{@checklist.name}" %>

diff --git a/app/views/elements/_element.html.erb b/app/views/elements/_element.html.erb index b468c09..e74b56d 100644 --- a/app/views/elements/_element.html.erb +++ b/app/views/elements/_element.html.erb @@ -1,13 +1,10 @@ -
+
"> <%= turbo_frame_tag dom_id(element, :frame) do %>

- + <%= element.title %> -
- <%= element.path %> -

<%= link_to [:edit, element], class: "btn btn-link text-secondary" do %> @@ -16,17 +13,23 @@
- <%= element.description_html %> + <%= element.description %>
<% end %> - <% element.success_criteria.each do |sc| %> - <%= turbo_frame_tag(dom_id(sc, :frame)) do %> +
+ <% element.success_criteria.each do |sc| %> <%= render sc %> <% end %> - <% end %> - <% if element.success_criteria.none? %> -

Es sind (noch) keine Erfolgskriterien definiert.

- <% end %> + <% if element.success_criteria.none? %> +

Es sind (noch) keine Erfolgskriterien definiert.

+ <% end %> +
+ +
+ <%= turbo_frame_tag dom_id(element, "new_success_criterion_frame") do %> + <%= render partial: "elements/new_success_criterion_button", locals: { element: element } %> + <% end %> +
diff --git a/app/views/elements/_form.html.erb b/app/views/elements/_form.html.erb index 000bcbe..d5df2e7 100644 --- a/app/views/elements/_form.html.erb +++ b/app/views/elements/_form.html.erb @@ -1,15 +1,7 @@ -<%= bootstrap_form_with(model: element, data: element.persisted? || { turbo_frame: "_top" }) do |form| %> - <%= form.hidden_field :report_id %> -
-
- <%= form.text_field :path %> -
-
- <%= form.collection_select(:checklist_id, Checklist.all, :id, :name) %> -
-
+<%= bootstrap_form_with(model: element.persisted? ? element : [:page, element], data: element.persisted? || { turbo_frame: "_top" }) do |form| %> + <%= form.hidden_field :page_id %> <%= form.text_field :title %> - <%= form.rich_text_area :description_html %> + <%= form.rich_text_area :description %> <%= form.submit class: "btn btn-warning" %> - <%= link_to("Abbrechen", element.report, class: "btn btn-outline-secondary") %> + <%= link_to("Abbrechen", element.persisted? ? element : element.report, class: "btn btn-outline-secondary") %> <% end %> diff --git a/app/views/elements/_new_success_criterion_button.html.erb b/app/views/elements/_new_success_criterion_button.html.erb new file mode 100644 index 0000000..04607fc --- /dev/null +++ b/app/views/elements/_new_success_criterion_button.html.erb @@ -0,0 +1,3 @@ +<%= link_to "#{tag.i(class: "bi bi-plus-lg")} Neue Checkliste".html_safe, new_from_checklist_element_success_criteria_path(element), class: "btn btn-primary" %> + +<%= link_to "#{tag.i(class: "bi bi-plus-lg")} Neues Erfolgskriterium".html_safe, new_element_success_criterion_path(element), class: "btn btn-primary" %> diff --git a/app/views/elements/create.turbo_stream.erb b/app/views/elements/create.turbo_stream.erb index 458bd31..a1781cf 100644 --- a/app/views/elements/create.turbo_stream.erb +++ b/app/views/elements/create.turbo_stream.erb @@ -1,2 +1,2 @@ -<%= turbo_stream.update "new_element_frame", partial: "reports/new_element_button", locals: { report: @element.report } %> +<%= turbo_stream.update "new_element_frame", partial: "pages/new_element_button", locals: { page: @element.page } %> <%= turbo_stream.append "element_list", @element %> \ No newline at end of file diff --git a/app/views/elements/edit.html.erb b/app/views/elements/edit.html.erb index 0ce1dc1..ade1f43 100644 --- a/app/views/elements/edit.html.erb +++ b/app/views/elements/edit.html.erb @@ -4,13 +4,9 @@

- + <%= @element.title %> -
- <%= @element.path %> -
-

<%= link_to(tag.i(class: "bi bi-pencil"), @element, class: "btn btn-link text-warning") %>
<%= render "form", element: @element %> @@ -19,5 +15,5 @@
<%= link_to t("scaffold.link_show", model: Element.model_name.human), @element %> - <%= link_to t("scaffold.link_index", model: Element.model_name.human(count: 2)), elements_path %> + <%= link_to t("scaffold.link_index", model: Element.model_name.human(count: 2)), page_elements_path(@element.page) %>
diff --git a/app/views/elements/new.html.erb b/app/views/elements/new.html.erb index 350f93b..a06080e 100644 --- a/app/views/elements/new.html.erb +++ b/app/views/elements/new.html.erb @@ -2,11 +2,10 @@ <%= turbo_frame_tag "new_element_frame" do %>
-

Neues Element

<%= render "form", element: @element %>
<% end %>
- <%= link_to t("scaffold.link_index", model: Element.model_name.human(count: 2)), elements_path %> + <%= link_to t("scaffold.link_index", model: Element.model_name.human(count: 2)), page_elements_path %>
diff --git a/app/views/elements/show.html.erb b/app/views/elements/show.html.erb index 36ba6d6..2fa3ea7 100644 --- a/app/views/elements/show.html.erb +++ b/app/views/elements/show.html.erb @@ -4,6 +4,6 @@
<%= link_to t("scaffold.link_edit", model: @element.model_name.human), edit_element_path(@element) %> - <%= link_to t("scaffold.link_index", model: @element.model_name.human(count: 2)), elements_path %> + <%= link_to t("scaffold.link_index", model: @element.model_name.human(count: 2)), page_elements_path(@element.page) %> <%= button_to t("scaffold.link_destroy", model: @element.model_name.human), @element, method: :delete, class: "btn btn-outline-danger" %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 98fa8c4..263e2c6 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -17,10 +17,13 @@
<%= render partial: "layouts/sidebar" %>
"> -
+
<%= render partial: "layouts/flash" %> <% if false && sidebar? %> - Menu + + + Menu + <% end %>
diff --git a/app/views/pages/_form.html.erb b/app/views/pages/_form.html.erb new file mode 100644 index 0000000..ebc707d --- /dev/null +++ b/app/views/pages/_form.html.erb @@ -0,0 +1,6 @@ +<%= bootstrap_form_with(model: [:report, page], data: { turbo: false }) do |form| %> + <%= form.text_field :path %> + <%= form.text_field :url %> + <%# <%= form.rich_text_area :comment %> + <%= form.submit %> +<% end %> diff --git a/app/views/pages/_new_element_button.html.erb b/app/views/pages/_new_element_button.html.erb new file mode 100644 index 0000000..07ccdd4 --- /dev/null +++ b/app/views/pages/_new_element_button.html.erb @@ -0,0 +1 @@ +<%= link_to "#{tag.i(class: "bi bi-plus-lg")} Neues Element".html_safe, new_page_element_path(page_id: page.id), class: "btn btn-primary" %> diff --git a/app/views/pages/_page.html.erb b/app/views/pages/_page.html.erb new file mode 100644 index 0000000..5fd7e50 --- /dev/null +++ b/app/views/pages/_page.html.erb @@ -0,0 +1,13 @@ +
+
+ <% page.elements.each do |element| %> + <%= render element %> + <% end %> +
+ +
+ <%= turbo_frame_tag "new_element_frame" do %> + <%= render partial: "pages/new_element_button", locals: { page: page } %> + <% end %> +
+
diff --git a/app/views/pages/_page.json.jbuilder b/app/views/pages/_page.json.jbuilder new file mode 100644 index 0000000..26fb617 --- /dev/null +++ b/app/views/pages/_page.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! page, :id, :position, :path, :url, :report_id, :created_at, :updated_at +json.url page_url(page, format: :json) diff --git a/app/views/pages/edit.html.erb b/app/views/pages/edit.html.erb new file mode 100644 index 0000000..6983a18 --- /dev/null +++ b/app/views/pages/edit.html.erb @@ -0,0 +1,8 @@ +

<%= t("scaffold.pagetitle_edit", model: Page.model_name.human) %>

+ +<%= render "form", page: @page %> + +
+ <%= link_to t("scaffold.link_show", model: Page.model_name.human), @page %> + <%= link_to t("scaffold.link_index", model: Page.model_name.human(count: 2)), report_pages_path(@page.report) %> +
diff --git a/app/views/pages/index.html.erb b/app/views/pages/index.html.erb new file mode 100644 index 0000000..2daf44a --- /dev/null +++ b/app/views/pages/index.html.erb @@ -0,0 +1,37 @@ +

<%= t("scaffold.pagetitle_index", model: Page.model_name.human(count: 2)) %>

+ + + + + + + + + + + + + + + + + <% @pages.each do |page| %> + + + + + + + + + + + + + <% end %> + +
<%= Page.human_attribute_name(:id) %><%= Page.human_attribute_name(:position) %><%= Page.human_attribute_name(:path) %><%= Page.human_attribute_name(:url) %><%= Page.human_attribute_name(:report_id) %>
<%= link_to(page.id, url_for(page)) %><%= link_to(page.position, url_for(page)) %><%= link_to(page.path, url_for(page)) %><%= link_to(page.url, url_for(page)) %><%= link_to(page.report_id, url_for(page)) %>
+ +
+ <%= link_to t("scaffold.link_new", model: Page.model_name.human), new_report_page_path(@report) %> +
\ No newline at end of file diff --git a/app/views/pages/index.json.jbuilder b/app/views/pages/index.json.jbuilder new file mode 100644 index 0000000..4b7775c --- /dev/null +++ b/app/views/pages/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @pages, partial: "pages/page", as: :page diff --git a/app/views/pages/new.html.erb b/app/views/pages/new.html.erb new file mode 100644 index 0000000..3dac663 --- /dev/null +++ b/app/views/pages/new.html.erb @@ -0,0 +1,12 @@ +

<%= t("scaffold.pagetitle_new", model: Page.model_name.human) %>

+ +<%= turbo_frame_tag "new_page_frame" do %> +
+ <%= render "form", page: @page %> + <%= link_to "Abbrechen", report_path(@page.report) %> +
+<% end %> + +
+ <%= link_to t("scaffold.link_index", model: Page.model_name.human(count: 2)), report_pages_path(@page.report) %> +
diff --git a/app/views/pages/show.html.erb b/app/views/pages/show.html.erb new file mode 100644 index 0000000..ab0f41b --- /dev/null +++ b/app/views/pages/show.html.erb @@ -0,0 +1,9 @@ +

<%= t("scaffold.pagetitle_show", model: @page.class.model_name.human) %>

+ +<%= render @page %> + +
+ <%= link_to t("scaffold.link_edit", model: @page.model_name.human), edit_page_path(@page) %> + <%= link_to t("scaffold.link_index", model: @page.model_name.human(count: 2)), report_pages_path(@page.report) %> + <%= button_to t("scaffold.link_destroy", model: @page.model_name.human), @page, method: :delete, class: "btn btn-outline-danger" %> +
diff --git a/app/views/pages/show.json.jbuilder b/app/views/pages/show.json.jbuilder new file mode 100644 index 0000000..18bcc1b --- /dev/null +++ b/app/views/pages/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "pages/page", page: @page diff --git a/app/views/reports/_form.html.erb b/app/views/reports/_form.html.erb index 19db8fc..6d9b5ba 100644 --- a/app/views/reports/_form.html.erb +++ b/app/views/reports/_form.html.erb @@ -1,5 +1,5 @@ <%= bootstrap_form_with(model: report) do |form| %> <%= form.text_field :name %> - <%= form.rich_text_area :comment_html %> + <%= form.rich_text_area :comment %> <%= form.submit %> <% end %> diff --git a/app/views/reports/_new_element_button.html.erb b/app/views/reports/_new_element_button.html.erb deleted file mode 100644 index 29f71b1..0000000 --- a/app/views/reports/_new_element_button.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= link_to "#{tag.i(class: "bi bi-plus-lg")} Neues Element".html_safe, new_element_path(report_id: report.id), class: "btn btn-primary" %> diff --git a/app/views/reports/_new_page_button.html.erb b/app/views/reports/_new_page_button.html.erb new file mode 100644 index 0000000..02f99a0 --- /dev/null +++ b/app/views/reports/_new_page_button.html.erb @@ -0,0 +1 @@ +<%= link_to "#{tag.i(class: "bi bi-plus-lg")} Neuer Pfad".html_safe, new_report_page_path(report), class: "btn btn-primary" %> diff --git a/app/views/reports/_report.html.erb b/app/views/reports/_report.html.erb index b29f11f..9bbbdb0 100644 --- a/app/views/reports/_report.html.erb +++ b/app/views/reports/_report.html.erb @@ -6,7 +6,7 @@

Comment: - <%= report.comment_html %> + <%= report.comment %>

diff --git a/app/views/reports/_report.json.jbuilder b/app/views/reports/_report.json.jbuilder index 3c8f009..e57b6a3 100644 --- a/app/views/reports/_report.json.jbuilder +++ b/app/views/reports/_report.json.jbuilder @@ -1,4 +1,4 @@ # frozen_string_literal: true -json.extract! report, :id, :name, :comment_html, :created_at, :updated_at +json.extract! report, :id, :name, :comment, :created_at, :updated_at json.url report_url(report, format: :json) diff --git a/app/views/reports/index.html.erb b/app/views/reports/index.html.erb index 900eb9d..61b1a89 100644 --- a/app/views/reports/index.html.erb +++ b/app/views/reports/index.html.erb @@ -7,7 +7,7 @@ <%= Report.human_attribute_name(:name) %> - <%= Report.human_attribute_name(:comment_html) %> + <%= Report.human_attribute_name(:comment) %> @@ -18,7 +18,7 @@ <%= link_to(report.name, url_for(report)) %> - <%= link_to(truncate(report.comment_html.to_plain_text), url_for(report)) if report.comment_html %> + <%= link_to(truncate(report.comment.to_plain_text), url_for(report)) if report.comment %> <%= l(report.created_at, format: :short) %> <%= l(report.updated_at, format: :short) %> diff --git a/app/views/reports/show.html.erb b/app/views/reports/show.html.erb.delete similarity index 83% rename from app/views/reports/show.html.erb rename to app/views/reports/show.html.erb.delete index d6bd395..d606bcc 100644 --- a/app/views/reports/show.html.erb +++ b/app/views/reports/show.html.erb.delete @@ -4,22 +4,22 @@ zuletzt bearbeitet am <%= l(@report.updated_at, format: :short) %>

- <% if @report.comment_html %> + <% if @report.comment %>
- <%= @report.comment_html %> + <%= @report.comment %>
<% end %>
- <%= turbo_frame_tag "new_element_frame" do %> - <%= render partial: "reports/new_element_button", locals: { report: @report } %> + <%= turbo_frame_tag "new_page_frame" do %> + <%= render partial: "reports/new_page_button", locals: { report: @report } %> <% end %>
-
- <% @report.elements.each do |element| %> - <%= turbo_frame_tag dom_id(element, :frame) do %> - <%= render element %> +
+ <% @report.pages.each do |page| %> + <%= turbo_frame_tag dom_id(page, :frame) do %> + <%= render page %> <% end %> <% end %>
diff --git a/app/views/reports/show.html.slim b/app/views/reports/show.html.slim new file mode 100644 index 0000000..90d0140 --- /dev/null +++ b/app/views/reports/show.html.slim @@ -0,0 +1,47 @@ +h1 + i.bi.bi-journal-text.me-2 + = @report.name +p.small + | Erstellt am + = l(@report.created_at, format: :short) + | , zuletzt bearbeitet am + = l(@report.updated_at, format: :short) +- if @report.comment + .mt-2.mb-4.lead + = @report.comment += turbo_frame_tag "nav" do + .row + .col-lg-3.col-md-6.col-sm-12 + nav.nav.nav-pills.flex-column.mb-3#page_list + - @report.pages.each do |page| + = link_to(page.path, report_path(@report, page_id: page.id), class: "nav-link#{@current_page&.id == page.id ? " active" : nil }") + = turbo_frame_tag "new_page_frame" do + = render partial: "reports/new_page_button", locals: { report: @report } + .col-lg-9.col-md-6.col-sm-12 + - if @current_page + = render @current_page + - else + 'Gehen Sie weiter, hier gibt es nichts zu sehen. +.action-row + = link_to report_path(@report, format: :pdf), class: "btn btn-secondary", target: "_blank" do + i.bi.bi-filetype-pdf + | PDF + = link_to report_path(@report, format: :docx), class: "btn btn-secondary", target: "_blank" do + i.bi.bi-filetype-docx + | DOCX + = link_to report_path(@report, format: :xlsx), class: "btn btn-secondary", target: "_blank" do + i.bi.bi-filetype-xlsx + | XLSX + = link_to report_path(@report, format: :rtf), class: "btn btn-secondary", target: "_blank" do + i.bi.bi-file-richtext + | RTF + = link_to report_path(@report, format: :xml), class: "btn btn-secondary", target: "_blank" do + i.bi.bi-filetype-html + | HTML + = link_to report_path(@report, format: :odt), class: "btn btn-secondary", target: "_blank" do + i.bi.bi-file-richtext + | ODT +.action-row + = link_to t("scaffold.link_edit", model: @report.model_name.human), edit_report_path(@report) + = link_to t("scaffold.link_index", model: @report.model_name.human(count: 2)), reports_path + = button_to t("scaffold.link_destroy", model: @report.model_name.human), @report, method: :delete, class: "btn btn-outline-danger" diff --git a/app/views/reports/show.odt.erb b/app/views/reports/show.odt.erb index 0120dbf..2426011 100644 --- a/app/views/reports/show.odt.erb +++ b/app/views/reports/show.odt.erb @@ -8,9 +8,9 @@ zuletzt bearbeitet am <%= l(@report.updated_at, format: :short) %> - <% if @report.comment_html %> + <% if @report.comment %>
- <%= @report.comment_html %> + <%= @report.comment %>
<% end %> diff --git a/app/views/reports/show.rtf.erb b/app/views/reports/show.rtf.erb index 55a6b6a..33bf8d8 100644 --- a/app/views/reports/show.rtf.erb +++ b/app/views/reports/show.rtf.erb @@ -4,13 +4,13 @@ zuletzt bearbeitet am <%= l(@report.updated_at, format: :short) %>

- <% if @report.comment_html %> + <% if @report.comment %>
- <%= @report.comment_html %> + <%= @report.comment %>
<% end %> -
+
<%= turbo_frame_tag "new_element_frame" do %> <%= render partial: "reports/new_element_button", locals: { report: @report } %> <% end %> diff --git a/app/views/success_criteria/_form.html.erb b/app/views/success_criteria/_form.html.erb index c27c1cd..5077f72 100644 --- a/app/views/success_criteria/_form.html.erb +++ b/app/views/success_criteria/_form.html.erb @@ -4,7 +4,7 @@
- <%= bootstrap_form_with(model: success_criterion) do |form| %> + <%= bootstrap_form_with(model: success_criterion.persisted? ? success_criterion : [:element, success_criterion]) do |form| %>
@@ -28,11 +28,13 @@ <%= form.select :level, SuccessCriterion.levels.keys, hide_label: true %>
- <%= form.rich_text_area :comment_html %> <%= form.text_field :title %> - <%= form.rich_text_area :description_html %> + <%= form.rich_text_area :quick_criterion %> + <%= form.rich_text_area :quick_fail %> + <%= form.rich_text_area :quick_fix %> + <%= form.rich_text_area :test_comment %> <%= form.submit class: "btn btn-warning" %> - <%= link_to "Abbrechen", success_criterion, class: "btn btn-outline-secondary" %> + <%= link_to "Abbrechen", success_criterion.persisted? ? success_criterion : success_criterion.element, class: "btn btn-outline-secondary" %> <% end %>
diff --git a/app/views/success_criteria/_header.html.erb b/app/views/success_criteria/_header.html.erb index 298b251..c82a109 100644 --- a/app/views/success_criteria/_header.html.erb +++ b/app/views/success_criteria/_header.html.erb @@ -13,7 +13,7 @@ <%= success_criterion.level %> - <% if success_criterion.comment_html.present? %> + <% if success_criterion.test_comment.present? %> <% end %> <% if false && action_name == "edit" %> diff --git a/app/views/success_criteria/_success_criterion.html.erb b/app/views/success_criteria/_success_criterion.html.erb index 7c05461..246fedc 100644 --- a/app/views/success_criteria/_success_criterion.html.erb +++ b/app/views/success_criteria/_success_criterion.html.erb @@ -1,35 +1,39 @@ -<% expanded = false unless defined?(expanded) %> -
- <%== render partial: "success_criteria/header", locals: {success_criterion: success_criterion } %> - -
" id="collapseSuccessCriterion_<%= success_criterion.id %>"> -
- <%= bootstrap_form_with(model: success_criterion, data: { controller: "autosubmit" }) do |form| %> -
-
-
- <%= form.radio_button_without_bootstrap :result, :passed, class: "btn-check", autocomplete: "off", id: dom_id(success_criterion, :result_passed) %> - - <%= form.radio_button_without_bootstrap :result, :failed, class: "btn-check", autocomplete: "off", id: dom_id(success_criterion, :result_failed) %> - - <%= form.radio_button_without_bootstrap :result, :not_applicable, class: "btn-check", autocomplete: "off", id: dom_id(success_criterion, :result_not_applicable) %> - +<%= turbo_frame_tag(dom_id(success_criterion, :frame)) do %> + <% expanded = false unless defined?(expanded) %> +
+ <%== render partial: "success_criteria/header", locals: {success_criterion: success_criterion } %> + +
" id="collapseSuccessCriterion_<%= success_criterion.id %>"> +
+ <%= bootstrap_form_with(model: success_criterion, data: { controller: "autosubmit" }) do |form| %> +
+
+
+ <%= form.radio_button_without_bootstrap :result, :passed, class: "btn-check", autocomplete: "off", id: dom_id(success_criterion, :result_passed) %> + + <%= form.radio_button_without_bootstrap :result, :failed, class: "btn-check", autocomplete: "off", id: dom_id(success_criterion, :result_failed) %> + + <%= form.radio_button_without_bootstrap :result, :not_applicable, class: "btn-check", autocomplete: "off", id: dom_id(success_criterion, :result_not_applicable) %> + +
+ <%# form.collection_select :result, SuccessCriterion.results.map{ |k, v| [k, t("activerecord.attributes.success_criterion.results/#{k}")] }, :first, :second, include_blank: true, hide_label: true %> + <%# form.select :category, SuccessCriterion.categories.keys %>
- <%# form.collection_select :result, SuccessCriterion.results.map{ |k, v| [k, t("activerecord.attributes.success_criterion.results/#{k}")] }, :first, :second, include_blank: true, hide_label: true %> - <%# form.select :category, SuccessCriterion.categories.keys %>
-
- <% end %> - <%= success_criterion.description_html %> - <% if success_criterion.comment_html.present? %> -
<%= success_criterion.comment_html %>
- <% end %> + <% end %> + <%= success_criterion.quick_criterion %> + <%= success_criterion.quick_fail %> + <%= success_criterion.quick_fix %> + <% if success_criterion.test_comment.present? %> +
<%= success_criterion.test_comment %>
+ <% end %> +
-
+<% end %> \ No newline at end of file diff --git a/app/views/success_criteria/_success_criterion.json.jbuilder b/app/views/success_criteria/_success_criterion.json.jbuilder index 672caae..7a222f7 100644 --- a/app/views/success_criteria/_success_criterion.json.jbuilder +++ b/app/views/success_criteria/_success_criterion.json.jbuilder @@ -1,5 +1,5 @@ # frozen_string_literal: true -json.extract! success_criterion, :id, :element_id, :title, :description_html, :level, :result, :comment_html, +json.extract! success_criterion, :id, :element_id, :title, :description_html, :level, :result, :comment, :created_at, :updated_at json.url success_criterion_url(success_criterion, format: :json) diff --git a/app/views/success_criteria/create.turbo_stream.erb b/app/views/success_criteria/create.turbo_stream.erb new file mode 100644 index 0000000..23a2e0a --- /dev/null +++ b/app/views/success_criteria/create.turbo_stream.erb @@ -0,0 +1,2 @@ +<%= turbo_stream.update dom_id(@success_criterion.element, "new_success_criterion_frame"), partial: "elements/new_success_criterion_button", locals: { element: @success_criterion.element } %> +<%= turbo_stream.append dom_id(@success_criterion.element, "success_criteria_list"), @success_criterion %> \ No newline at end of file diff --git a/app/views/success_criteria/create_from_checklist.turbo_stream.erb b/app/views/success_criteria/create_from_checklist.turbo_stream.erb new file mode 100644 index 0000000..a624dbd --- /dev/null +++ b/app/views/success_criteria/create_from_checklist.turbo_stream.erb @@ -0,0 +1,5 @@ +<%= turbo_stream.update dom_id(@success_criteria.first.element, "new_success_criterion_frame"), partial: "elements/new_success_criterion_button", locals: { element: @success_criteria.first.element } %> + +<% @success_criteria.each do |success_criterion| %> + <%= turbo_stream.append dom_id(success_criterion.element, "success_criteria_list"), success_criterion %> +<% end %> \ No newline at end of file diff --git a/app/views/success_criteria/edit.html.erb b/app/views/success_criteria/edit.html.erb index 13ddad4..f0093e8 100644 --- a/app/views/success_criteria/edit.html.erb +++ b/app/views/success_criteria/edit.html.erb @@ -6,5 +6,5 @@
<%= link_to t("scaffold.link_show", model: SuccessCriterion.model_name.human), @success_criterion %> - <%= link_to t("scaffold.link_index", model: SuccessCriterion.model_name.human(count: 2)), success_criteria_path %> + <%= link_to t("scaffold.link_index", model: SuccessCriterion.model_name.human(count: 2)), element_success_criteria_path(@success_criterion.element) %>
diff --git a/app/views/success_criteria/index.html.erb b/app/views/success_criteria/index.html.erb index fadddaf..ee4ac55 100644 --- a/app/views/success_criteria/index.html.erb +++ b/app/views/success_criteria/index.html.erb @@ -9,13 +9,11 @@ <%= SuccessCriterion.human_attribute_name(:title) %> - <%= SuccessCriterion.human_attribute_name(:description_html) %> - <%= SuccessCriterion.human_attribute_name(:level) %> <%= SuccessCriterion.human_attribute_name(:result) %> - <%= SuccessCriterion.human_attribute_name(:comment_html) %> + <%= SuccessCriterion.human_attribute_name(:test_comment) %> @@ -27,13 +25,11 @@ <%= link_to(success_criterion.title, url_for(success_criterion)) %> - <%= link_to(truncate(success_criterion.description_html.to_plain_text), url_for(success_criterion)) %> - <%= link_to(success_criterion.level, url_for(success_criterion)) %> <%= link_to(success_criterion.result, url_for(success_criterion)) %> - <%= link_to(truncate(success_criterion.comment_html.to_plain_text), url_for(success_criterion)) %> + <%= link_to(truncate(success_criterion.test_comment.to_plain_text), url_for(success_criterion)) %> <% end %> @@ -41,5 +37,5 @@
- <%= link_to t("scaffold.link_new", model: SuccessCriterion.model_name.human), new_success_criterion_path %> + <%= link_to t("scaffold.link_new", model: SuccessCriterion.model_name.human), new_element_success_criterion_path(@element) %>
\ No newline at end of file diff --git a/app/views/success_criteria/new.html.erb b/app/views/success_criteria/new.html.erb deleted file mode 100644 index b43f723..0000000 --- a/app/views/success_criteria/new.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -

<%= t("scaffold.pagetitle_new", model: SuccessCriterion.model_name.human) %>

- -<%= render "form", success_criterion: @success_criterion %> - -
- <%= link_to t("scaffold.link_index", model: SuccessCriterion.model_name.human(count: 2)), success_criteria_path %> -
diff --git a/app/views/success_criteria/new.html.erb.old b/app/views/success_criteria/new.html.erb.old new file mode 100644 index 0000000..6aabe41 --- /dev/null +++ b/app/views/success_criteria/new.html.erb.old @@ -0,0 +1,21 @@ +

<%= t("scaffold.pagetitle_new", model: SuccessCriterion.model_name.human) %>

+ +<%= turbo_frame_tag dom_id(@success_criterion.element, "new_success_criterion_frame") do %> +
+ <%== render partial: "success_criteria/header", locals: { success_criterion: @success_criterion.tap { _1.title = "Neu" } } %> + +
+
+ <%= bootstrap_form_with(model: @success_criterion.persisted? ? @success_criterion : [:element, @success_criterion]) do |form| %> + <%= form.collection_select :check_id, Check.all.order(:external_number), :id, :display_label %> + <%= form.submit class: "btn btn-warning" %> + <%= link_to "Abbrechen", @success_criterion.persisted? ? @success_criterion : @success_criterion.element, class: "btn btn-outline-secondary" %> + <% end %> +
+
+ <%# <%= link_to "edit", url_for([:edit, success_criterion]) %> +
+<% end %> +
+ <%= link_to t("scaffold.link_index", model: SuccessCriterion.model_name.human(count: 2)), element_success_criteria_path(@element) %> +
diff --git a/app/views/success_criteria/new.html.slim b/app/views/success_criteria/new.html.slim new file mode 100644 index 0000000..b6ad9d5 --- /dev/null +++ b/app/views/success_criteria/new.html.slim @@ -0,0 +1,11 @@ +h1 + = t("scaffold.pagetitle_new", model: SuccessCriterion.model_name.human) += turbo_frame_tag dom_id(@success_criterion.element, "new_success_criterion_frame") do + .border.border-info.p-3 + = bootstrap_form_with(model: @success_criterion.persisted? ? @success_criterion : [:element, @success_criterion]) do |form| + = form.collection_select :check_id, Check.all.order(:external_number), :id, :display_label + = form.submit class: "btn btn-warning" + = link_to "Abbrechen", @success_criterion.persisted? ? @success_criterion : @success_criterion.element, class: "btn btn-outline-secondary" + +.action-row + = link_to t("scaffold.link_index", model: SuccessCriterion.model_name.human(count: 2)), element_success_criteria_path(@element) \ No newline at end of file diff --git a/app/views/success_criteria/new_from_checklist.html.slim b/app/views/success_criteria/new_from_checklist.html.slim new file mode 100644 index 0000000..b6feb1f --- /dev/null +++ b/app/views/success_criteria/new_from_checklist.html.slim @@ -0,0 +1,8 @@ + + += turbo_frame_tag dom_id(@success_criterion.element, :new_success_criterion_frame) do + .border.border-info.p-3 + = bootstrap_form_with(url: create_from_checklist_element_success_criteria_path(@success_criterion.element), name: :new_from_checklist) do |form| + = form.collection_select :checklist_id, Checklist.all.order(:name), :id, :name + = form.submit class: "btn btn-warning" + = link_to "Abbrechen", @success_criterion.persisted? ? @success_criterion : @success_criterion.element, class: "btn btn-outline-secondary" \ No newline at end of file diff --git a/app/views/success_criteria/show.html.erb b/app/views/success_criteria/show.html.erb index 9cebcda..444b881 100644 --- a/app/views/success_criteria/show.html.erb +++ b/app/views/success_criteria/show.html.erb @@ -1,11 +1,9 @@

<%= t("scaffold.pagetitle_show", model: @success_criterion.class.model_name.human) %>

-<%= turbo_frame_tag(dom_id(@success_criterion, :frame)) do %> - <% render partial: "success_criteria/success_criterion", locals: { success_criterion: @success_criterion, expanded: true } %> -<% end %> +<%= render partial: "success_criteria/success_criterion", locals: { success_criterion: @success_criterion, expanded: true } %>
<%= link_to t("scaffold.link_edit", model: @success_criterion.model_name.human), edit_success_criterion_path(@success_criterion) %> - <%= link_to t("scaffold.link_index", model: @success_criterion.model_name.human(count: 2)), success_criteria_path %> + <%= link_to t("scaffold.link_index", model: @success_criterion.model_name.human(count: 2)), element_success_criteria_path(@success_criterion.element) %> <%= button_to t("scaffold.link_destroy", model: @success_criterion.model_name.human), @success_criterion, method: :delete, class: "btn btn-outline-danger" %>
diff --git a/bin/bundle b/bin/_bundle similarity index 100% rename from bin/bundle rename to bin/_bundle diff --git a/config/generation.sh b/config/generation.sh index f175d8f..87f9f92 100644 --- a/config/generation.sh +++ b/config/generation.sh @@ -14,3 +14,34 @@ rails g model sdfsdlfkjdfsfsdfsfddsfsdfdsfsdflkjdsfjefdfsdssadasddf # invoke test_unit # create test/models/sdfsdlfkjdfsfsdfsfddsfsdfdsfsdflkjdsfjefdfsdssadasddf_test.rb # create test/fixtures/sdfsdlfkjdfsfsdfsfddsfsdfdsfsdflkjdsfjefdfsdssadasddfs.yml +# Thu Oct 31 00:08:05 CET 2024 +rails g scaffold page position:integer path:string url:string report:references +# invoke active_record +# create db/migrate/20241030230805_create_pages.rb +# create app/models/page.rb +# invoke test_unit +# create test/models/page_test.rb +# create test/fixtures/pages.yml +# invoke resource_route +# route resources :pages +# invoke scaffold_controller +# create app/controllers/pages_controller.rb +# invoke erb +# create app/views/pages +# create app/views/pages/index.html.erb +# create app/views/pages/edit.html.erb +# create app/views/pages/show.html.erb +# create app/views/pages/new.html.erb +# create app/views/pages/_form.html.erb +# create app/views/pages/_page.html.erb +# invoke resource_route +# invoke test_unit +# create test/controllers/pages_controller_test.rb +# create test/system/pages_test.rb +# invoke helper +# create app/helpers/pages_helper.rb +# invoke test_unit +# invoke jbuilder +# create app/views/pages/index.json.jbuilder +# create app/views/pages/show.json.jbuilder +# create app/views/pages/_page.json.jbuilder diff --git a/config/locales/activerecord.yml b/config/locales/activerecord.yml index 1f23284..9b48e55 100644 --- a/config/locales/activerecord.yml +++ b/config/locales/activerecord.yml @@ -4,7 +4,7 @@ de-CH: success_criterion: title: Titel description_html: Richtlinie - comment_html: Testkommentar + comment: Testkommentar level: Stufe result: Testergebnis results/passed: Bestanden @@ -71,7 +71,7 @@ de-CH: description_html: Beschreibung report: name: Bezeichnung - comment_html: Projektbeschreibung + comment: Projektbeschreibung models: account: one: Konto diff --git a/config/routes.rb b/config/routes.rb index 5e7b043..5413b0c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -8,11 +8,23 @@ Rails.application.routes.draw do resources :checklist_entries resources :checklists resources :checks - resources :elements resources :link_categories resources :links - resources :reports - resources :success_criteria + resources :reports, shallow: true, except: %i[show] do + resources :pages do + resources :elements do + resources :success_criteria do + collection do + get "from_checklist", action: :new_from_checklist, as: :new_from_checklist + post "from_checklist", action: :create_from_checklist, as: :create_from_checklist + end + end + end + end + member do + get "(-/:page_id)", action: :show, as: "", constraints: { id: /\d+/ } + end + end get "backoffice/show", as: :backoffice diff --git a/db/migrate/20241030230805_create_pages.rb b/db/migrate/20241030230805_create_pages.rb new file mode 100644 index 0000000..75dbd26 --- /dev/null +++ b/db/migrate/20241030230805_create_pages.rb @@ -0,0 +1,12 @@ +class CreatePages < ActiveRecord::Migration[7.2] + def change + create_table :pages do |t| + t.integer :position + t.string :path + t.string :url + t.references :report, null: false, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/migrate/20241030231244_add_page_id_to_elements.rb b/db/migrate/20241030231244_add_page_id_to_elements.rb new file mode 100644 index 0000000..a945cf8 --- /dev/null +++ b/db/migrate/20241030231244_add_page_id_to_elements.rb @@ -0,0 +1,6 @@ +class AddPageIdToElements < ActiveRecord::Migration[7.2] + def change + add_reference :elements, :page, null: false, foreign_key: true + add_column :elements, :position, :integer, default: 0, null: false + end +end diff --git a/db/migrate/20241030231338_remove_report_id_from_elements.rb b/db/migrate/20241030231338_remove_report_id_from_elements.rb new file mode 100644 index 0000000..e99bc3e --- /dev/null +++ b/db/migrate/20241030231338_remove_report_id_from_elements.rb @@ -0,0 +1,5 @@ +class RemoveReportIdFromElements < ActiveRecord::Migration[7.2] + def change + remove_reference :elements, :report, null: false, foreign_key: true + end +end diff --git a/db/migrate/20241030231824_add_quick_fields_to_success_criterion.rb b/db/migrate/20241030231824_add_quick_fields_to_success_criterion.rb new file mode 100644 index 0000000..363fd0f --- /dev/null +++ b/db/migrate/20241030231824_add_quick_fields_to_success_criterion.rb @@ -0,0 +1,6 @@ +class AddQuickFieldsToSuccessCriterion < ActiveRecord::Migration[7.2] + def change + add_reference :success_criteria, :check, null: true, foreign_key: true + add_column :success_criteria, :priority, :integer + end +end diff --git a/db/migrate/20241031183755_remove_path_from_elements.rb b/db/migrate/20241031183755_remove_path_from_elements.rb new file mode 100644 index 0000000..d8bfba4 --- /dev/null +++ b/db/migrate/20241031183755_remove_path_from_elements.rb @@ -0,0 +1,5 @@ +class RemovePathFromElements < ActiveRecord::Migration[7.2] + def change + remove_column :elements, :path, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 8a17bfb..7d98e16 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2024_10_26_170258) do +ActiveRecord::Schema[7.2].define(version: 2024_10_31_183755) do create_table "account_remember_keys", force: :cascade do |t| t.string "key", null: false t.datetime "deadline", null: false @@ -120,12 +120,12 @@ ActiveRecord::Schema[7.2].define(version: 2024_10_26_170258) do end create_table "elements", force: :cascade do |t| - t.integer "report_id", null: false - t.string "path" t.string "title" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["report_id"], name: "index_elements_on_report_id" + t.integer "page_id", null: false + t.integer "position", default: 0, null: false + t.index ["page_id"], name: "index_elements_on_page_id" end create_table "link_categories", force: :cascade do |t| @@ -146,6 +146,16 @@ ActiveRecord::Schema[7.2].define(version: 2024_10_26_170258) do t.index ["link_category_id"], name: "index_links_on_link_category_id" end + create_table "pages", force: :cascade do |t| + t.integer "position" + t.string "path" + t.string "url" + t.integer "report_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["report_id"], name: "index_pages_on_report_id" + end + create_table "principles", force: :cascade do |t| t.string "name_de" t.string "name_en" @@ -176,6 +186,9 @@ ActiveRecord::Schema[7.2].define(version: 2024_10_26_170258) do t.integer "result" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "check_id" + t.integer "priority" + t.index ["check_id"], name: "index_success_criteria_on_check_id" t.index ["element_id"], name: "index_success_criteria_on_element_id" end @@ -185,7 +198,9 @@ ActiveRecord::Schema[7.2].define(version: 2024_10_26_170258) do add_foreign_key "checklist_entries", "checklists" add_foreign_key "checklist_entries", "checks" add_foreign_key "checks", "principles" - add_foreign_key "elements", "reports" + add_foreign_key "elements", "pages" add_foreign_key "links", "link_categories" + add_foreign_key "pages", "reports" + add_foreign_key "success_criteria", "checks" add_foreign_key "success_criteria", "elements" end diff --git a/test/controllers/pages_controller_test.rb b/test/controllers/pages_controller_test.rb new file mode 100644 index 0000000..d22553b --- /dev/null +++ b/test/controllers/pages_controller_test.rb @@ -0,0 +1,48 @@ +require "test_helper" + +class PagesControllerTest < ActionDispatch::IntegrationTest + setup do + @page = pages(:one) + end + + test "should get index" do + get pages_url + assert_response :success + end + + test "should get new" do + get new_page_url + assert_response :success + end + + test "should create page" do + assert_difference("Page.count") do + post pages_url, params: { page: { path: @page.path, position: @page.position, report_id: @page.report_id, url: @page.url } } + end + + assert_redirected_to page_url(Page.last) + end + + test "should show page" do + get page_url(@page) + assert_response :success + end + + test "should get edit" do + get edit_page_url(@page) + assert_response :success + end + + test "should update page" do + patch page_url(@page), params: { page: { path: @page.path, position: @page.position, report_id: @page.report_id, url: @page.url } } + assert_redirected_to page_url(@page) + end + + test "should destroy page" do + assert_difference("Page.count", -1) do + delete page_url(@page) + end + + assert_redirected_to pages_url + end +end diff --git a/test/controllers/reports_controller_test.rb b/test/controllers/reports_controller_test.rb index 00f9984..23d3979 100644 --- a/test/controllers/reports_controller_test.rb +++ b/test/controllers/reports_controller_test.rb @@ -35,7 +35,7 @@ class ReportsControllerTest < ActionDispatch::IntegrationTest test "should create report" do assert_difference("Report.count") do - post reports_url, params: { report: { comment_html: @report.comment_html, name: @report.name } } + post reports_url, params: { report: { comment: @report.comment, name: @report.name } } end assert_redirected_to report_url(Report.last) @@ -52,7 +52,7 @@ class ReportsControllerTest < ActionDispatch::IntegrationTest end test "should update report" do - patch report_url(@report), params: { report: { comment_html: @report.comment_html, name: @report.name } } + patch report_url(@report), params: { report: { comment: @report.comment, name: @report.name } } assert_redirected_to report_url(@report) end diff --git a/test/controllers/success_criteria_controller_test.rb b/test/controllers/success_criteria_controller_test.rb index b62c55c..23a3b81 100644 --- a/test/controllers/success_criteria_controller_test.rb +++ b/test/controllers/success_criteria_controller_test.rb @@ -36,7 +36,7 @@ class SuccessCriteriaControllerTest < ActionDispatch::IntegrationTest test "should create success_criterion" do assert_difference("SuccessCriterion.count") do post success_criteria_url, - params: { success_criterion: { comment_html: @success_criterion.comment_html, + params: { success_criterion: { comment: @success_criterion.comment, description_html: @success_criterion.description_html, element_id: @success_criterion.element_id, level: @success_criterion.level, result: @success_criterion.result, title: @success_criterion.title } } end @@ -55,7 +55,7 @@ class SuccessCriteriaControllerTest < ActionDispatch::IntegrationTest test "should update success_criterion" do patch success_criterion_url(@success_criterion), - params: { success_criterion: { comment_html: @success_criterion.comment_html, + params: { success_criterion: { comment: @success_criterion.comment, description_html: @success_criterion.description_html, element_id: @success_criterion.element_id, level: @success_criterion.level, result: @success_criterion.result, title: @success_criterion.title } } assert_redirected_to success_criterion_url(@success_criterion) end diff --git a/test/fixtures/pages.yml b/test/fixtures/pages.yml new file mode 100644 index 0000000..aaf346c --- /dev/null +++ b/test/fixtures/pages.yml @@ -0,0 +1,13 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + position: 1 + path: MyString + url: MyString + report: one + +two: + position: 1 + path: MyString + url: MyString + report: two diff --git a/test/models/page_test.rb b/test/models/page_test.rb new file mode 100644 index 0000000..fa25544 --- /dev/null +++ b/test/models/page_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class PageTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/system/pages_test.rb b/test/system/pages_test.rb new file mode 100644 index 0000000..41be184 --- /dev/null +++ b/test/system/pages_test.rb @@ -0,0 +1,47 @@ +require "application_system_test_case" + +class PagesTest < ApplicationSystemTestCase + setup do + @page = pages(:one) + end + + test "visiting the index" do + visit pages_url + assert_selector "h1", text: "Pages" + end + + test "should create page" do + visit pages_url + click_on "New page" + + fill_in "Path", with: @page.path + fill_in "Position", with: @page.position + fill_in "Report", with: @page.report_id + fill_in "Url", with: @page.url + click_on "Create Page" + + assert_text "Page was successfully created" + click_on "Back" + end + + test "should update Page" do + visit page_url(@page) + click_on "Edit this page", match: :first + + fill_in "Path", with: @page.path + fill_in "Position", with: @page.position + fill_in "Report", with: @page.report_id + fill_in "Url", with: @page.url + click_on "Update Page" + + assert_text "Page was successfully updated" + click_on "Back" + end + + test "should destroy Page" do + visit page_url(@page) + click_on "Destroy this page", match: :first + + assert_text "Page was successfully destroyed" + end +end diff --git a/test/system/reports_test.rb b/test/system/reports_test.rb index 7c70110..b360604 100644 --- a/test/system/reports_test.rb +++ b/test/system/reports_test.rb @@ -21,7 +21,7 @@ class ReportsTest < ApplicationSystemTestCase visit reports_url click_on "Prüfbericht hinzufügen" - fill_in_rich_text_area "Projektbeschreibung", with: @report.comment_html + fill_in_rich_text_area "Projektbeschreibung", with: @report.comment fill_in "Bezeichnung", with: @report.name click_on "Prüfbericht erstellen" end @@ -30,7 +30,7 @@ class ReportsTest < ApplicationSystemTestCase visit report_url(@report) click_on "Prüfbericht bearbeiten", match: :first - fill_in_rich_text_area "Projektbeschreibung", with: @report.comment_html + fill_in_rich_text_area "Projektbeschreibung", with: @report.comment fill_in "Bezeichnung", with: @report.name click_on "Prüfbericht aktualisieren" end diff --git a/test/system/success_criteria_test.rb b/test/system/success_criteria_test.rb index 6529f72..fee7746 100644 --- a/test/system/success_criteria_test.rb +++ b/test/system/success_criteria_test.rb @@ -21,7 +21,7 @@ class SuccessCriteriaTest < ApplicationSystemTestCase visit success_criteria_url click_on "Erfolgskriterium hinzufügen" - fill_in_rich_text_area "Testkommentar", with: @success_criterion.comment_html + fill_in_rich_text_area "Testkommentar", with: @success_criterion.comment fill_in_rich_text_area "Richtlinie", with: @success_criterion.description_html # fill_in 'Element', with: @success_criterion.element_id # fill_in 'Level', with: @success_criterion.level @@ -34,7 +34,7 @@ class SuccessCriteriaTest < ApplicationSystemTestCase visit success_criterion_url(@success_criterion) click_on "Erfolgskriterium bearbeiten", match: :first - fill_in_rich_text_area "Testkommentar", with: @success_criterion.comment_html + fill_in_rich_text_area "Testkommentar", with: @success_criterion.comment fill_in_rich_text_area "Richtlinie", with: @success_criterion.description_html find("label", text: "Bestanden", visible: true).click fill_in "Titel", with: "new"