OSDN Git Service

fix: fetch fail
[pettanr/pettanr.git] / app / models / demander.rb
1 class Demander < ActiveRecord::Base
2   belongs_to :demand_user
3   belongs_to :demander_status
4   
5   validates :demand_user_id, :presence => true, :numericality => true, :existence => {:both => false}
6   validates :name, :presence => true, :length => {:maximum => 50}, :uniqueness => true
7   validates :caption, :presence => true, :length => {:maximum => 30}
8   validates :url, :presence => true, :length => {:maximum => 200}, :url => {:message => I18n.t('errors.messages.url')}
9   validates :description, :presence => true
10   validates :demander_url, :presence => true, :length => {:maximum => 200}, :url => {:message => I18n.t('errors.messages.url')}
11   validates :demander_status_id, :presence => true, :numericality => true, :existence => {:both => false}
12   
13   def supply_default
14   end
15   
16   def overwrite du
17     self.demand_user_id = du.id
18   end
19   
20   def own? du
21     return false unless du.is_a?(DemandUser)
22     du.id == self.demand_user_id
23   end
24   
25   def visible? du
26     return false unless du.is_a?(DemandUser)
27     du.id == self.demand_user_id
28   end
29   
30   def status
31     self.demander_status.status
32   end
33   
34   def self.default_page_size
35     25
36   end
37   
38   def self.max_page_size
39     100
40   end
41   
42   def self.default_panel_size
43     30
44   end
45   
46   def self.page prm = nil
47     page = prm.to_i
48     page = 1 if page < 1
49     page
50   end
51   
52   def self.page_size prm = self.default_page_size
53     page_size = prm.to_i
54     page_size = self.max_page_size if page_size > self.max_page_size
55     page_size = self.default_page_size if page_size < 1
56     page_size
57   end
58   
59   def self.list page = 1, page_size = self.default_page_size
60     opt = {}
61     opt.merge!(Demander.list_opt)
62     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
63     opt.merge!({:order => 'demanders.name'})
64     Demander.find(:all, opt)
65   end
66   
67   def self.list_opt
68     {:include => {:demander_status => {}} }
69   end
70   
71   def self.list_json_opt
72     {:include => {:demander_status => {}} }
73   end
74   
75   def self.show pid, du
76     opt = {}
77     opt.merge!(Demander.show_opt)
78     res = Demander.find(pid, opt)
79     raise ActiveRecord::Forbidden unless res.visible?(du)
80     res
81   end
82   
83   def self.edit pid, du
84     opt = {}
85     opt.merge!(Demander.show_opt)
86     res = Demander.find(pid, opt)
87     raise ActiveRecord::Forbidden unless res.own?(du)
88     res
89   end
90   
91   def self.show_opt
92     {:include => {:demander_status => {}} }
93   end
94   
95   def self.show_json_opt
96     {:include => {:demander_status => {}} }
97   end
98   
99   def store
100     r = false
101     Demander.transaction do
102       if self.new_record?
103         ds = DemanderStatus.new
104         ds.supply_default
105         if ds.save
106           self.demander_status_id = ds.id
107         else
108           self.demander_status_id = nil
109        end
110       end
111       r = self.save
112       raise ActiveRecord::Rollback unless r
113     end
114     r
115   end
116   
117   def stop
118     self.demander_status.stop
119   end
120   
121   def licenses_export date = nil
122     raise ActiveRecord::Forbidden unless self.status == 3
123     License.export date
124   end
125   
126   def artists_export date = nil
127     raise ActiveRecord::Forbidden unless self.status == 3
128     Artist.export date
129   end
130   
131   def original_pictures_export date = nil
132     raise ActiveRecord::Forbidden unless self.status == 3
133     OriginalPicture.export date
134   end
135   
136   def pictures_export date = nil
137     raise ActiveRecord::Forbidden unless self.status == 3
138     Picture.export date
139   end
140   
141   def export date
142     raise ActiveRecord::Forbidden unless self.status == 3
143     {
144       :licenses => self.licenses_export(date), 
145       :artists => self.artists_export(date), 
146       :original_pictures => self.original_pictures_export(date), 
147       :pictures => self.pictures_export(date)
148     }
149   end
150   
151 end