diff --git a/app/assets/stylesheets/active_scaffold_overrides.scss b/app/assets/stylesheets/active_scaffold_overrides.scss index cbdca4e7..3085c8cb 100644 --- a/app/assets/stylesheets/active_scaffold_overrides.scss +++ b/app/assets/stylesheets/active_scaffold_overrides.scss @@ -68,6 +68,7 @@ a.disabled { .active-scaffold-header div.actions a.class_schedule_pdf, .active-scaffold-header div.actions a.show_config_list, .active-scaffold-header div.actions a.configure_all, +.active-scaffold-header div.actions a.custom_report, .active-scaffold-header div.actions div.action_group div { margin: 0; padding: 5px 5px 5px 25px; @@ -137,6 +138,18 @@ a.disabled { top: 25%; } +.active-scaffold-header div.actions a.custom_report { + position: relative; +} + +.active-scaffold-header div.actions a.custom_report:before { + content: "\f1c9"; /* this is your text. You can also use UTF-8 character codes as I do here */ + font-family: FontAwesome; + left: 8px; + position: absolute; + top: 25%; +} + .active-scaffold-header div.actions a.to_pdf, .active-scaffold-header div.actions a.class_schedule_pdf { background-image: url("pdfIcon.gif"); diff --git a/app/controllers/admissions/admission_processes_controller.rb b/app/controllers/admissions/admission_processes_controller.rb index 98960139..6078d31c 100644 --- a/app/controllers/admissions/admission_processes_controller.rb +++ b/app/controllers/admissions/admission_processes_controller.rb @@ -75,6 +75,9 @@ class Admissions::AdmissionProcessesController < ApplicationController page: true, type: :member, parameters: { format: :xlsx } + config.action_links.add "custom_report", + label: I18n.t("active_scaffold.admissions/admission_process.custom_report.title"), + type: :collection config.columns[:form_template].form_ui = :record_select config.columns[:form_template].options[:params] = { @@ -106,16 +109,19 @@ class Admissions::AdmissionProcessesController < ApplicationController ) def short_pdf + load_admission_report_config get_admission_process_pdf("short_pdf") end def complete_pdf + load_admission_report_config get_admission_process_pdf("complete_pdf") end def complete_xls @admission_process = Admissions::AdmissionProcess.find(params[:id]) - @admission_report_config = Admissions::AdmissionReportConfig.new.init_default + load_admission_report_config + respond_to do |format| format.xlsx end @@ -280,7 +286,66 @@ def calculate_ranking respond_to_action(:calculate_ranking) end + def custom_report + do_custom_report + respond_to_action(:custom_report) + end + + def custom_report_generate + do_custom_report_generate + respond_to_action(:custom_report_generate) + end + + def reset_report + session.delete(:admission_report_config) if session.include? :admission_report_config + load_admission_report_config + @on_form = params[:on_form] + respond_to_action(:reset_report) + ensure + params.delete :on_form if params.include? :on_form + end + protected + def load_admission_report_config + @admission_report_config = Admissions::AdmissionReportConfig.new.init_default + if session[:admission_report_config].present? + update_record_from_params( + @admission_report_config, + Admissions::AdmissionReportConfigsController.active_scaffold_config.create.columns, + session[:admission_report_config] + ) + end + end + + def do_show + load_admission_report_config + super + end + + def do_custom_report + load_admission_report_config + end + + def do_custom_report_generate + do_custom_report + self.successful = false + update_record_from_params( + @admission_report_config, + Admissions::AdmissionReportConfigsController.active_scaffold_config.create.columns, + params[:record] + ) + old_name = @admission_report_config.name + @admission_report_config.name = "Dinamico" + self.successful = successful? || [ + @admission_report_config.keeping_errors { @admission_report_config.valid? }, + @admission_report_config.associated_valid? + ].all? # this syntax avoids a short-circuit + @admission_report_config.name = old_name + if successful? + session[:admission_report_config] = params.require(:record).permit!.to_h + end + end + def consolidate_phase_respond_on_iframe flash[:info] = @message flash[:error] = @exception @@ -322,6 +387,61 @@ def calculate_ranking_respond_to_js render action: "on_calculate_ranking", formats: [:js] end + def custom_report_respond_to_html + if successful? + render(action: "custom_report") + else + return_to_main + end + end + + def custom_report_respond_to_js + render(partial: "custom_report_form") + end + + def custom_report_generate_respond_on_iframe + responds_to_parent do + render action: "on_custom_report", formats: [:js], layout: false + end + end + + def custom_report_generate_respond_to_html + if successful? # just a regular post + message = "Relatório configurado" + if params[:dont_close] + flash.now[:info] = message + render(action: "custom_report") + else + flash[:info] = message + return_to_main + end + else + render(action: "custom_report") + end + end + + def custom_report_generate_respond_to_js + render action: "on_custom_report" + end + + def reset_report_respond_on_iframe + responds_to_parent do + render action: "on_custom_report", formats: [:js], layout: false + end + end + + def reset_report_respond_to_html + if @on_form + render(action: "custom_report") + else + return_to_main + end + end + + def reset_report_respond_to_js + render action: "on_custom_report" + end + private def get_admission_process_pdf(type) @admission_process = Admissions::AdmissionProcess.find(params[:id]) diff --git a/app/controllers/admissions/admission_report_groups_controller.rb b/app/controllers/admissions/admission_report_groups_controller.rb index 79213578..9892b10f 100644 --- a/app/controllers/admissions/admission_report_groups_controller.rb +++ b/app/controllers/admissions/admission_report_groups_controller.rb @@ -9,7 +9,7 @@ class Admissions::AdmissionReportGroupsController < ApplicationController active_scaffold "Admissions::AdmissionReportGroup" do |config| config.create.label = :create_admission_report_group_label columns = [ - :admission_report_config, :order, :mode, :pdf_format, :operation, :columns + :admission_report_config, :order, :mode, :pdf_format, :in_simple, :operation, :columns ] config.columns = columns diff --git a/app/helpers/admissions/admission_processes_helper.rb b/app/helpers/admissions/admission_processes_helper.rb index 0fd0ce9f..86265c37 100644 --- a/app/helpers/admissions/admission_processes_helper.rb +++ b/app/helpers/admissions/admission_processes_helper.rb @@ -29,4 +29,26 @@ def admission_applications_show_column(record, column) record: record, column: column } end + + def form_condition_form_column(record, options) + render(partial: "admissions/form_conditions/association_widget", locals: { + record: record, + options: options, + form_condition: record.form_condition + }) + end + + def admission_report_group_t(key, **args) + I18n.t("activerecord.attributes.admissions/admission_report_group.#{key}", **args) + end + + def admissions_ranking_column_name_form_column(record, options) + form_field_name_widget(record, options, text: record.name) + end + + def admissions_admission_report_column_name_form_column(record, options) + form_field_name_widget(record, options, text: record.name, query_options: { + in_letter: true + }) + end end diff --git a/app/helpers/admissions/admission_processes_pdf_helper.rb b/app/helpers/admissions/admission_processes_pdf_helper.rb index 50351f0e..0920832c 100644 --- a/app/helpers/admissions/admission_processes_pdf_helper.rb +++ b/app/helpers/admissions/admission_processes_pdf_helper.rb @@ -39,7 +39,7 @@ def add_width(remaining_width, target, widths) def admission_applications_table(curr_pdf, options = {}) admission_process ||= options[:admission_process] - admission_report_config = Admissions::AdmissionReportConfig.new.init_default + admission_report_config = @admission_report_config || Admissions::AdmissionReportConfig.new.init_default title = admission_process_pdf_title(admission_process) config = admission_report_config.prepare_table(admission_process) config[:base_url] = request.base_url @@ -103,7 +103,7 @@ def show_filled(filled, field) def admission_applications_complete_table(curr_pdf, options = {}) admission_process ||= options[:admission_process] - admission_report_config = Admissions::AdmissionReportConfig.new.init_default + admission_report_config = @admission_report_config || Admissions::AdmissionReportConfig.new.init_default title = admission_process_pdf_title(admission_process) config = admission_report_config.prepare_table(admission_process) applications = config[:applications].map do |application| diff --git a/app/helpers/admissions/admission_report_columns_helper.rb b/app/helpers/admissions/admission_report_columns_helper.rb new file mode 100644 index 00000000..9912409c --- /dev/null +++ b/app/helpers/admissions/admission_report_columns_helper.rb @@ -0,0 +1,12 @@ +# Copyright (c) Universidade Federal Fluminense (UFF). +# This file is part of SAPOS. Please, consult the license terms in the LICENSE file. + +# frozen_string_literal: true + +module Admissions::AdmissionReportColumnsHelper + def name_form_column(record, options) + form_field_name_widget(record, options, text: record.name, query_options: { + in_letter: true + }) + end +end diff --git a/app/helpers/admissions/admission_report_groups_helper.rb b/app/helpers/admissions/admission_report_groups_helper.rb index 27d8f6a9..41259cbe 100644 --- a/app/helpers/admissions/admission_report_groups_helper.rb +++ b/app/helpers/admissions/admission_report_groups_helper.rb @@ -7,4 +7,10 @@ module Admissions::AdmissionReportGroupsHelper def admission_report_group_t(key, **args) I18n.t("activerecord.attributes.admissions/admission_report_group.#{key}", **args) end + + def admissions_admission_report_column_name_form_column(record, options) + form_field_name_widget(record, options, text: record.name, query_options: { + in_letter: true + }) + end end diff --git a/app/models/admissions/ability.rb b/app/models/admissions/ability.rb index f61a9cf0..dc4c4f23 100644 --- a/app/models/admissions/ability.rb +++ b/app/models/admissions/ability.rb @@ -70,6 +70,7 @@ module Admissions::Ability def initialize_admissions(user, roles) alias_action :map_student_form, :map_student_form_create_update, to: :map_student + alias_action :custom_report_generate, :reset_report, to: :custom_report if roles[:manager] can :undo_consolidation, Admissions::AdmissionApplication can :override, Admissions::AdmissionApplication @@ -77,6 +78,7 @@ def initialize_admissions(user, roles) can :configuration, Admissions::AdmissionApplication can :read_all, Admissions::AdmissionApplication can :map_student, Admissions::AdmissionApplication + can :custom_report, Admissions::AdmissionProcess end if roles[Role::ROLE_ADMINISTRADOR] || roles[Role::ROLE_COORDENACAO] can :manage, ADMISSION_MODELS diff --git a/app/models/admissions/admission_application.rb b/app/models/admissions/admission_application.rb index 50d847c4..c5e94657 100644 --- a/app/models/admissions/admission_application.rb +++ b/app/models/admissions/admission_application.rb @@ -648,7 +648,7 @@ def phase_name end def identifier - self.token[..6] + self.token[..5] end def can_edit_itself diff --git a/app/views/admissions/admission_processes/_admission_applications_show.html.erb b/app/views/admissions/admission_processes/_admission_applications_show.html.erb index cc90cc11..5df20a26 100644 --- a/app/views/admissions/admission_processes/_admission_applications_show.html.erb +++ b/app/views/admissions/admission_processes/_admission_applications_show.html.erb @@ -1,5 +1,5 @@ <% - admission_report_config = Admissions::AdmissionReportConfig.new.init_default + admission_report_config = @admission_report_config || Admissions::AdmissionReportConfig.new.init_default config = admission_report_config.prepare_table(record) config[:base_url] = request.base_url %> diff --git a/app/views/admissions/admission_processes/_custom_report_form.html.erb b/app/views/admissions/admission_processes/_custom_report_form.html.erb new file mode 100644 index 00000000..02c9351c --- /dev/null +++ b/app/views/admissions/admission_processes/_custom_report_form.html.erb @@ -0,0 +1,61 @@ +<% + + form_action ||= :custom_report_generate + + scope ||= nil + url_options ||= params_for(:action => form_action) + xhr = request.xhr? if xhr.nil? + + report_action_config = Admissions::AdmissionReportConfigsController.active_scaffold_config.create + multipart ||= report_action_config.multipart? + report_columns ||= report_action_config.columns + report_columns.constraint_columns << :name + + persistent ||= false + floating_footer ||= false + method ||= :post + cancel_link = true if cancel_link.nil? + submit_text ||= form_action + apply_text ||= :"#{form_action}_apply" + body_partial ||= 'form' + form_id = element_form_id(action: form_action, id: "custom_report_definition") +%> +<%= +options = {:id => form_id, + :multipart => multipart, + :class => "as_form #{form_action.to_s}", + :method => :post, + 'data-loading' => defined?(loading) ? loading : true} +cancel_options = {:class => 'as_cancel'} +options[:class] << ' floating-footer' if floating_footer +cancel_options[:remote] = true if xhr #cancel link does nt have to care about multipart forms +if xhr && multipart # file_uploads + form_remote_upload_tag url_options.merge({:iframe => true}), options +else + options[:remote] = true if xhr && !multipart + form_tag url_options, options +end +-%> +