lib/msip/concerns/controllers/personas_controller.rb in msip-2.2.0.alfa3 vs lib/msip/concerns/controllers/personas_controller.rb in msip-2.2.0.beta1
- old
+ new
@@ -1,11 +1,11 @@
+# frozen_string_literal: true
module Msip
module Concerns
module Controllers
module PersonasController
-
extend ActiveSupport::Concern
included do
include ActionView::Helpers::AssetUrlHelper
@@ -15,15 +15,16 @@
def clase
"Msip::Persona"
end
def genclase
- return 'F'
+ "F"
end
def atributos_show_msip
- [ :id,
+ [
+ :id,
:nombres,
:apellidos,
:anionac,
:mesnac,
:dianac,
@@ -31,67 +32,71 @@
:pais,
:departamento,
:municipio,
:clase,
:nacionalde,
- :tdocumento,
- :numerodocumento
+ :tdocumento_id,
+ :numerodocumento,
]
end
def atributos_show
- self.atributos_show_msip
+ atributos_show_msip
end
def atributos_index
atributos_show
end
def atributos_form
- a = atributos_show - [:id]
- return a
+ a = atributos_show
+ a
end
+ def atributos_html_encabezado_formulario
+ { "data-controller": "msip--sindocaut" }
+ end
+
def index_msip(c = nil)
- if c == nil
+ if c.nil?
c = Msip::Persona.all
end
if params[:term]
# usado en autocompletación limitado a 10
term = Msip::Ubicacion.connection.quote_string(params[:term])
- consNomvic = term.downcase.strip #sin_tildes
+ consNomvic = term.downcase.strip # sin_tildes
consNomvic.gsub!(/ +/, ":* & ")
- if consNomvic.length > 0
+ unless consNomvic.empty?
consNomvic += ":*"
end
- where = " to_tsvector('spanish', unaccent(persona.nombres) " +
- " || ' ' || unaccent(persona.apellidos) " +
- " || ' ' || COALESCE(persona.numerodocumento::TEXT, '')) @@ " +
- "to_tsquery('spanish', '#{consNomvic}')";
+ where = " to_tsvector('spanish', unaccent(persona.nombres) " \
+ " || ' ' || unaccent(persona.apellidos) " \
+ " || ' ' || COALESCE(persona.numerodocumento::TEXT, '')) @@ " \
+ "to_tsquery('spanish', '#{consNomvic}')"
partes = [
- 'nombres',
- 'apellidos',
- 'COALESCE(numerodocumento::TEXT, \'\')'
+ "nombres",
+ "apellidos",
+ "COALESCE(numerodocumento::TEXT, '')",
]
- s = "";
- l = " persona.id ";
- seps = "";
- sepl = " || ';' || ";
+ s = ""
+ l = " persona.id "
+ seps = ""
+ sepl = " || ';' || "
partes.each do |p|
- s += seps + p;
- l += sepl + "char_length(#{p})";
- seps = " || ' ' || ";
+ s += seps + p
+ l += sepl + "char_length(#{p})"
+ seps = " || ' ' || "
end
- qstring = "SELECT TRIM(#{s}) AS value, #{l} AS id
+ qstring = "SELECT TRIM(#{s}) AS value, #{l} AS id
FROM public.msip_persona AS persona
- WHERE #{where} ORDER BY 1 LIMIT 10";
+ WHERE #{where} ORDER BY 1 LIMIT 10"
- r = ActiveRecord::Base.connection.select_all qstring
+ r = ActiveRecord::Base.connection.select_all(qstring)
respond_to do |format|
- format.json { render :json, inline: r.to_json }
- format.html { render inline: 'No responde con parametro term' }
+ format.json { render(:json, inline: r.to_json) }
+ format.html { render(inline: "No responde con parametro term") }
end
else
super(c)
end
end
@@ -104,40 +109,116 @@
def remplazar
end
# API
def datos
- return if !params[:id_persona]
+ return unless params[:id_persona]
+
@persona = Msip::Persona.find(params[:id_persona].to_i)
- authorize! :read, @persona
- oj = {
+ authorize!(:read, @persona)
+ oj = {
id: @persona.id,
nombres: @persona.nombres,
apellidos: @persona.apellidos,
sexo: @persona.sexo,
- tdocumento: @persona.tdocumento ? @persona.tdocumento.sigla :
- '',
+ tdocumento: if @persona.tdocumento
+ @persona.tdocumento.sigla
+ else
+ ""
+ end,
numerodocumento: @persona.numerodocumento,
dianac: @persona.dianac,
mesnac: @persona.mesnac,
- anionac: @persona.anionac
+ anionac: @persona.anionac,
}
## Si está autocompletando una persona de orgsocial persona
# entonces autcompletar cargo y correo
if params[:ac_orgsocial_persona]
orgsocial_persona = Msip::OrgsocialPersona.find_by(persona_id: @persona.id)
if orgsocial_persona
- oj[:cargo] = orgsocial_persona.cargo
- oj[:correo] = orgsocial_persona.cargo
+ oj[:cargo] = orgsocial_persona.cargo
+ oj[:correo] = orgsocial_persona.cargo
end
end
respond_to do |format|
- format.json { render json: oj, status: :ok }
- format.html { render inilne: oj.to_s, status: :ok }
+ format.json { render(json: oj, status: :ok) }
+ format.html { render(inilne: oj.to_s, status: :ok) }
end
end
+ # Retorna una identificación para tipo de documento SIN DOCUMENTO
+ # para una persona en base
+ def identificacionsd
+ pid = nil
+ if params && params[:persona_id] && params[:persona_id] != ""
+ pid = params[:persona_id].to_i
+ end
+ ndoc = Msip::PersonasController
+ .nueva_persona_sd_posible_numerodocumento(pid)
+ Rails.logger.debug { "OJO ndoc=#{ndoc}" }
+ respond_to do |format|
+ format.json do
+ render(inline: ndoc)
+ return
+ end
+ format.html do
+ render(inline: ndoc)
+ return
+ end
+ end
+ end
+
+ # Retorna una propuesta para número de documento con base
+ # en la id de la persona (no nil)
+ def self.mejora_nuevo_numerodocumento_sindoc(persona_id)
+ numerodocumento = persona_id
+ while Msip::Persona.where(
+ tdocumento_id: 11, numerodocumento: numerodocumento,
+ ).where("id<>?", persona_id).count > 0
+ numerodocumento = numerodocumento.to_s
+ if !numerodocumento.empty? && numerodocumento[-1] >= "A" &&
+ numerodocumento[-1] < "Z"
+ ul = numerodocumento[-1].ord + 1
+ numerodocumento = numerodocumento[0..-2] + ul.chr(Encoding::UTF_8)
+ else
+ numerodocumento += "A"
+ end
+ end
+ numerodocumento
+ end
+
+ def self.nueva_persona_sd_posible_numerodocumento(persona_id)
+ if persona_id.nil?
+ ruid = Msip::Persona.connection.execute(<<-SQL.squish)
+ SELECT last_value FROM msip_persona_id_seq;
+ SQL
+ persona_id = ruid[0]["last_value"] + 1
+ end
+ numerodocumento = mejora_nuevo_numerodocumento_sindoc(
+ persona_id,
+ )
+ numerodocumento
+ end
+
+ def self.nueva_persona_valores_predeterminados(menserror)
+ numerodocumento = nueva_persona_sd_posible_numerodocumento(
+ nil,
+ )
+ persona = Msip::Persona.create(
+ nombres: "N",
+ apellidos: "N",
+ sexo: "S",
+ tdocumento_id: 11, # SIN DOCUMENTO
+ numerodocumento: numerodocumento,
+ )
+ unless persona.save(validate: false)
+ menserror << "No pudo crear persona"
+ return nil
+ end
+ persona
+ end
+
def set_persona
@persona = Msip::Persona.find(params[:id])
@registro = @persona
end
@@ -145,27 +226,24 @@
atributos_form + [
:id_pais,
:id_departamento,
:id_municipio,
:id_clase,
- :tdocumento_id
+ :tdocumento_id,
]
end
def lista_params
lista_params_msip
end
def persona_params
params.require(:persona).permit(lista_params)
end
-
-
end # include
class_methods do
end
-
end
end
end
end