pg_rails 7.0.1 → 7.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +6 -4
- data/pg_associable/app/assets/css/pg_associable.scss +99 -0
- data/pg_associable/app/assets/js/asociable_controller.js +59 -0
- data/pg_associable/app/assets/js/asociable_inline_controller.js +141 -0
- data/pg_associable/app/assets/js/modal_controller.js +130 -0
- data/pg_associable/app/helpers/pg_associable/form_builder_methods.rb +31 -0
- data/pg_associable/app/helpers/pg_associable/helpers.rb +19 -0
- data/pg_associable/app/inputs/pg_associable/pg_associable_inline_input.rb +39 -0
- data/pg_associable/app/inputs/pg_associable/pg_associable_input.rb +41 -0
- data/pg_associable/app/views/pg_associable/_resultados.html.slim +9 -0
- data/pg_associable/app/views/pg_associable/_resultados_inline.html.slim +12 -0
- data/pg_associable/app/views/pg_engine/base/_pg_associable_modal.html.slim +39 -0
- data/pg_associable/index.js +7 -0
- data/pg_associable/lib/pg_associable/engine.rb +12 -0
- data/pg_associable/lib/pg_associable/simple_form_initializer.rb +34 -0
- data/pg_associable/lib/pg_associable.rb +5 -0
- data/{lib/tasks/pg_rails_tasks.rake → pg_associable/lib/tasks/pg_associable_tasks.rake} +1 -2
- data/pg_engine/app/assets/stylesheets/pg_rails_b5.scss +74 -0
- data/pg_engine/app/controllers/pg_engine/base_controller.rb +365 -0
- data/pg_engine/app/controllers/pg_engine/devise_controller.rb +9 -0
- data/pg_engine/app/controllers/pg_engine/signed_in_controller.rb +7 -0
- data/{app/decorators/pg_rails → pg_engine/app/decorators/pg_engine}/base_decorator.rb +21 -23
- data/pg_engine/app/helpers/pg_engine/flash_helper.rb +26 -0
- data/pg_engine/app/helpers/pg_engine/form_helper.rb +33 -0
- data/pg_engine/app/helpers/pg_engine/index_helper.rb +42 -0
- data/{app/helpers/pg_rails → pg_engine/app/helpers/pg_engine}/postgres_helper.rb +1 -1
- data/{app/helpers/pg_rails → pg_engine/app/helpers/pg_engine}/print_helper.rb +15 -31
- data/pg_engine/app/helpers/pg_engine/route_helper.rb +41 -0
- data/pg_engine/app/inputs/pg_engine/fecha_input.rb +20 -0
- data/{app/lib/pg_rails → pg_engine/app/lib/pg_engine}/filtros_builder.rb +16 -17
- data/pg_engine/app/lib/pg_form_builder.rb +22 -0
- data/pg_engine/app/models/pg_engine/base_record.rb +63 -0
- data/{app/policies/pg_rails → pg_engine/app/policies/pg_engine}/application_policy.rb +2 -2
- data/pg_engine/app/views/pg_engine/base/download.xlsx.axlsx +14 -0
- data/pg_engine/app/views/pg_engine/base/index.html.slim +51 -0
- data/pg_engine/config/locales/es.yml +48 -0
- data/pg_engine/config/simple_form/simple_form.rb +178 -0
- data/pg_engine/config/simple_form/simple_form_bootstrap.rb +371 -0
- data/{lib/pg_rails → pg_engine/lib/pg_engine}/configuracion.rb +3 -1
- data/pg_engine/lib/pg_engine/engine.rb +53 -0
- data/{lib/pg_rails → pg_engine/lib/pg_engine}/utils/logueador.rb +8 -1
- data/pg_engine/lib/pg_engine.rb +35 -0
- data/{lib → pg_engine/lib}/tasks/auto_anotar_modelos.rake +1 -1
- data/pg_engine/lib/templates/activeadmin/audits.rb +53 -0
- data/pg_engine/lib/templates/activeadmin/users.rb +54 -0
- data/pg_layout/app/assets/stylesheets/sidebar.scss +106 -0
- data/pg_layout/app/javascript/cookies.js +23 -0
- data/pg_layout/app/javascript/navbar_controller.js +10 -0
- data/pg_layout/app/lib/navbar.rb +61 -0
- data/pg_layout/app/views/devise/confirmations/new.html.erb +20 -0
- data/pg_layout/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/pg_layout/app/views/devise/mailer/email_changed.html.erb +7 -0
- data/pg_layout/app/views/devise/mailer/password_change.html.erb +3 -0
- data/pg_layout/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/pg_layout/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/pg_layout/app/views/devise/passwords/edit.html.erb +27 -0
- data/pg_layout/app/views/devise/passwords/new.html.erb +18 -0
- data/pg_layout/app/views/devise/registrations/edit.html.erb +35 -0
- data/pg_layout/app/views/devise/registrations/new.html.erb +25 -0
- data/pg_layout/app/views/devise/sessions/new.html.erb +20 -0
- data/pg_layout/app/views/devise/shared/_error_messages.html.erb +15 -0
- data/pg_layout/app/views/devise/shared/_links.html.erb +25 -0
- data/pg_layout/app/views/devise/unlocks/new.html.erb +19 -0
- data/pg_layout/app/views/kaminari/_first_page.html.slim +3 -0
- data/pg_layout/app/views/kaminari/_gap.html.slim +2 -0
- data/pg_layout/app/views/kaminari/_last_page.html.slim +3 -0
- data/pg_layout/app/views/kaminari/_next_page.html.slim +3 -0
- data/pg_layout/app/views/kaminari/_page.html.slim +6 -0
- data/pg_layout/app/views/kaminari/_paginator.html.slim +12 -0
- data/pg_layout/app/views/kaminari/_prev_page.html.slim +3 -0
- data/pg_layout/app/views/layouts/pg_layout/devise.html.slim +24 -0
- data/pg_layout/app/views/layouts/pg_layout/layout.html.slim +30 -0
- data/pg_layout/app/views/pg_layout/_flash.html.slim +10 -0
- data/pg_layout/app/views/pg_layout/_navbar.html.erb +43 -0
- data/pg_layout/app/views/pg_layout/_sidebar.html.erb +42 -0
- data/pg_layout/index.js +35 -0
- data/pg_layout/lib/pg_layout/engine.rb +7 -0
- data/pg_layout/lib/pg_layout.rb +9 -0
- data/pg_rails/js/index.js +2 -0
- data/pg_rails/lib/pg_rails.rb +7 -0
- data/{lib/pg_rails → pg_rails/lib}/version.rb +1 -1
- data/pg_rails/scss/pg_rails.scss +3 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/model_generator.rb +34 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/admin.rb +19 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/create_table_migration.rb.tt +46 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/migration.rb.tt +48 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/model.rb +47 -0
- data/pg_scaffold/lib/generators/pg_active_record/model/templates/module.rb +9 -0
- data/pg_scaffold/lib/generators/pg_decorator/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_decorator/pg_decorator_generator.rb +31 -0
- data/pg_scaffold/lib/generators/pg_decorator/templates/decorator.rb +22 -0
- data/pg_scaffold/lib/generators/pg_factory_bot/model/model_generator.rb +95 -0
- data/pg_scaffold/lib/generators/pg_factory_bot/model/templates/factories.erb +14 -0
- data/pg_scaffold/lib/generators/pg_pundit/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_pundit/pg_pundit_generator.rb +21 -0
- data/pg_scaffold/lib/generators/pg_pundit/templates/policy.rb +37 -0
- data/pg_scaffold/lib/generators/pg_rails/instalar/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_rails/instalar/instalar_generator.rb +17 -0
- data/pg_scaffold/lib/generators/pg_rails/instalar/templates/pg_rails.rb +10 -0
- data/pg_scaffold/lib/generators/pg_resource_route/pg_resource_route_generator.rb +27 -0
- data/pg_scaffold/lib/generators/pg_rspec/model/model_generator.rb +30 -0
- data/pg_scaffold/lib/generators/pg_rspec/model/templates/model_spec.rb +15 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/scaffold_generator.rb +43 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/api_controller_spec.rb +167 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/controller_spec.rb +269 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/edit_spec.rb +34 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/index_spec.rb +28 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/new_spec.rb +34 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/routing_spec.rb +50 -0
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/show_spec.rb +26 -0
- data/pg_scaffold/lib/generators/pg_scaffold/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_scaffold/pg_scaffold_generator.rb +87 -0
- data/pg_scaffold/lib/generators/pg_scaffold/templates/controller.rb +37 -0
- data/pg_scaffold/lib/generators/pg_slim/USAGE +8 -0
- data/pg_scaffold/lib/generators/pg_slim/pg_slim_generator.rb +31 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/_form.html.slim +12 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/download.xlsx.axlsx +14 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/edit.html.slim +5 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/index.html.slim +51 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/new.html.slim +5 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/partial.html.slim +1 -0
- data/pg_scaffold/lib/generators/pg_slim/templates/show.html.slim +38 -0
- data/pg_scaffold/lib/pg_scaffold/monkey_patches/mejoras_a_named_base.rb +37 -0
- data/pg_scaffold/lib/pg_scaffold/monkey_patches/mejoras_de_atributos.rb +116 -0
- data/pg_scaffold/lib/pg_scaffold/railtie.rb +16 -0
- data/pg_scaffold/lib/pg_scaffold.rb +4 -0
- metadata +134 -48
- data/Rakefile +0 -36
- data/app/assets/javascripts/pg_rails/asociacion_creable.js +0 -85
- data/app/assets/javascripts/pg_rails/best_in_place_datepicker.js +0 -58
- data/app/assets/javascripts/pg_rails/librerias.js +0 -13
- data/app/assets/javascripts/pg_rails/librerias_b3.js +0 -14
- data/app/assets/javascripts/pg_rails/validaciones.js +0 -44
- data/app/assets/javascripts/pg_rails.js +0 -318
- data/app/assets/stylesheets/pg_rails/librerias.scss +0 -5
- data/app/assets/stylesheets/pg_rails/pg_chosen.scss +0 -29
- data/app/assets/stylesheets/pg_rails/pg_rails.scss +0 -199
- data/app/assets/stylesheets/pg_rails_b3.scss +0 -10
- data/app/assets/stylesheets/pg_rails_b4.scss +0 -12
- data/app/assets/stylesheets/pg_rails_b5.scss +0 -1
- data/app/controllers/pg_rails/application_controller.rb +0 -316
- data/app/controllers/pg_rails/editar_en_lugar_controller.rb +0 -24
- data/app/helpers/pg_rails/editar_en_lugar_helper.rb +0 -106
- data/app/helpers/pg_rails/form_helper.rb +0 -25
- data/app/inputs/pg_rails/asociacion_creable_input.rb +0 -72
- data/app/inputs/pg_rails/fecha_input.rb +0 -20
- data/app/inputs/pg_rails/selects_dependientes_input.rb +0 -9
- data/app/lib/pg_form_builder.rb +0 -31
- data/app/models/pg_rails/application_record.rb +0 -51
- data/app/views/application/_abrir_modal.js.erb +0 -14
- data/app/views/application/_actualizar_smart_listing.html.slim +0 -3
- data/app/views/application/_cerrar_modal.js.erb +0 -8
- data/app/views/application/_modal_ajax_form.js.erb +0 -7
- data/config/brakeman.ignore +0 -42
- data/config/locales/es.yml +0 -17
- data/config/routes.rb +0 -3
- data/config/spring.rb +0 -1
- data/lib/pg_rails/engine.rb +0 -42
- data/lib/pg_rails/simple_form/initializer.rb +0 -583
- data/lib/pg_rails.rb +0 -23
- /data/{lib/pg_rails → pg_engine/lib/pg_engine}/core_ext.rb +0 -0
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module PgRails
|
|
4
|
-
class ApplicationController < ActionController::Base
|
|
5
|
-
include ApplicationHelper
|
|
6
|
-
include Pundit::Authorization
|
|
7
|
-
# include SmartListing::Helper::ControllerExtensions
|
|
8
|
-
# helper SmartListing::Helper
|
|
9
|
-
include PrintHelper
|
|
10
|
-
include PostgresHelper
|
|
11
|
-
|
|
12
|
-
rescue_from PrintHelper::FechaInvalidaError, with: :fecha_invalida
|
|
13
|
-
rescue_from Pundit::NotAuthorizedError, with: :not_authorized
|
|
14
|
-
|
|
15
|
-
layout :setear_layout
|
|
16
|
-
|
|
17
|
-
def self.inherited(klass)
|
|
18
|
-
super
|
|
19
|
-
# incluyo los helpers de /app/helpers de la main_app
|
|
20
|
-
klass.helper :all
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
helper_method :mobile_device?
|
|
24
|
-
|
|
25
|
-
def mobile_device?
|
|
26
|
-
request.user_agent =~ /Mobile|webOS/
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
helper_method :any_filter?
|
|
30
|
-
|
|
31
|
-
def any_filter?
|
|
32
|
-
params.keys.reject { |a| a.in? ["controller", "action", "page", "page_size", "order_by", "order_direction"] }.any?
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
helper_method :current_page_size
|
|
37
|
-
|
|
38
|
-
def current_page_size
|
|
39
|
-
if params[:page_size].present?
|
|
40
|
-
session[:page_size] = params[:page_size]
|
|
41
|
-
params[:page_size].to_i
|
|
42
|
-
else
|
|
43
|
-
default_page_size
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def default_page_size
|
|
48
|
-
session[:page_size].present? ? session[:page_size].to_i : 10
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
protected
|
|
53
|
-
|
|
54
|
-
def pg_respond_update(object: nil, extra_js: nil)
|
|
55
|
-
object ||= instancia_modelo
|
|
56
|
-
respond_to do |format|
|
|
57
|
-
if (@saved = object.save)
|
|
58
|
-
format.html do
|
|
59
|
-
redirect_to object.decorate.target_object
|
|
60
|
-
end
|
|
61
|
-
format.json { render json: object.decorate }
|
|
62
|
-
else
|
|
63
|
-
format.turbo_stream do
|
|
64
|
-
flash.now[:error] = object.errors.full_messages.join(', ')
|
|
65
|
-
render turbo_stream: render_turbo_stream_flash_messages
|
|
66
|
-
end
|
|
67
|
-
format.html { render :edit, status: :unprocessable_entity }
|
|
68
|
-
format.json { render json: object.errors, status: :unprocessable_entity }
|
|
69
|
-
end
|
|
70
|
-
format.js do
|
|
71
|
-
render '_cerrar_modal', locals: {
|
|
72
|
-
contenido: 'form', extra_js: ['modal_ajax_form', extra_js]
|
|
73
|
-
}
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def pg_respond_create(object: nil, extra_js: nil)
|
|
79
|
-
object ||= instancia_modelo
|
|
80
|
-
respond_to do |format|
|
|
81
|
-
if (@saved = object.save)
|
|
82
|
-
format.html do
|
|
83
|
-
if params[:save_and_next] == 'true'
|
|
84
|
-
new_path = url_for(@clase_modelo) + "/new"
|
|
85
|
-
redirect_to new_path, notice: "#{@clase_modelo.nombre_singular} creado."
|
|
86
|
-
else
|
|
87
|
-
redirect_to object.decorate.target_object
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
format.json { render json: object.decorate }
|
|
91
|
-
else
|
|
92
|
-
format.turbo_stream do
|
|
93
|
-
flash.now[:error] = object.errors.full_messages.join(', ')
|
|
94
|
-
render turbo_stream: render_turbo_stream_flash_messages
|
|
95
|
-
end
|
|
96
|
-
format.html { render :new, status: :unprocessable_entity }
|
|
97
|
-
format.json { render json: object.errors.full_messages, status: :unprocessable_entity }
|
|
98
|
-
end
|
|
99
|
-
format.js do
|
|
100
|
-
render '_cerrar_modal', locals: {
|
|
101
|
-
contenido: 'form', extra_js: ['modal_ajax_form', extra_js]
|
|
102
|
-
}
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def pg_respond_index(collection)
|
|
108
|
-
respond_to do |format|
|
|
109
|
-
format.json { render json: collection }
|
|
110
|
-
format.js { render_smart_listing }
|
|
111
|
-
format.html { render_smart_listing }
|
|
112
|
-
format.xlsx do
|
|
113
|
-
render xlsx: 'download',
|
|
114
|
-
filename: "#{@clase_modelo.nombre_plural.gsub(' ', '-').downcase}" \
|
|
115
|
-
"-#{Time.zone.now.strftime("%Y-%m-%d-%H.%M.%S")}.xlsx"
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def pg_respond_show(object = nil)
|
|
121
|
-
respond_to do |format|
|
|
122
|
-
format.json { render json: object || instancia_modelo }
|
|
123
|
-
format.html
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def pg_respond_destroy(model, redirect_url = nil)
|
|
128
|
-
if destroy_model(model)
|
|
129
|
-
respond_to do |format|
|
|
130
|
-
format.html do
|
|
131
|
-
if redirect_url.present?
|
|
132
|
-
redirect_to redirect_url, notice: 'Elemento borrado.', status: 303
|
|
133
|
-
else
|
|
134
|
-
redirect_back(fallback_location: root_path, notice: 'Elemento borrado.', status: 303)
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
format.json { head :no_content }
|
|
138
|
-
end
|
|
139
|
-
else
|
|
140
|
-
respond_to do |format|
|
|
141
|
-
format.html do
|
|
142
|
-
if model.respond_to?(:associated_elements) && model.associated_elements.present?
|
|
143
|
-
@model = model
|
|
144
|
-
render destroy_error_details_view
|
|
145
|
-
else
|
|
146
|
-
flash[:error] = @error_message
|
|
147
|
-
# if redirect_url.present?
|
|
148
|
-
# redirect_to redirect_url
|
|
149
|
-
# else
|
|
150
|
-
redirect_back(fallback_location: root_path, status: 303)
|
|
151
|
-
# end
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
format.json { render json: { error: @error_message }, status: :unprocessable_entity }
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
# destroy_and_respond DEPRECADO
|
|
160
|
-
alias_method :destroy_and_respond, :pg_respond_destroy
|
|
161
|
-
|
|
162
|
-
def destroy_error_details_view
|
|
163
|
-
'destroy_error_details'
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def destroy_model(model)
|
|
167
|
-
@error_message = 'No se pudo eliminar el registro'
|
|
168
|
-
begin
|
|
169
|
-
destroy_method = model.respond_to?(:discard) ? :discard : :destroy
|
|
170
|
-
return true if model.send(destroy_method)
|
|
171
|
-
|
|
172
|
-
@error_message = model.errors.full_messages.join(', ')
|
|
173
|
-
false
|
|
174
|
-
rescue ActiveRecord::InvalidForeignKey => e
|
|
175
|
-
# class_name = /from table \"(?<table_name>[\p{L}_]*)\"/.match(e.message)[:table_name].singularize.camelcase
|
|
176
|
-
# # pk_id = /from table \"(?<pk_id>[\p{L}_]*)\"/.match(e.message)[:pk_id].singularize.camelcase
|
|
177
|
-
# clazz = Object.const_get class_name
|
|
178
|
-
# objects = clazz.where(model.class.table_name.singularize => model)
|
|
179
|
-
model_name = t("activerecord.models.#{model.class.name.underscore}")
|
|
180
|
-
@error_message = "#{model_name} no se pudo borrar porque tiene elementos asociados."
|
|
181
|
-
logger.debug e.message
|
|
182
|
-
end
|
|
183
|
-
false
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
def render_smart_listing
|
|
187
|
-
raise 'implementar en subclase'
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
def buscar_instancia
|
|
191
|
-
if Object.const_defined?('FriendlyId') && @clase_modelo.is_a?(FriendlyId)
|
|
192
|
-
@clase_modelo.friendly.find(params[:id])
|
|
193
|
-
else
|
|
194
|
-
@clase_modelo.find(params[:id])
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
def set_instancia_modelo
|
|
199
|
-
if action_name.in? %w[new create]
|
|
200
|
-
self.instancia_modelo = @clase_modelo.new(modelo_params)
|
|
201
|
-
else
|
|
202
|
-
self.instancia_modelo = buscar_instancia
|
|
203
|
-
|
|
204
|
-
instancia_modelo.assign_attributes(modelo_params) if action_name.in? %w[update]
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
instancia_modelo.current_user = send(PgRails.configuracion.current_user_method)
|
|
208
|
-
|
|
209
|
-
authorize instancia_modelo
|
|
210
|
-
|
|
211
|
-
self.instancia_modelo = instancia_modelo.decorate if action_name.in? %w[show edit new]
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
def instancia_modelo=(val)
|
|
215
|
-
instance_variable_set("@#{nombre_modelo}".to_sym, val)
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
def instancia_modelo
|
|
219
|
-
instance_variable_get("@#{nombre_modelo}".to_sym)
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
def modelo_params
|
|
223
|
-
if action_name == 'new'
|
|
224
|
-
params.permit(atributos_permitidos)
|
|
225
|
-
else
|
|
226
|
-
params.require(nombre_modelo).permit(atributos_permitidos)
|
|
227
|
-
end
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
def nombre_modelo
|
|
231
|
-
@clase_modelo.name.underscore
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
def default_url_options(options = {})
|
|
235
|
-
if Rails.env.production?
|
|
236
|
-
options.merge(protocol: 'https')
|
|
237
|
-
else
|
|
238
|
-
options
|
|
239
|
-
end
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
def setear_layout
|
|
243
|
-
if params[:sin_layout] == 'true'
|
|
244
|
-
false
|
|
245
|
-
else
|
|
246
|
-
'application'
|
|
247
|
-
end
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
def clase_modelo
|
|
251
|
-
# agarro la variable o intento con el nombre del controller
|
|
252
|
-
@clase_modelo ||= self.class.name.singularize.gsub('Controller', '').constantize
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
def filtros_y_policy(campos)
|
|
256
|
-
@filtros = PgRails::FiltrosBuilder.new(
|
|
257
|
-
self, clase_modelo, campos
|
|
258
|
-
)
|
|
259
|
-
scope = policy_scope(clase_modelo)
|
|
260
|
-
|
|
261
|
-
@filtros.filtrar(scope)
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
def do_sort(scope, field, direction)
|
|
265
|
-
unless scope.model.column_names.include? field.to_s
|
|
266
|
-
return scope
|
|
267
|
-
end
|
|
268
|
-
scope = scope.order(field => direction)
|
|
269
|
-
instance_variable_set(:"@field", field)
|
|
270
|
-
instance_variable_set(:"@direction", direction)
|
|
271
|
-
scope
|
|
272
|
-
rescue ArgumentError => e
|
|
273
|
-
Utils::Logueador.warning(e.to_s)
|
|
274
|
-
scope
|
|
275
|
-
end
|
|
276
|
-
|
|
277
|
-
def sort_collection(scope, options = {})
|
|
278
|
-
if params[:order_by].present?
|
|
279
|
-
field = params[:order_by]
|
|
280
|
-
direction = params[:order_direction]
|
|
281
|
-
do_sort(scope, field, direction)
|
|
282
|
-
elsif options[:default].present?
|
|
283
|
-
field = options[:default].first[0]
|
|
284
|
-
direction = options[:default].first[1]
|
|
285
|
-
do_sort(scope, field, direction)
|
|
286
|
-
else
|
|
287
|
-
scope
|
|
288
|
-
end
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
def fecha_invalida
|
|
292
|
-
respond_to do |format|
|
|
293
|
-
format.json do
|
|
294
|
-
render json: { error: 'Formato de fecha inválido' }, status: :unprocessable_entity
|
|
295
|
-
end
|
|
296
|
-
format.js { render inline: 'showToast("error", "Formato de fecha inválido")' }
|
|
297
|
-
format.html { go_back('Formato de fecha inválido') }
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
def not_authorized
|
|
302
|
-
respond_to do |format|
|
|
303
|
-
format.json do
|
|
304
|
-
render json: { error: 'Not authorized' }, status: :unprocessable_entity
|
|
305
|
-
end
|
|
306
|
-
# format.js { render inline: 'showToast("error", "Formato de fecha inválido")' }
|
|
307
|
-
format.html { go_back('Not authorized') }
|
|
308
|
-
end
|
|
309
|
-
end
|
|
310
|
-
|
|
311
|
-
def go_back(message)
|
|
312
|
-
flash[:error] = message
|
|
313
|
-
redirect_back fallback_location: root_path
|
|
314
|
-
end
|
|
315
|
-
end
|
|
316
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module PgRails
|
|
4
|
-
class EditarEnLugarController < ::ApplicationController
|
|
5
|
-
def actualizar
|
|
6
|
-
key_modelo = params.keys[1]
|
|
7
|
-
modelo = Kernel.const_get(key_modelo)
|
|
8
|
-
objeto = modelo.find params[:id]
|
|
9
|
-
authorize objeto, :editar_en_lugar?
|
|
10
|
-
object_params = request.parameters[key_modelo]
|
|
11
|
-
objeto.current_user = current_user
|
|
12
|
-
objeto.update(object_params)
|
|
13
|
-
respond_with_bip(objeto, param: key_modelo)
|
|
14
|
-
rescue Pundit::NotAuthorizedError
|
|
15
|
-
objeto.errors.add(:base, 'no autorizado')
|
|
16
|
-
respond_with_bip(objeto)
|
|
17
|
-
rescue Pundit::Error => e
|
|
18
|
-
Rollbar.error(e)
|
|
19
|
-
logger.error(e.message)
|
|
20
|
-
objeto.errors.add(:base, e.message)
|
|
21
|
-
respond_with_bip(objeto)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module PgRails
|
|
4
|
-
module EditarEnLugarHelper
|
|
5
|
-
def editar_en_lugar(objeto, atributo, tipo = :input, url = nil, collection = nil)
|
|
6
|
-
url = pg_rails.editar_en_lugar_path(objeto) if url.nil?
|
|
7
|
-
if tipo == :checkbox
|
|
8
|
-
best_in_place objeto, atributo, url: url, as: tipo, collection: %w[No Si],
|
|
9
|
-
param: objeto.model_name.name
|
|
10
|
-
elsif tipo == :date
|
|
11
|
-
best_in_place objeto, atributo, url: url, as: tipo, display_with: lambda { |v|
|
|
12
|
-
dmy(v)
|
|
13
|
-
}, param: objeto.model_name.name
|
|
14
|
-
# best_in_place objeto, atributo, url: editar_en_lugarurl(objeto), as: tipo, display_with: lambda { |v| dmy(v) }, class: 'datefield'
|
|
15
|
-
elsif tipo == :textarea
|
|
16
|
-
funcion = lambda do |valor|
|
|
17
|
-
return unless valor.present?
|
|
18
|
-
|
|
19
|
-
valor.gsub!("\r\n", '<br>')
|
|
20
|
-
valor.gsub!("\n", '<br>')
|
|
21
|
-
valor.html_safe
|
|
22
|
-
end
|
|
23
|
-
best_in_place objeto, atributo, url: url, as: tipo, display_with: funcion,
|
|
24
|
-
param: objeto.model_name.name
|
|
25
|
-
elsif tipo == :select && collection.present?
|
|
26
|
-
best_in_place objeto, atributo, url: url, as: tipo, collection: collection,
|
|
27
|
-
param: objeto.model_name.name, value: objeto.send(atributo), inner_class: 'form-control'
|
|
28
|
-
else
|
|
29
|
-
best_in_place objeto, atributo, url: url, as: tipo, param: objeto.model_name.name
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# Versión mejorada de editar_en_lugar, pero le pongo v2 por retrocompatibilidad
|
|
34
|
-
# La diferencia es que recibe un hash "options" y se le pueden agregar cualquiera de las options
|
|
35
|
-
# que admite best_in_place
|
|
36
|
-
def editar_en_lugar_v2(objeto, atributo, tipo = :input, options = {})
|
|
37
|
-
options[:url] = pg_rails.editar_en_lugar_path(objeto) if options[:url].nil?
|
|
38
|
-
options[:as] = tipo
|
|
39
|
-
options[:param] = objeto.model_name.name
|
|
40
|
-
options[:inner_class] = 'form-control' if options[:inner_class].nil?
|
|
41
|
-
options[:class] = 'editar_en_lugar_v2'
|
|
42
|
-
options[:html_attrs] = { autocomplete: :off }
|
|
43
|
-
# url = pg_rails.editar_en_lugar_path(objeto) if url.nil?
|
|
44
|
-
if tipo == :checkbox
|
|
45
|
-
options[:collection] = %w[No Si]
|
|
46
|
-
|
|
47
|
-
elsif tipo == :date
|
|
48
|
-
options[:display_with] = ->(v) { dmy(v) } if options[:display_with].nil?
|
|
49
|
-
|
|
50
|
-
elsif tipo == :textarea
|
|
51
|
-
funcion = lambda do |valor|
|
|
52
|
-
return unless valor.present?
|
|
53
|
-
|
|
54
|
-
valor.gsub!("\r\n", '<br>')
|
|
55
|
-
valor.gsub!("\n", '<br>')
|
|
56
|
-
valor.html_safe
|
|
57
|
-
end
|
|
58
|
-
options[:display_with] = funcion if options[:display_with].nil?
|
|
59
|
-
|
|
60
|
-
elsif tipo == :select && options[:collection].present?
|
|
61
|
-
options[:value] = objeto.send(atributo)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
best_in_place objeto, atributo, options
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# TODO: mover a otro helper
|
|
68
|
-
def encabezado(campo, options = {})
|
|
69
|
-
clase = (options[:clase] || @clase_modelo)
|
|
70
|
-
if options[:ordenable]
|
|
71
|
-
field = controller.instance_variable_get(:"@field")
|
|
72
|
-
direction = controller.instance_variable_get(:"@direction")
|
|
73
|
-
uri = URI.parse(request.url)
|
|
74
|
-
if uri.query.present?
|
|
75
|
-
cgi = CGI.parse(uri.query)
|
|
76
|
-
else
|
|
77
|
-
cgi = {}
|
|
78
|
-
end
|
|
79
|
-
cgi["order_by"] = campo
|
|
80
|
-
cgi["order_direction"] =
|
|
81
|
-
if field.to_s == campo.to_s && direction.to_s == 'asc'
|
|
82
|
-
'desc'
|
|
83
|
-
else
|
|
84
|
-
'asc'
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
if field.to_s == campo.to_s
|
|
88
|
-
symbol =
|
|
89
|
-
if direction.to_s == 'asc'
|
|
90
|
-
'<i class="bi bi-sort-down-alt" />'
|
|
91
|
-
elsif direction.to_s == 'desc'
|
|
92
|
-
'<i class="bi bi-sort-up" />'
|
|
93
|
-
end
|
|
94
|
-
else
|
|
95
|
-
symbol = ''
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
uri.query = cgi.map {|a,b| [a, (b.length == 1 ? b.first : b)]}.to_h.to_query
|
|
99
|
-
|
|
100
|
-
link_to(clase.human_attribute_name(campo), uri.to_s) + " #{symbol}".html_safe
|
|
101
|
-
else
|
|
102
|
-
clase.human_attribute_name(campo)
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module PgRails
|
|
4
|
-
module FormHelper
|
|
5
|
-
def pg_form_for(object, *args, &block)
|
|
6
|
-
options = args.extract_options!
|
|
7
|
-
|
|
8
|
-
options[:builder] = PgFormBuilder
|
|
9
|
-
options[:html] ||= {}
|
|
10
|
-
options[:html][:class] = if options[:html].key?(:class)
|
|
11
|
-
['pg-form', options[:html][:class]].compact
|
|
12
|
-
else
|
|
13
|
-
'pg-form'
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
simple_form_for(object, *(args << options), &block)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def url_change_format(url)
|
|
20
|
-
uri = URI.parse(url)
|
|
21
|
-
uri.path = "#{uri.path}.xlsx"
|
|
22
|
-
uri.to_s
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module PgRails
|
|
4
|
-
class AsociacionCreableInput < SimpleForm::Inputs::StringInput
|
|
5
|
-
include ActionView::Helpers::FormTagHelper
|
|
6
|
-
|
|
7
|
-
def boton(wrapper_options = {})
|
|
8
|
-
if PgRails.config.bootstrap_version >= 4
|
|
9
|
-
button_tag('', wrapper_options)
|
|
10
|
-
else
|
|
11
|
-
button_tag('<span class="caret">'.html_safe, wrapper_options)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def hidden_input(wrapper_options = {})
|
|
16
|
-
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
17
|
-
merged_input_options = merge_wrapper_options(merged_input_options, { class: 'oculto' })
|
|
18
|
-
@builder.text_field(attribute_name, merged_input_options)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def input(wrapper_options = nil)
|
|
22
|
-
unless string?
|
|
23
|
-
input_html_classes.unshift('string')
|
|
24
|
-
input_html_options[:type] ||= input_type if html5?
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
28
|
-
merged_input_options = merge_wrapper_options(merged_input_options, { class: 'keep-disabled' })
|
|
29
|
-
|
|
30
|
-
text_field_tag(nil, object.send(reflection.name).to_s, merged_input_options)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def seleccionar_asociado(wrapper_options = {})
|
|
34
|
-
icon = content_tag :span, nil, class: 'fa fa-hand-pointer'
|
|
35
|
-
merged_input_options = merge_wrapper_options(wrapper_options,
|
|
36
|
-
{ class: 'seleccionar_asociado dropdown-item', href: 'javascript:void(0)',
|
|
37
|
-
data: { url: options[:url_seleccionar] } })
|
|
38
|
-
anchor = content_tag :a, "#{icon} Seleccionar".html_safe, merged_input_options
|
|
39
|
-
if PgRails.config.bootstrap_version >= 4
|
|
40
|
-
anchor
|
|
41
|
-
else
|
|
42
|
-
"<li>#{anchor}</li>".html_safe
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def crear_asociado(wrapper_options = {})
|
|
47
|
-
icon = content_tag :span, nil, class: 'fa fa-plus-square'
|
|
48
|
-
merged_input_options = merge_wrapper_options(wrapper_options,
|
|
49
|
-
{ class: 'crear_asociado dropdown-item', href: 'javascript:void(0)',
|
|
50
|
-
data: { url: options[:url_crear] } })
|
|
51
|
-
anchor = content_tag :a, "#{icon} Crear".html_safe, merged_input_options
|
|
52
|
-
if PgRails.config.bootstrap_version >= 4
|
|
53
|
-
anchor
|
|
54
|
-
else
|
|
55
|
-
"<li>#{anchor}</li>".html_safe
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def borrar_seleccion(wrapper_options = {})
|
|
60
|
-
icon = content_tag :span, nil, class: 'fa fa-trash'
|
|
61
|
-
merged_input_options = merge_wrapper_options(wrapper_options,
|
|
62
|
-
{ class: 'borrar_seleccion dropdown-item',
|
|
63
|
-
href: 'javascript:void(0)' })
|
|
64
|
-
anchor = content_tag :a, "#{icon} Borrar selección".html_safe, merged_input_options
|
|
65
|
-
if PgRails.config.bootstrap_version >= 4
|
|
66
|
-
anchor
|
|
67
|
-
else
|
|
68
|
-
"<li>#{anchor}</li>".html_safe
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module PgRails
|
|
4
|
-
class FechaInput < SimpleForm::Inputs::StringInput
|
|
5
|
-
def input(wrapper_options = nil)
|
|
6
|
-
# esto es porque si no Rails llama a value_before_type_cast
|
|
7
|
-
if object.is_a? Draper::Decorator
|
|
8
|
-
# Salteo el decorator para que me tome la fecha con formato inglés
|
|
9
|
-
value = object.object.public_send(attribute_name)
|
|
10
|
-
else
|
|
11
|
-
value = object.public_send(attribute_name)
|
|
12
|
-
end
|
|
13
|
-
@input_type = 'date'
|
|
14
|
-
|
|
15
|
-
options = merge_wrapper_options({ value: value, class: '', autocomplete: 'off' },
|
|
16
|
-
wrapper_options)
|
|
17
|
-
super(options)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
data/app/lib/pg_form_builder.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# TODO: fix hackeo
|
|
4
|
-
# class PgFormBuilder < NestedForm::SimpleBuilder
|
|
5
|
-
class PgFormBuilder < SimpleForm::FormBuilder
|
|
6
|
-
def mensajes_de_error
|
|
7
|
-
return unless object.errors.present?
|
|
8
|
-
|
|
9
|
-
errors = object.errors.full_messages.map { |m| "<li>#{m}</li>" }.join
|
|
10
|
-
"<div class='alert alert-danger'>#{errors}</div>".html_safe
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
map_type :date, to: PgRails::FechaInput
|
|
14
|
-
# map_type :datetime, to: PgRails::FechaInput
|
|
15
|
-
|
|
16
|
-
def asociacion_creable(atributo, url_seleccionar, url_crear, options = {})
|
|
17
|
-
options[:as] = 'pg_rails/asociacion_creable'
|
|
18
|
-
options[:wrapper] = :asociacion_creable
|
|
19
|
-
options[:url_seleccionar] = url_seleccionar
|
|
20
|
-
options[:url_crear] = url_crear
|
|
21
|
-
options[:wrapper_html] = { class: 'completado' } if object.send(atributo).present?
|
|
22
|
-
association atributo, options
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def submit_button(*args, &block)
|
|
26
|
-
options = args.extract_options!.dup
|
|
27
|
-
options[:class] = ['btn-primary', options[:class]].compact
|
|
28
|
-
args << options
|
|
29
|
-
send(:submit, *args, &block)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module PgRails
|
|
4
|
-
class ApplicationRecord < ActiveRecord::Base
|
|
5
|
-
extend Enumerize
|
|
6
|
-
include PrintHelper
|
|
7
|
-
include PostgresHelper
|
|
8
|
-
|
|
9
|
-
self.abstract_class = true
|
|
10
|
-
|
|
11
|
-
attr_accessor :current_user
|
|
12
|
-
|
|
13
|
-
before_create :setear_creado_y_actualizado_por
|
|
14
|
-
before_update :setear_actualizado_por
|
|
15
|
-
|
|
16
|
-
def self.nombre_plural
|
|
17
|
-
model_name.human(count: 2)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def self.nombre_singular
|
|
21
|
-
model_name.human(count: 1)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def to_s
|
|
25
|
-
%i[nombre name].each do |campo|
|
|
26
|
-
return send(campo) if try(campo).present?
|
|
27
|
-
end
|
|
28
|
-
if id.present?
|
|
29
|
-
"#{self.class.nombre_singular} ##{id}"
|
|
30
|
-
else
|
|
31
|
-
super
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
|
|
37
|
-
def setear_creado_y_actualizado_por
|
|
38
|
-
setear_si_existe :creado_por, current_user
|
|
39
|
-
setear_si_existe :actualizado_por, current_user
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def setear_actualizado_por
|
|
43
|
-
setear_si_existe :actualizado_por, current_user
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def setear_si_existe(campo, valor)
|
|
47
|
-
metodo = "#{campo}="
|
|
48
|
-
send(metodo, valor) if respond_to?(metodo) && valor.present?
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
$(function() {
|
|
2
|
-
var modal = $('<%= j render contenido %>').modal();
|
|
3
|
-
|
|
4
|
-
<% if defined? extra_js %>
|
|
5
|
-
<% [extra_js].flatten.each do |partial| %>
|
|
6
|
-
<%= render partial: partial %>
|
|
7
|
-
<% end %>
|
|
8
|
-
<% end %>
|
|
9
|
-
$(modal).on('hidden.bs.modal', function () {
|
|
10
|
-
$(this).data('bs.modal', null);
|
|
11
|
-
$(this).remove();
|
|
12
|
-
});
|
|
13
|
-
PgRails.bindear('.modal')
|
|
14
|
-
});
|