# File app/models/comment_response_request.rb, line 53 def initialize(opts={}) @request_type = opts[:request_type] || nil super end
# File app/models/comment_response_request.rb, line 58 def first_request? res = self.comment_response.status.eql?('new') end
Notas sobre los datos del request: 1.- Aunque es un xml, hay que enviarlo como un textos sustituyendo los corchetes por los simbolos < y > 2.- Para que los deprtamentos coincidan, enviamos sólo el primer texto del nombre hasta la primera coma
(hay unas pequeñas diferencias en el resto del nombre)
3.- El texto en el tag descripción tiene que ir encodeado en Base64.
(si va como texto "normal" la respuesta es "Error valudaciones", ref: http://www.java-samples.com/showtutorial.php?tutorialid=1090).
# File app/models/comment_response_request.rb, line 121 def prepare_request_data comment = self.comment_response.comment commentable = comment.commentable data_params = {} data_params = if self.request_type.eql?('envio') # enviar solicitud {"accion" => 'A', "referencia" => commentable.id, "tipo" => commentable.is_a?(News) ? 'N' : 'P', "tituloCastellano" => commentable.title_es, "tituloEuskera" => commentable.title_eu, "tituloIngles" => commentable.title_en, "identificadorComentario" => comment.id, "descripcion" => Base64.b64encode(comment.body.to_s.strip), "departamento" => self.comment_response.organization.name.split(",").first, "departamentoAnterior" => "", "fechaPlazo" => "", "listaTags" => commentable.tag_list.map {|tag| "<tag>#{tag}</tag>"}.join(" "), "fechaRespuesta" => "", "identificadorCiudadano" => "", "requiereAnotacion" => 'S' } else # comprobar el estado de la solicitud {"accion" => 'S', "referencia" => commentable.id, "tipo" => commentable.is_a?(News) ? 'N' : 'P', "identificadorComentario" => comment.id, "departamento" => self.comment_response.organization.name.split(",").first, "identificadorCiudadano" => self.comment_response.citizen_id } end txt = "" data_params.each do |key, val| txt += "<#{key}>#{val}</#{key}>" end txt.gsub(/</,'<').gsub(/>/,'>') end
# File app/models/comment_response_request.rb, line 66 def pretty_result RESPONSE_RESULTS[self.result] end
# File app/models/comment_response_request.rb, line 70 def send_request if self.comment_response.status.eql?('published') self.result = "-1" self.response_body = "" self.response_error = "Comentario respondido (respuesta ID: #{self.comment_response.answer_comment_id})" self.response_status = 'denegado' # para indicar que no hemos podidido conectar con al aplicación rrcc else self.request_data ||= prepare_request_data self.soap_action = "#{self.request_type}_noticia_propuesta_irekia".to_sym soap_namespace = :q77 Savon.env_namespace = :soapenv client = Savon::Client.new do |wsdl| wsdl.endpoint = service_data[:endpoint] wsdl.namespace = service_data[:namespace] end response = nil begin response = client.request soap_namespace, self.soap_action do service_data[:soap_namespaces].each do |key, val| soap.namespaces[key] = val end soap.header = {} soap.body = prepare_request_body() end # end of request data self.response_body = response.to_hash parse_response() self.response_status = "received" # para indicar que sí hemos recibido respuesta de la aplicación rrcc rescue => error self.result = "0" self.response_body = "" self.response_error = error self.response_status = 'error' # para indicar que no hemos podidido conectar con al aplicación rrcc end end return true end