PageRenderTime 1642ms CodeModel.GetById 35ms RepoModel.GetById 1ms app.codeStats 0ms

/app/controllers/concerns/family_members.rb

https://bitbucket.org/Ankit4991/dr.-crm
Ruby | 241 lines | 218 code | 18 blank | 5 comment | 22 complexity | a4f53ca6bdf339810008898947fcfbb9 MD5 | raw file
  1. ##
  2. # FamilyMembers is common for Patient and Doctor Module both.
  3. # Because we need same functionality of Family member in Patient as well as in Doctor.
  4. module FamilyMembers
  5. extend ActiveSupport::Concern
  6. included do
  7. before_filter :set_patient
  8. def index
  9. @family_member=FamilyMember.new
  10. current_organisation.diseases.default_medical.each do |disease|
  11. @family_member.pmhxes.build(disease: disease)
  12. @family_member.pohxes.build(disease: disease)
  13. @family_member.medications.build(disease: disease)
  14. end
  15. current_organisation.diseases.default_allergies.each do |disease|
  16. @family_member.allergies.build(disease: disease)
  17. end
  18. render partial: "/patient/dashboards/dashboard_tabs/family_member"
  19. end
  20. def create
  21. family_member = @patient.family_members.build(params.require(:family_member).permit!)
  22. if family_member.save
  23. flash[:notice] = "Family Member added Successfully"
  24. else
  25. flash[:alert] = "Error: Family Member not added due to #{family_member.errors.full_messages.join(', ')}"
  26. end
  27. redirect_to :back
  28. end
  29. def edit
  30. @family_member=FamilyMember.find(params[:id])
  31. current_organisation.diseases.default_medical.each do |disease|
  32. (@family_member.pmhxes.map(&:disease_id).include? disease.id) ? "" : @family_member.pmhxes.build(disease: disease)
  33. (@family_member.pohxes.map(&:disease_id).include? disease.id) ? "" : @family_member.pohxes.build(disease: disease)
  34. end
  35. current_organisation.diseases.default_allergies.each do |disease|
  36. @family_member.allergies.present? ? "" : @family_member.allergies.build(disease: disease)
  37. end
  38. render template: '/patient/family_members/edit'
  39. end
  40. def update_relation
  41. family_member = FamilyMember.find(params[:family_member])
  42. if family_member.update_attributes!(relation: params[:relation])
  43. flash[:notice] = "Family Member updated Successfully"
  44. #render :json => {status: 'Success', msg: flash[:notice] }.to_json
  45. else
  46. flash[:alert] = "Error: Family Member not updated due to #{family_member.errors.full_messages.join(', ')}"
  47. #render :json => {status: 'Error', msg: flash[:alert] }.to_json
  48. end
  49. redirect_to :back
  50. end
  51. def update
  52. family_member = FamilyMember.find(params[:id])
  53. if family_member.update_attributes(params.require(:family_member).permit!)
  54. if family_member.patient.home_address.present?
  55. family_member.patient.home_address.update_attributes(params.require(:home_address).permit!)
  56. else
  57. family_member.patient.create_home_address.(params.require(:home_address).permit!)
  58. end
  59. if family_member.patient.office_address.present?
  60. family_member.patient.office_address.update_attributes(params.require(:office_address).permit!)
  61. else
  62. family_member.patient.create_office_address.(params.require(:office_address).permit!)
  63. end
  64. flash[:notice] = "Family Member updated Successfully"
  65. else
  66. flash[:alert] = "Error: Family Member not updated due to #{family_member.errors.full_messages.join(', ')}"
  67. end
  68. redirect_to :back
  69. end
  70. def show
  71. params[:q] ||= {}
  72. @family_member = FamilyMember.find(params[:id])
  73. @customer = gateway.customer.find(@family_member.customer_id_bt)
  74. @patient = @family_member.patient
  75. @exams = current_organisation.examinations.where(joint_resource_id: @family_member.try(:joint_resource).try(:id)).order('updated_at DESC')
  76. @search = current_organisation.orders.where(joint_resource_id: @family_member.try(:joint_resource).try(:id)).order('order_date DESC').ransack(params[:q])
  77. @orders = @search.result.includes(:doctor).paginate(:page => params[:customer_orders_page], :per_page => 10)
  78. @appointments = current_organisation.try(:bookings).try(:with_deleted).where(joint_resource_id: @family_member.try(:joint_resource).try(:id)).order('start_time DESC')
  79. set_title
  80. render template: '/patient/family_members/show'
  81. end
  82. def reports
  83. if params[:reports_referral_page].present?
  84. if @family_member.present?
  85. @referrals = @family_member.referrals.paginate(:page => params[:reports_referral_page], :per_page => 4)
  86. else
  87. @referrals = @patient.referrals.paginate(:page => params[:reports_referral_page], :per_page => 4)
  88. end
  89. render partial: "/patient/dashboards/dashboard_tabs/referral_report"
  90. elsif params[:reports_exams_page].present?
  91. if @family_member.present?
  92. @exams = current_organisation.examinations.where(joint_resource_id: @family_member.joint_resource.id).paginate(:page => params[:reports_exams_page], :per_page => 4)
  93. else
  94. @exams = current_organisation.examinations.where(joint_resource_id: @patient.joint_resource.id).paginate(:page => params[:reports_exams_page], :per_page => 4)
  95. end
  96. render partial: "/patient/dashboards/dashboard_tabs/prescription_report"
  97. elsif params[:reports_orders_page].present?
  98. if @family_member.present?
  99. @orders = Order.joins(:joint_resource).where("joint_resources.family_member_id =?",@family_member.id).paginate(:page => params[:reports_orders_page], :per_page => 4)
  100. else
  101. @orders = @patient.all_orders_reports.paginate(:page => params[:reports_orders_page], :per_page => 4)
  102. end
  103. render partial: "/patient/dashboards/dashboard_tabs/invoice_report"
  104. else
  105. if @family_member.present?
  106. @referrals = @family_member.referrals.paginate(:page => params[:reports_referral_page], :per_page => 4)
  107. @exams = @family_member.all_prescriptions.paginate(:page => params[:reports_exams_page], :per_page => 4)
  108. @orders = Order.joins(:joint_resource).where("joint_resources.family_member_id =? ",@family_member.id).paginate(:page => params[:reports_orders_page], :per_page => 4)
  109. @med_rx = 0
  110. @family_member.examinations.each do |p|
  111. @med_rx = @med_rx + p.medical_rxes.count
  112. end
  113. else
  114. @referrals = @patient.referrals.paginate(:page => params[:reports_referral_page], :per_page => 4)
  115. @exams = @patient.all_prescriptions.paginate(:page => params[:reports_exams_page], :per_page => 4)
  116. @orders = current_organisation.orders.where("joint_resource_id =? ",@patient.joint_resource.id).paginate(:page => params[:reports_orders_page], :per_page => 4)
  117. @med_rx = 0
  118. @patient.examinations.each do |p|
  119. @med_rx = @med_rx + p.medical_rxes.count
  120. end
  121. end
  122. render partial: "/patient/dashboards/dashboard_tabs/report"
  123. end
  124. end
  125. def upload_file
  126. if params[:family_member].present?
  127. @family_member = FamilyMember.find(params[:id])
  128. if params[:attached_file] != "undefined"
  129. begin
  130. @doc = @family_member.documents.new
  131. @doc.docs = params[:attached_file]
  132. @doc.type_of_file = "file"
  133. @doc.save!
  134. render :json => {status: 'Success', msg: "Uploaded successfuly.", img_url: @doc.docs.url(:thumb) ,doc_id: @doc.id , doc_name: @doc.docs_file_name.truncate(20)}.to_json
  135. rescue Exception => e
  136. render :json => {status: 'Error', msg: e.message}.to_json
  137. end
  138. else
  139. render :json => {status: 'Error', msg: "Please select a file"}.to_json
  140. end
  141. else
  142. @patient=Patient.find(params[:id])
  143. if params[:patient].present? && params[:attached_file].present?
  144. if params[:attached_file] != "undefined"
  145. begin
  146. @doc = @patient.documents.new
  147. @doc.docs = params[:attached_file]
  148. @doc.type_of_file = "file"
  149. @doc.save!
  150. render :json => {status: 'Success', msg: "Uploaded successfuly.", img_url: @doc.docs.url(:thumb) ,doc_id: @doc.id , doc_name: @doc.docs_file_name.truncate(20)}.to_json
  151. rescue Exception => e
  152. render :json => {status: 'Error', msg: e.message}.to_json
  153. end
  154. else
  155. render :json => {status: 'Error', msg: "Please select a file"}.to_json
  156. end
  157. end
  158. end
  159. end
  160. def download_file
  161. doc = Document.find(params[:doc_id])
  162. file_name = doc.docs_file_name
  163. file_type = doc.docs_content_type
  164. file_path = doc.docs.path
  165. send_file(
  166. file_path,
  167. filename: file_name,
  168. type: file_type,
  169. disposition: 'attachment'
  170. )
  171. end
  172. def delete_file
  173. doc = Document.find(params[:doc_id])
  174. doc.destroy!
  175. render :json => {status: 'Success', msg: "Deleted successfuly."}.to_json
  176. end
  177. def destroy
  178. begin
  179. @family_member = FamilyMember.find(params[:id])
  180. if @family_member.present?
  181. @family_member.destroy!
  182. end
  183. flash[:status]="Success"
  184. flash[:notice] = "Record deleted Successfully"
  185. rescue Exception=> e
  186. flash[:notice] = "Something went wrong due to #{e.message}"
  187. flash[:status]="Error"
  188. end
  189. respond_to do |format|
  190. format.html {redirect_to :root}
  191. format.json { render :json => {status: flash[:status], msg: flash[:notice]}.to_json }
  192. end
  193. end
  194. private
  195. def set_patient
  196. if params[:patient_id].present?
  197. @patient=Patient.find(params[:patient_id])
  198. elsif params[:family_member_id].present?
  199. @family_member = FamilyMember.find(params[:family_member_id])
  200. end
  201. @patient = @patient || current_patient
  202. end
  203. def gateway
  204. env = ENV['BRAINTREE_ENVIRONMENT']
  205. @gateway ||= Braintree::Gateway.new(
  206. :environment => env && env.to_sym,
  207. :merchant_id => current_organisation.org_braintree_merchant_id,
  208. :public_key => current_organisation.org_braintree_public_key,
  209. :private_key => current_organisation.org_braintree_private_key,
  210. )
  211. end
  212. def set_title
  213. if @family_member.try(:birthday).present?
  214. title = @family_member.try(:name).to_s + ' ' + @family_member.birthday.to_s
  215. elsif current_doctor.store.description.present?
  216. title = @family_member.try(:name) + ' ' + current_doctor.try(:store).try(:description)
  217. else
  218. title = @family_member.try(:name)
  219. end
  220. set_meta_tags title: title
  221. end
  222. end
  223. end