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
128 date = if self.received_at
135 date = Time.parse(ymd_str[0..3] + '/' + ymd_str[4..5] + '/' + ymd_str[6..7])
143 def export_url action, date
144 u = self.provider.export_url action
145 prm = '?auth_token=' + self.token
146 prm = prm + '&date=' + date.strftime("%Y%m%d") unless date.blank?
151 def export_from_provider url
154 json = RestClient.get url
155 res = JSON.parse json
161 def export_by action, ymd
163 url = export_url action, t
164 export_from_provider(url)
167 def licenses_import date
168 licenses = self.export_by('licenses_export', date)
170 ProviderLicense.import self.provider.id, licenses
172 LicenseImportResult.new nil
176 def artists_import date
177 artists = self.export_by('artists_export', date)
179 ProviderArtist.import self.provider.id, artists
181 ArtistImportResult.new nil
185 def original_pictures_import date
186 original_pictures = self.export_by('original_pictures_export', date)
187 pictures = self.export_by('pictures_export', date)
188 if original_pictures and pictures
189 ProviderOriginalPicture.import self.provider.id, original_pictures, pictures
191 OriginalPictureImportResult.new nil
197 ProviderStatus.transaction do
198 import_result = self.licenses_import date
199 raise ActiveRecord::Rollback unless import_result.success?
200 import_result = self.artists_import date
201 raise ActiveRecord::Rollback unless import_result.success?
202 import_result = self.original_pictures_import date
203 raise ActiveRecord::Rollback unless import_result.success?
204 self.received_at = Time.now
210 def self.import_all date = nil
212 ProviderStatus.approve_list.each do |provider_status|
213 import_result = provider_status.import date
214 next if import_result.success?
215 failures[provider_status.provider.name] = import_result
217 failures.each do |name, import_result|