Guest User

Untitled

a guest
Nov 20th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rails 8.45 KB | None | 0 0
  1. class StudyVersionsController < ApplicationController
  2.  
  3.   before_action :authenticate_user!
  4.   before_action :authorized?
  5.   before_action :set_study_version, only: [:show, :edit, :update, :destroy]
  6.  
  7.   def edit
  8.     obtain_token
  9.     if @token.nil?
  10.       flash[:error] = "The study is locked for editing by another user."
  11.       redirect_to request.referer
  12.     else
  13.       current_id = @study_version.id
  14.       @study_version = @study_version.edit_version
  15.       if current_id != @study_version.id
  16.         AuditTrail.update_item_event(current_user, @study.identifier, @study_version.semantic_version, "Study version created")
  17.       end
  18.       AuditTrail.update_item_event(current_user, @study.identifier, @study_version.semantic_version, "Study version updated")
  19.     end
  20.   end
  21.  
  22.   def status
  23.     obtain_token
  24.     if @token.nil?
  25.       flash[:error] = "The study is locked for editing by another user."
  26.       redirect_to request.referer
  27.     end
  28.   end
  29.  
  30.   def update_status
  31.     find_token
  32.     if @token.nil?
  33.       flash[:error] = "The changes were not saved as the edit lock has timed out."
  34.     else
  35.       @study_version.update_state(the_params)
  36.       AuditTrail.update_item_event(current_user, @study.identifier, @study_version.semantic_version, "Study version updated")
  37.       @token.release
  38.     end
  39.     redirect_to history_study_path(@study)
  40.   end
  41.  
  42.   def soa
  43.     @study_version = StudyVersion.find(params[:id])
  44.     render text: @study_version.soa.html_safe
  45.   end
  46.  
  47.   def clear
  48.     find_token
  49.     if @token.nil?
  50.       render :json => {:errors => ["The changes were not saved as the edit lock has timed out."]}, :status => 422
  51.     else
  52.       result = Visit.where(study_version_id: params[:id]).destroy_all
  53.       result = Form.where(study_version_id: params[:id]).destroy_all
  54.       render :json => {}, :status => 200
  55.     end
  56.   end
  57.  
  58.   def update
  59.     find_token
  60.     if @token.nil?
  61.       render :json => {:errors => ["The changes were not saved as the edit lock has timed out."]}, :status => 422
  62.     else
  63.       @study_version.update(the_params)
  64.       if @study_version.errors.empty?
  65.         render json: { data: @study_version.to_hash }, :status => 200
  66.       else
  67.         render :json => { :errors => @study_version.errors.full_messages}, :status => 422
  68.       end
  69.     end
  70.   end
  71.  
  72.   def show
  73.     @study_version = StudyVersion.find(params[:id])
  74.     @study = Study.find(@study_version.study_id)
  75.     respond_to do |format|
  76.       format.html
  77.       format.json do
  78.         render json: { data: @study_version.to_hash }, :status => 200
  79.       end
  80.     end
  81.   end
  82.  
  83.   def destroy
  84.     obtain_token
  85.     if @token.nil?
  86.       flash[:error] = "The study is locked for editing by another user."
  87.     else
  88.       @study_version.destroy
  89.       AuditTrail.delete_item_event(current_user, @study.identifier, @study_version.semantic_version, "Study version deleted")
  90.       @token.release
  91.     end
  92.     redirect_to history_study_path(@study)
  93.   end
  94.  
  95.   def export
  96.     study_version = StudyVersion.find(params[:id])
  97.     study = Study.find(study_version.study_id)
  98.     lock = Token.obtain("#{study.identifier}_#{the_params[:export_type].upcase}", "", current_user)
  99.     if !lock.nil?
  100.       @lock_id = lock.id
  101.       case the_params[:export_type]
  102.         when "json"
  103.           @path = export_json_study_version_path(study_version)
  104.         when "odm"
  105.           @path = export_odm_study_version_path(study_version)
  106.         when "als"
  107.           @path = export_als_study_version_path(study_version)
  108.         when "crf"
  109.           @path = export_crf_study_version_path(study_version, table_data: params[:table_data])
  110.         when "acrf"
  111.           @path = export_acrf_study_version_path(study_version, table_data: params[:table_data])
  112.         else
  113.           @path = export_json_study_version_path(study_version) # Default to JSON for the moment
  114.       end
  115.       respond_to do |format|
  116.         format.html {render :layout => 'export'}
  117.       end
  118.     else
  119.       @lock_id = 0
  120.       respond_to do |format|
  121.         flash[:error] = "Someone else is curently exporting this item. Try again in a minute."
  122.         format.html {render :layout => 'export'}
  123.       end
  124.     end
  125.   end
  126.  
  127.   def export_json
  128.     study_version = StudyVersion.find(params[:id])
  129.     study = Study.find(study_version.study_id)
  130.     lock = Token.obtain("#{study.identifier}_JSON", "", current_user)
  131.     study = Study.find(study_version.study_id)
  132.     hash = study_version.to_full_hash
  133.     send_data hash.to_json, filename: "#{study_version.name}.json", :type => 'application/json; header=present', disposition: "attachment"
  134.     lock.release
  135.   end
  136.  
  137.   def export_odm
  138.     study_version = StudyVersion.find(params[:id])
  139.     study = Study.find(study_version.study_id)
  140.     lock = Token.obtain("#{study.identifier}_ODM", "", current_user)
  141.     xml = study_version.to_xml
  142.     send_data xml, filename: "#{study_version.name}.xml", :type => 'application/xhtml+xml; header=present', disposition: "attachment"
  143.     lock.release
  144.   end
  145.  
  146.   def export_als
  147.     study_version = StudyVersion.find(params[:id])
  148.     study = Study.find(study_version.study_id)
  149.     lock = Token.obtain("#{study.identifier}_ALS", "", current_user)
  150.     filename = "#{study_version.name}.xls"
  151.     result = study_version.to_als(filename)
  152.     lock.release
  153.     if result[:error_count] == 0
  154.       send_file result[:full_path], :type => "application/vnd.ms-excel", :filename => filename, :stream => false
  155.     else
  156.       flash[:error] = result[:error_message]
  157.       respond_to do |format|
  158.         format.html { render :layout => 'export' }
  159.       end
  160.     end
  161.   end
  162.  
  163.   def export_crf
  164.     html = ""
  165.     html += "<br>"
  166.     # html += params[:table_data].gsub('<span class="glyphicon glyphicon-ok text-success"></span>', '&#10004;') if params[:table_data].present?
  167.     # html += "</td></tr></tbody></table>"
  168.     html += PdfReport.page_break
  169.     study_version = StudyVersion.find(params[:id])
  170.     study = Study.find(study_version.study_id)
  171.     lock = Token.obtain("#{study.identifier}_CRF", "", current_user)
  172.     forms = Form.where(study_version_id: study_version.id).order('ordinal asc')
  173.     forms.each do |form|
  174.       html += PdfReport.page_break
  175.       html += Mdr.form_to_html(form.form_id, form.form_namespace, true).html_safe
  176.     end
  177.     # pdf = PdfReport.create("Case Report Form", "#{study.label}", current_user, html)
  178.     header_html = view_context.render 'shared/report.html.erb'
  179.     pdf = PdfReport.create("Case Report Form", "#{study.label}", current_user, html,  header_html)
  180.     send_data pdf, filename: "#{study.identifier}_CRF.pdf", type: 'application/pdf', disposition: 'inline' #'inline'
  181.     lock.release
  182.   end
  183.  
  184.   def export_acrf
  185.     html = ""
  186.     html += "<br>"
  187.     # html += params[:table_data].gsub('<span class="glyphicon glyphicon-ok text-success"></span>', '&#10004;') if params[:table_data].present?
  188.     # html += "</td></tr></tbody></table>"
  189.     html += PdfReport.page_break
  190.     study_version = StudyVersion.find(params[:id])
  191.     study = Study.find(study_version.study_id)
  192.     lock = Token.obtain("#{study.identifier}_ACRF", "", current_user)
  193.     forms = Form.where(study_version_id: study_version.id).order('ordinal asc')
  194.     forms.each do |form|
  195.       html += PdfReport.page_break
  196.       html += Mdr.form_to_html_annotations(form.form_id, form.form_namespace, true).html_safe
  197.     end
  198.     #pdf = PdfReport.create("Annotated CRF", "#{study.label}", current_user, html)
  199.     header_html = view_context.render 'shared/report.html.erb'
  200.     pdf = PdfReport.create("Case Report Form", "#{study.label}", current_user, html, header_html)
  201.     send_data pdf, filename: "#{study.identifier}_aCRF.pdf", type: 'application/pdf', disposition: 'inline'
  202.     lock.release
  203.   end
  204.  
  205.   private
  206.  
  207.   def obtain_token
  208.     @study_version = StudyVersion.find(params[:id])
  209.     @study = Study.find(@study_version.study_id)
  210.     @token = Token.obtain(@study.identifier, @study_version.semantic_version, current_user)
  211.     return @token
  212.   end
  213.  
  214.   def find_token
  215.     @study_version = StudyVersion.find(params[:id])
  216.     @study = Study.find(@study_version.study_id)
  217.     @token = Token.find_token(@study.identifier, current_user)
  218.     return @token
  219.   end
  220.  
  221.   def authorized?
  222.     authorize StudyVersion
  223.   end
  224.  
  225.   def the_params
  226.     params.require(:study_version).permit(:study_id, :name, :description, :protocol_name, :state, :export_type)
  227.   end
  228.  
  229.   # Use callbacks to share common setup or constraints between actions.
  230.   def set_study_version
  231.     @study_version = StudyVersion.find(params[:id])
  232.   end
  233.  
  234. end
Add Comment
Please, Sign In to add comment