OSDN Git Service

t#31079:approve_list added provider_status
[pettanr/pettanr.git] / app / models / provider_status.rb
1 class ProviderStatus < ActiveRecord::Base
2   has_one :provider
3   
4   validates :token, :format => {:with => /^[a-zA-Z0-9]+$/, :allow_blank => true}
5   validates :receive_hour1, :numericality => {:allow_blank => true}
6   validates :receive_hour2, :numericality => {:allow_blank => true}
7 #  validates :received_at
8 #  validates :stopped_at
9   
10   before_save do |r|
11     r.token = r.token.gsub(/\s/, '') if r.token
12     r.token = nil if r.token.blank?
13   end
14   
15   def supply_default
16   end
17   
18   def overwrite
19   end
20   
21   def own? ad
22     return false unless ad
23     ad.is_a?(Admin)
24   end
25   
26   def visible? ad
27     return false unless ad
28     ad.is_a?(Admin)
29   end
30   
31   def status
32     self.token.blank? ? 0 : 1
33   end
34   
35   def self.default_page_size
36     25
37   end
38   
39   def self.max_page_size
40     100
41   end
42   
43   def self.default_panel_size
44     30
45   end
46   
47   def self.max_panel_size
48     200
49   end
50   
51   def self.page prm = nil
52     page = prm.to_i
53     page = 1 if page < 1
54     page
55   end
56   
57   def self.page_size prm = self.default_page_size
58     page_size = prm.to_i
59     page_size = self.max_page_size if page_size > self.max_page_size
60     page_size = self.default_page_size if page_size < 1
61     page_size
62   end
63   
64   def self.list page = 1, page_size = self.default_page_size
65     opt = {}
66     opt.merge!(ProviderStatus.list_opt)
67     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
68     opt.merge!({:order => 'providers.name'})
69     ProviderStatus.find(:all, opt)
70   end
71   
72   def self.available_list page = 1, page_size = self.default_page_size
73     opt = {}
74     opt.merge!(ProviderStatus.list_opt)
75     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
76     opt.merge!({:conditions => ['provider_statuses.token is null'], :order => 'providers.name'})
77     ProviderStatus.find(:all, opt)
78   end
79   
80   def self.approve_list page = 1, page_size = self.default_page_size
81     opt = {}
82     opt.merge!(ProviderStatus.list_opt)
83     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
84     opt.merge!({:conditions => ['provider_statuses.token is not null'], :order => 'providers.name'})
85     ProviderStatus.find(:all, opt)
86   end
87   
88   def self.list_opt
89     {:include => {:provider => {}} }
90   end
91   
92   def self.list_json_opt
93     {:include => {:provider => {}} }
94   end
95   
96   def self.show pid, ad
97     opt = {}
98     opt.merge!(ProviderStatus.show_opt)
99     res = ProviderStatus.find(pid, opt)
100     raise ActiveRecord::Forbidden unless res.visible?(ad)
101     res
102   end
103   
104   def self.edit pid, ad
105     opt = {}
106     opt.merge!(ProviderStatus.show_opt)
107     res = ProviderStatus.find(pid, opt)
108     raise ActiveRecord::Forbidden unless res.own?(ad)
109     res
110   end
111   
112   def self.show_opt
113     {:include => {:provider => {}} }
114   end
115   
116   def self.show_json_opt
117     {:include => {:provider => {}} }
118   end
119   
120   def stop
121     self.token = nil
122     self.save
123   end
124   
125   def ymd_to_time ymd_str
126     return nil if ymd_str.blank?
127     date = nil
128     begin
129       date = Time.parse(ymd_str[0..3] + '/' + ymd_str[4..5] + '/' + ymd_str[6..7])
130     rescue
131       date = nil
132     end
133     date
134   end
135   
136   def export_url action, date
137     u = self.provider.export_url action
138     prm = '?auth_token=' + self.token
139     prm = prm + '&date=' + date.strftime("%Y%m%d") unless date.blank?
140     u = URI.join(u, prm)
141     u.to_s
142   end
143   
144   def export_from_provider url
145     res = nil
146     begin
147       json = RestClient.get url
148       res = JSON.parse json
149     rescue
150     end
151     res
152   end
153   
154   def export_by action, ymd
155     t = ymd_to_time ymd
156     url = export_url action, t
157     export_from_provider(url)
158   end
159   
160   def licenses_import date
161     licenses = self.export_by('licenses_export', date)
162     return nil unless licenses
163     ProviderLicense.import self.provider.id, licenses
164   end
165   
166   def artists_import date
167     artists = self.export_by('artists_export', date)
168     return nil unless artists
169     ProviderArtist.import self.provider.id, artists
170   end
171   
172   def original_pictures_import date
173     original_pictures = self.export_by('original_pictures_export', date)
174     return nil unless original_pictures
175     pictures = self.export_by('pictures_export', date)
176     return nil unless pictures
177     ProviderOriginalPicture.import self.provider.id, original_pictures, pictures
178   end
179   
180   def port
181     exports = export_by('export', @provider_status, params[:date])
182     return nil unless exports
183     ProviderStatus.import @provider_status.provider.id, exports
184   end
185   
186   def self.import pid, exports
187     res = {}
188     ProviderStatus.transaction do
189       res[:licenses] = ProviderLicense.import pid, exports['licenses']
190       raise ActiveRecord::Rollback if res[:licenses].any?
191       res[:artists] = ProviderArtist.import pid, exports['artists']
192       raise ActiveRecord::Rollback if res[:artists].any?
193       res[:original_pictures] = ProviderOriginalPicture.import pid, exports['original_pictures'], exports['pictures']
194       raise ActiveRecord::Rollback if res[:original_pictures][:original_pictures].any? or res[:original_pictures][:resource_pictures].any? or res[:original_pictures][:pictures].any?
195     end
196     res
197   end
198   
199 end