OSDN Git Service

fix: racer
[pettanr/pettanr.git] / app / models / demander_status.rb
1 class DemanderStatus < ActiveRecord::Base
2   has_one :demander
3   
4 #  validates :token
5   validates :receive_hour1, :numericality => {:allow_blank => true}
6   validates :receive_hour2, :numericality => {:allow_blank => true}
7   
8   def supply_default
9   end
10   
11   def overwrite
12   end
13   
14   def own? ad
15     return false unless ad
16     ad.is_a?(Admin)
17   end
18   
19   def visible? ad
20     return false unless ad
21     ad.is_a?(Admin)
22   end
23   
24   def status
25     return 0 if self.requested_at.blank?
26     return 1 if self.requested_at and self.rejected_at
27     return 3 if self.requested_at and self.approved_at
28     return 2 if self.requested_at and self.rejected_at.blank? and self.approved_at.blank?
29     nil
30   end
31   
32   def self.default_page_size
33     25
34   end
35   
36   def self.max_page_size
37     100
38   end
39   
40   def self.default_panel_size
41     30
42   end
43   
44   def self.max_panel_size
45     200
46   end
47   
48   def self.page prm = nil
49     page = prm.to_i
50     page = 1 if page < 1
51     page
52   end
53   
54   def self.page_size prm = self.default_page_size
55     page_size = prm.to_i
56     page_size = self.max_page_size if page_size > self.max_page_size
57     page_size = self.default_page_size if page_size < 1
58     page_size
59   end
60   
61   def self.list page = 1, page_size = self.default_page_size
62     opt = {}
63     opt.merge!(DemanderStatus.list_opt)
64     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
65     opt.merge!({:order => 'demanders.name'})
66     DemanderStatus.find(:all, opt)
67   end
68   
69   def self.requested_list page = 1, page_size = self.default_page_size
70     opt = {}
71     opt.merge!(DemanderStatus.list_opt)
72     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
73     opt.merge!({:conditions => 'demander_statuses.requested_at is not null and demander_statuses.approved_at is null and demander_statuses.rejected_at is null', :order => 'demanders.name'})
74     DemanderStatus.find(:all, opt)
75   end
76   
77   def self.list_opt
78     {:include => {:demander => {}} }
79   end
80   
81   def self.list_json_opt
82     {:include => {:demander => {}} }
83   end
84   
85   def self.show pid, ad
86     opt = {}
87     opt.merge!(DemanderStatus.show_opt)
88     res = DemanderStatus.find(pid, opt)
89     raise ActiveRecord::Forbidden unless res.visible?(ad)
90     res
91   end
92   
93   def self.edit pid, ad
94     opt = {}
95     opt.merge!(DemanderStatus.show_opt)
96     res = DemanderStatus.find(pid, opt)
97     raise ActiveRecord::Forbidden unless res.own?(ad)
98     res
99   end
100   
101   def self.show_opt
102     {:include => {:demander => {}} }
103   end
104   
105   def self.show_json_opt
106     {:include => {:demander => {}} }
107   end
108   
109   def request
110     return false if self.status == 2 or self.status == 3
111     self.requested_at = Time.now
112     self.rejected_at = nil
113     self.approved_at = nil
114     self.save
115   end
116   
117   def reject
118     return false if self.status == 0 or self.status == 1
119     r = false
120     DemanderStatus.transaction do
121       self.rejected_at = Time.now
122       self.approved_at = nil
123       r = self.demander.demand_user.delete_token
124       raise ActiveRecord::Rollback unless r
125       r = self.save
126     end
127     r
128   end
129   
130   def approve h1, h2
131     return false if self.status == 0 or self.status == 3
132     r = false
133     DemanderStatus.transaction do
134       self.rejected_at = nil
135       self.approved_at = Time.now
136       self.receive_hour1 = h1
137       self.receive_hour2 = h2
138       r = self.demander.demand_user.create_token
139       raise ActiveRecord::Rollback unless r
140       r = self.save
141     end
142     r
143   end
144   
145   def stop
146     r = false
147     DemanderStatus.transaction do
148       self.requested_at = nil
149       self.rejected_at = nil
150       self.approved_at = nil
151       self.receive_hour1 = nil
152       self.receive_hour2 = nil
153       r = self.demander.demand_user.delete_token
154       raise ActiveRecord::Rollback unless r
155       r = self.save
156     end
157     r
158   end
159   
160 end