1 class ProviderStatus < ActiveRecord::Base
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
11 r.token = r.token.gsub(/\s/, '') if r.token
21 return false unless ad
26 return false unless ad
31 self.token.blank? ? 0 : 1
34 def self.default_page_size
38 def self.max_page_size
42 def self.default_panel_size
46 def self.max_panel_size
50 def self.page prm = nil
56 def self.page_size prm = self.default_page_size
58 page_size = self.max_page_size if page_size > self.max_page_size
59 page_size = self.default_page_size if page_size < 1
63 def self.list page = 1, page_size = self.default_page_size
65 opt.merge!(ProviderStatus.list_opt)
66 opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
67 opt.merge!({:order => 'providers.name'})
68 ProviderStatus.find(:all, opt)
71 def self.available_list page = 1, page_size = self.default_page_size
73 opt.merge!(ProviderStatus.list_opt)
74 opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
75 opt.merge!({:conditions => ['provider_statuses.token is null'], :order => 'providers.name'})
76 ProviderStatus.find(:all, opt)
80 {:include => {:provider => {}} }
83 def self.list_json_opt
84 {:include => {:provider => {}} }
89 opt.merge!(ProviderStatus.show_opt)
90 res = ProviderStatus.find(pid, opt)
91 raise ActiveRecord::Forbidden unless res.visible?(ad)
97 opt.merge!(ProviderStatus.show_opt)
98 res = ProviderStatus.find(pid, opt)
99 raise ActiveRecord::Forbidden unless res.own?(ad)
104 {:include => {:provider => {}} }
107 def self.show_json_opt
108 {:include => {:provider => {}} }
116 def ymd_to_time ymd_str
117 return nil if ymd_str.blank?
120 date = Time.parse(ymd_str[0..3] + '/' + ymd_str[4..5] + '/' + ymd_str[6..7])
127 def export_url action, date
128 u = self.provider.export_url action
129 prm = '?auth_token=' + self.token
130 prm = prm + '&date=' + date.strftime("%Y%m%d") unless date.blank?
135 def export_from_provider url
138 json = RestClient.get url
139 res = JSON.parse json
145 def export_by action, ymd
147 url = export_url action, t
148 export_from_provider(url)
151 def licenses_import date
152 licenses = self.export_by('licenses_export', date)
153 return nil unless licenses
154 ProviderLicense.import self.provider.id, licenses
157 def artists_import date
158 artists = self.export_by('artists_export', date)
159 return nil unless artists
160 ProviderArtist.import self.provider.id, artists
163 def original_pictures_import date
164 original_pictures = self.export_by('original_pictures_export', date)
165 return nil unless original_pictures
166 pictures = self.export_by('pictures_export', date)
167 return nil unless pictures
168 ProviderOriginalPicture.import self.provider.id, original_pictures, pictures
172 exports = export_by('export', @provider_status, params[:date])
173 return nil unless exports
174 ProviderStatus.import @provider_status.provider.id, exports
177 def self.import pid, exports
179 ProviderStatus.transaction do
180 res[:licenses] = ProviderLicense.import pid, exports['licenses']
181 raise ActiveRecord::Rollback if res[:licenses].any?
182 res[:artists] = ProviderArtist.import pid, exports['artists']
183 raise ActiveRecord::Rollback if res[:artists].any?
184 res[:original_pictures] = ProviderOriginalPicture.import pid, exports['original_pictures'], exports['pictures']
185 raise ActiveRecord::Rollback if res[:original_pictures][:original_pictures].any? or res[:original_pictures][:resource_pictures].any? or res[:original_pictures][:pictures].any?