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
12 r.token = nil if r.token.blank?
22 return false unless ad
27 return false unless ad
32 self.token.blank? ? 0 : 1
35 def self.default_page_size
39 def self.max_page_size
43 def self.default_panel_size
47 def self.max_panel_size
51 def self.page prm = nil
57 def self.page_size prm = self.default_page_size
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
64 def self.list page = 1, page_size = self.default_page_size
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)
72 def self.available_list page = 1, page_size = self.default_page_size
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)
80 def self.approve_list page = 1, page_size = self.default_page_size
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)
89 {:include => {:provider => {}} }
92 def self.list_json_opt
93 {:include => {:provider => {}} }
98 opt.merge!(ProviderStatus.show_opt)
99 res = ProviderStatus.find(pid, opt)
100 raise ActiveRecord::Forbidden unless res.visible?(ad)
104 def self.edit pid, ad
106 opt.merge!(ProviderStatus.show_opt)
107 res = ProviderStatus.find(pid, opt)
108 raise ActiveRecord::Forbidden unless res.own?(ad)
113 {:include => {:provider => {}} }
116 def self.show_json_opt
117 {:include => {:provider => {}} }
125 def ymd_to_time ymd_str
126 return nil if ymd_str.blank?
129 date = Time.parse(ymd_str[0..3] + '/' + ymd_str[4..5] + '/' + ymd_str[6..7])
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?
144 def export_from_provider url
147 json = RestClient.get url
148 res = JSON.parse json
154 def export_by action, ymd
156 url = export_url action, t
157 export_from_provider(url)
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
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
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
181 exports = export_by('export', @provider_status, params[:date])
182 return nil unless exports
183 ProviderStatus.import @provider_status.provider.id, exports
186 def self.import pid, exports
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?