Commit e66821bd403bdc86d8605687835407d25b183575

Authored by Marcos Pereira
1 parent 82f42c57

Improve import_sisp task

- Acronym is not mandatory for institution anymore

Signed-off-by: Arthur Del Esposte<arthurmde@gmail.com>
Signed-off-by: Marcos Ronaldo <marcos.rpj2@gmail.com>
src/noosfero-spb/gov_user/lib/public_institution.rb
... ... @@ -2,9 +2,6 @@ class PublicInstitution &lt; Institution
2 2 validates :governmental_power, :governmental_sphere, :juridical_nature,
3 3 :presence=>true
4 4  
5   - validates :acronym, :allow_blank => true, :allow_nil => true,
6   - :uniqueness=>true
7   -
8 5 validates_format_of(
9 6 :cnpj,
10 7 :with => /^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$/,
... ...
src/noosfero-spb/software_communities/lib/tasks/import_sisp_software.rake
... ... @@ -15,12 +15,14 @@ namespace :software do
15 15 end
16 16  
17 17 desc "Import sisp software from yml"
18   - task :import_sisp_from_yml => :environment do
19   - $imported_data = YAML.load_file('script/sisp-catalogo.yml')
20   - $env = Environment.default
  18 + task :import_sisp => :environment do
  19 +
  20 + $imported_data = YAML.load_file('script/sisp-catalogo.yml') #TODO change yml folder
  21 + $env = Environment.default #TODO change this to correct environment
21 22  
22 23 $software_category = Category.find_by_name("Software")
23 24 $software_category ||= Category.create(:name => "Software", :environment => $env)
  25 +
24 26 $sisp_user = create_sisp_user
25 27  
26 28 $created_software={}
... ... @@ -30,6 +32,7 @@ namespace :software do
30 32  
31 33 sisp = $imported_data[key]['software_info']
32 34  
  35 + next if sisp['3 - Identificação do software']['Nome'].size <= 2
33 36 sw = create_software_and_attrs sisp
34 37  
35 38 sw.sisp_url = $imported_data[key]['url']
... ... @@ -39,8 +42,8 @@ namespace :software do
39 42 set_sisp_hashes sw, sisp
40 43  
41 44 if sw.valid? && sw.community.valid?
42   - sw.community.save
43   - sw.save
  45 + sw.community.save!
  46 + sw.save!
44 47 print '.'
45 48 else
46 49 puts sw.errors.full_messages
... ... @@ -49,21 +52,28 @@ namespace :software do
49 52 end
50 53  
51 54 puts "\n Done"
  55 + return
52 56 end
53 57 end
54 58  
55 59 def create_community name
56   - community = Community.new
57   - community.name = name
  60 +
58 61 identifier = create_identifier name
59 62  
60 63 $created_software[identifier]= $created_software[identifier].nil? ? 0 : $created_software[identifier]+1
  64 +
  65 + name = name + " copy#{$created_software[identifier]}" if ($created_software[identifier] != 0)
61 66 identifier = (identifier + "-copy#{$created_software[identifier]}") if ($created_software[identifier] != 0)
62 67  
63   - #TODO remove
64   - p "created new: #{identifier}"
  68 + community = Community.find_or_initialize_by_name(name)
65 69  
66 70 community.identifier = identifier
  71 +
  72 + #p "achei? #{!community.id.nil?}"
  73 + #p "nome: #{name}"
  74 + #p "iden: #{identifier}"
  75 + #p " "
  76 + community.save!
67 77 community
68 78 end
69 79  
... ... @@ -73,8 +83,7 @@ def create_software_info name, finality = &quot;blank&quot;, acronym = &quot;&quot;
73 83 software_info.community = community
74 84 software_info.finality = finality
75 85 software_info.acronym = acronym
76   - software_info.public_software = true
77   -
  86 + software_info.save!
78 87 software_info
79 88 end
80 89  
... ... @@ -103,38 +112,45 @@ def set_sisp_hashes software, sisp_hash
103 112 end
104 113  
105 114 def create_identifier name
106   - "#{name.to_slug}".truncate(150, :omission => '', :separator => '-')
  115 + "#{name.to_slug}".truncate(240, :omission => '', :separator => '-')
107 116 end
108 117  
109 118 def create_sisp_user #TODO change user info
110 119 user = User.find_by_login('sisp')
111 120 user ||= User.new(:login => 'sisp', :email => 'sisp_user@changeme.com', :password => 'sisp1234', :password_confirmation => 'sisp1234', :environment => $env)
  121 + user.save!
112 122 user.activate if !user.activated?
113 123 user
114 124 end
115 125  
116 126 def create_institution sisp_hash
117 127  
118   - #TODO create_institution if doesnt exist
119   -
120 128 name = sisp_hash['1 - Identificação do órgão']['Nome da Empresa/Órgão']
121   - institution_community = Community::new
  129 +
  130 + if name.size <=2
  131 + return nil
  132 + end
  133 +
  134 + institution_community = Community.find_or_initialize_by_identifier(name.to_slug)
  135 +
  136 + #puts institution_community.inspect
  137 + institution = PublicInstitution.find_or_initialize_by_name(name)
122 138 institution_community.name = name
123   - institution_community.country = "Brasil"
124   - institution_community.state = "Unknown" #TODO see what to put here
125   - institution_community.city = "Unknown" #TODO see what to put here
126   - institution_community.save
  139 + institution_community.country = "BR"
  140 + institution_community.state = "DF"
  141 + institution_community.city = "Unknown"
  142 + institution_community.save!
127 143  
128   - institution = PublicInstitution.new
129 144 institution.community = institution_community
130 145 institution.name = name
131   - institution.juridical_nature = sisp_hash['1 - Identificação do órgão']['Natureza']
132   - institution.acronym = sisp_hash['1 - Identificação do órgão']['Sigla'] #TODO empty if bigger than 10
133   - institution.governmental_power = sisp_hash['1 - Identificação do órgão']['Abrangência']
134   - institution.governmental_sphere = sisp_hash['1 - Identificação do órgão']['Esfera']
135   - institution.cnpj = "Unknown" #TODO see what to put here
136   - institution.corporate_name = name #TODO see what to put here
137   - institution.save
  146 + institution.juridical_nature = JuridicalNature.find_or_create_by_name(:name => sisp_hash['1 - Identificação do órgão']['Natureza'])
  147 + institution.acronym = sisp_hash['1 - Identificação do órgão']['Sigla'].split[0]
  148 + institution.acronym = nil if (institution.acronym.size > 10)
  149 + institution.governmental_power = GovernmentalPower.find_or_create_by_name(:name => sisp_hash['1 - Identificação do órgão']['Esfera'])
  150 + institution.governmental_sphere = GovernmentalSphere.find_or_create_by_name(:name => sisp_hash['1 - Identificação do órgão']['Abrangência'])
  151 + institution.cnpj = nil
  152 + institution.corporate_name = name
  153 + institution.save!
138 154 institution
139 155  
140 156 end
... ... @@ -142,14 +158,21 @@ end
142 158 def create_ratings community_identifier, sisp_hash
143 159 software_community = Community.find_by_identifier(community_identifier)
144 160  
145   - comment_system = Comment.create!(:body=>"Informações de custo de sistema importadas automaticamente do catálogo SISP.", :target => software_community, :author=> $sisp_user)
146   - comment_maintenance = Comment.create!(:body=>"Informações de custo de manutenção importadas automaticamente do catálogo SISP.", :target => software_community, :author=> $sisp_user)
147   -
148 161 institution = create_institution(sisp_hash)
  162 + if institution.nil?
  163 + return nil
  164 + end
  165 +
  166 + comment_system = Comment.new(:body=>"Informações de custo de sistema importadas automaticamente do catálogo SISP.", :author=> $sisp_user.person)
  167 + comment_system.source = software_community
  168 + comment_system.save!
  169 +comment_maintenance = Comment.new(:body=>"Informações de custo de manutenção importadas automaticamente do catálogo SISP.", :author=> $sisp_user.person)
  170 + comment_maintenance.source = software_community
  171 + comment_maintenance.save!
149 172  
150   - system_rating = OrganizationRating.create!(
  173 + OrganizationRating.create!(
151 174 :comment => comment_system,
152   - :value => 3,
  175 + :value => 1, #TODO see what to put here
153 176 :person => $sisp_user.person,
154 177 :organization => software_community,
155 178 :institution => institution,
... ... @@ -157,9 +180,9 @@ def create_ratings community_identifier, sisp_hash
157 180 :people_benefited => 0
158 181 )
159 182  
160   - maintenance_rating = OrganizationRating.create!(
  183 + OrganizationRating.create!(
161 184 :comment => comment_maintenance,
162   - :value => 3,
  185 + :value => 1, #TODO see what to put here
163 186 :person => $sisp_user.person,
164 187 :organization => software_community,
165 188 :institution => institution,
... ... @@ -171,11 +194,9 @@ end
171 194  
172 195 def create_software_and_attrs sisp_hash
173 196 name = sisp_hash['3 - Identificação do software']['Nome'].truncate(240, :omission => '', :separator => ' ')
  197 +
174 198 identifier = create_identifier name
175 199  
176   - #software = Community.find_by_identifier(identifier)
177   - #software = software.software_info if software
178   - #software ||= create_software_info(name)
179 200 software = create_software_info(name)
180 201  
181 202 create_ratings identifier, sisp_hash
... ...