| @@ -0,0 +1,138 @@ | |||||
| #coding=utf-8 | |||||
| class ClaimsController < ApplicationController | |||||
| # skip_before_action :verify_authenticity_token | |||||
| protect_from_forgery with: :null_session | |||||
| before_action :require_login, except: [:index] | |||||
| before_action :set_issue | |||||
| def index | |||||
| @user_claimed = 0 | |||||
| @claims = @issue.claims.claim_includes.order("created_at desc") | |||||
| @claims.each do |claim| | |||||
| if claim.user_id == current_user.id | |||||
| @user_claimed = 1 | |||||
| break | |||||
| end | |||||
| end | |||||
| render file: 'app/views/claims/list.json.jbuilder' | |||||
| end | |||||
| def create | |||||
| @claim = Claim.find_by_sql(["select id from claims where issue_id=? and user_id=?",params[:issue_id], current_user.id]) | |||||
| if @claim.present? | |||||
| return normal_status(-1,"您已经声明过该易修") | |||||
| end | |||||
| ActiveRecord::Base.transaction do | |||||
| @claim = Claim.new(parse_issue_params(params)) | |||||
| if @claim.save | |||||
| @claims = @issue.claims.claim_includes.order("created_at desc") | |||||
| @user_claimed = 1 | |||||
| journal_params = { | |||||
| journalized_id: params[:issue_id], | |||||
| journalized_type: "Issue", | |||||
| user_id: current_user.id , | |||||
| notes: "新建声明: #{params[:claim_note]}", | |||||
| } | |||||
| journal = Journal.new(journal_params) | |||||
| if journal.save | |||||
| render file: 'app/views/claims/list.json.jbuilder' | |||||
| else | |||||
| normal_status(-1,"新建声明关联评论操作失败") | |||||
| end | |||||
| else | |||||
| normal_status(-1,"新建声明操作失败") | |||||
| end | |||||
| end | |||||
| end | |||||
| def update | |||||
| @claim = Claim.find_by_id(params[:claim_id]) | |||||
| if @claim.blank? | |||||
| return normal_status(-1,"易修不存在") | |||||
| end | |||||
| if @claim.user_id != current_user.id | |||||
| return normal_status(-1,"你不能更新别人的声明") | |||||
| end | |||||
| ActiveRecord::Base.transaction do | |||||
| if @claim.update_attribute(:note,params[:claim_note]) | |||||
| @claims = @issue.claims.claim_includes.order("created_at desc") | |||||
| @user_claimed = 1 | |||||
| journal_params = { | |||||
| journalized_id: params[:issue_id], | |||||
| journalized_type: "Issue", | |||||
| user_id: current_user.id , | |||||
| notes: "更新声明: #{params[:claim_note]}", | |||||
| } | |||||
| journal = Journal.new(journal_params) | |||||
| if journal.save | |||||
| render file: 'app/views/claims/list.json.jbuilder' | |||||
| else | |||||
| normal_status(-1,"新建声明关联评论操作失败") | |||||
| end | |||||
| else | |||||
| normal_status(-1,"声明更新操作失败") | |||||
| end | |||||
| end | |||||
| end | |||||
| def destroy | |||||
| @claim = Claim.find_by_sql(["select id from claims where issue_id=? and user_id=?",params[:issue_id], current_user.id]) | |||||
| if @claim.blank? | |||||
| normal_status(-1,"您未曾声明过该易修") | |||||
| else | |||||
| @claim = @claim[0] | |||||
| # 判断current user是否是claimer | |||||
| ActiveRecord::Base.transaction do | |||||
| if @claim.destroy | |||||
| @claims = @issue.claims.claim_includes.order("created_at desc") | |||||
| @user_claimed = 0 | |||||
| journal_params = { | |||||
| journalized_id: params[:issue_id], | |||||
| journalized_type: "Issue", | |||||
| user_id: current_user.id , | |||||
| notes: "取消声明", | |||||
| } | |||||
| journal = Journal.new(journal_params) | |||||
| if journal.save | |||||
| render file: 'app/views/claims/list.json.jbuilder' | |||||
| else | |||||
| normal_status(-1,"新建声明关联评论操作失败") | |||||
| end | |||||
| else | |||||
| normal_status(-1,"取消声明操作失败") | |||||
| end | |||||
| end | |||||
| end | |||||
| end | |||||
| private | |||||
| def parse_issue_params(params) | |||||
| { | |||||
| issue_id: params[:issue_id], | |||||
| user_id: current_user.id, | |||||
| note: params[:claim_note], | |||||
| } | |||||
| end | |||||
| def set_issue | |||||
| @issue = Issue.find_by_id(params[:issue_id]) | |||||
| unless @issue.present? | |||||
| normal_status(-1, "易修不存在") | |||||
| end | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,21 @@ | |||||
| # == Schema Information | |||||
| # | |||||
| # Table name: claims | |||||
| # | |||||
| # id :integer not null, primary key | |||||
| # issue_id :integer | |||||
| # user_id :integer | |||||
| # created_at :datetime not null | |||||
| # updated_at :datetime not null | |||||
| # note :text(65535) | |||||
| # | |||||
| # Indexes | |||||
| # | |||||
| # index_claims_on_issue_id (issue_id) | |||||
| # index_claims_on_user_id (user_id) | |||||
| # | |||||
| class Claim < ApplicationRecord | |||||
| belongs_to :user, foreign_key: :user_id | |||||
| scope :claim_includes, ->{includes(:user)} | |||||
| end | |||||
| @@ -64,6 +64,7 @@ class Issue < ApplicationRecord | |||||
| # has_many :memos | # has_many :memos | ||||
| has_many :journals, :as => :journalized, :dependent => :destroy | has_many :journals, :as => :journalized, :dependent => :destroy | ||||
| has_many :journal_details, through: :journals | has_many :journal_details, through: :journals | ||||
| has_many :claims, :dependent => :destroy | |||||
| has_many :issue_tags_relates, dependent: :destroy | has_many :issue_tags_relates, dependent: :destroy | ||||
| has_many :issue_tags, through: :issue_tags_relates | has_many :issue_tags, through: :issue_tags_relates | ||||
| has_many :issue_times, dependent: :destroy | has_many :issue_times, dependent: :destroy | ||||
| @@ -0,0 +1,7 @@ | |||||
| json.user_name claimer.user.try(:show_real_name) | |||||
| json.user_login claimer.user.try(:login) | |||||
| json.user_picture url_to_avatar(claimer.user) | |||||
| json.created_at time_from_now(claimer.created_at) | |||||
| json.note_body claimer.note | |||||
| json.claim_id claimer.id | |||||
| json.visible false | |||||
| @@ -0,0 +1,7 @@ | |||||
| json.partial! "commons/success" | |||||
| json.currentUserclaimed @user_claimed | |||||
| json.claimers do | |||||
| json.array! @claims do |claimer| | |||||
| json.partial! "claims/claim_item", claimer: claimer | |||||
| end | |||||
| end | |||||
| @@ -9,6 +9,7 @@ Rails.application.routes.draw do | |||||
| # Serve websocket cable requests in-process | # Serve websocket cable requests in-process | ||||
| mount ActionCable.server => '/cable' | mount ActionCable.server => '/cable' | ||||
| get 'attachments/entries/get_file', to: 'attachments#get_file' | get 'attachments/entries/get_file', to: 'attachments#get_file' | ||||
| get 'attachments/download/:id', to: 'attachments#show' | get 'attachments/download/:id', to: 'attachments#show' | ||||
| get 'attachments/download/:id/:filename', to: 'attachments#show' | get 'attachments/download/:id/:filename', to: 'attachments#show' | ||||
| @@ -145,6 +146,16 @@ Rails.application.routes.draw do | |||||
| get :get_children_journals | get :get_children_journals | ||||
| end | end | ||||
| end | end | ||||
| resources :claims, only: [:index] do | |||||
| collection do | |||||
| post :create | |||||
| delete :destroy | |||||
| get :index | |||||
| put :update | |||||
| end | |||||
| end | |||||
| resources :issue_times, only: [:create] do | resources :issue_times, only: [:create] do | ||||
| collection do | collection do | ||||
| post :end_work | post :end_work | ||||
| @@ -0,0 +1,11 @@ | |||||
| ails db:migrateclass CreateClaims < ActiveRecord::Migration[5.2] | |||||
| def change | |||||
| create_table :claims do |t| | |||||
| t.integer :issue_id | |||||
| t.integer :user_id | |||||
| t.timestamps | |||||
| t.index :issue_id | |||||
| t.index :user_id | |||||
| end | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,5 @@ | |||||
| class AddNoteToClaim < ActiveRecord::Migration[5.2] | |||||
| def change | |||||
| add_column :claims, :note, :text | |||||
| end | |||||
| end | |||||