Commit 1f3009e072a03351de376d382a7e5ee67e130d58

Authored by Marcos Pereira
1 parent 19a6208c

import_sisp task almost done

import_sisp
... ... @@ -1,95 +0,0 @@
1   -#!/usr/bin/env ruby
2   -# encoding: UTF-8
3   -
4   -require_relative '../config/environment'
5   -include Noosfero::SampleDataHelper
6   -
7   -$imported_data = YAML.load_file('script/sisp-catalogo.yml')
8   -
9   -def create_community name
10   - community = Community.new
11   - community.name = name
12   - community.identifier = "sisp-#{name.to_slug}"
13   - community
14   -end
15   -
16   -def create_software_info name, finality = "blank", acronym = ""
17   - community = create_community(name)
18   - software_info = SoftwareInfo.new
19   - software_info.community = community
20   - software_info.finality = finality
21   - software_info.acronym = acronym
22   - software_info.public_software = true
23   -
24   - software_info
25   -end
26   -
27   -def set_software_category software, category_name
28   - category = Category.find_by_name(category_name)
29   - category ||= Category.create(:name => category_name, :parent => $software_category, :environment => $env)
30   - software.community.categories << category
31   -end
32   -
33   -def set_sisp_hashes software, sisp_hash
34   - software.sisp_type = sisp_hash['3 - Identificação do software']['Tipo de Software']
35   - software.agency_identification = sisp_hash['1 - Identificação do órgão']
36   - software.softawre_requirements = sisp_hash['10 - Requisitos de software']
37   - software.hardware_requirements = sisp_hash['11 - Requisitos de Hardware']
38   - software.documentation = sisp_hash['12 - Documentação']
39   - software.system_applications = sisp_hash['13 - Aplicações do sistema']
40   - software.active_versions = sisp_hash['15 - Versões em uso']
41   - software.estimated_cost = sisp_hash['16 - Custo Estimado']
42   - software.responsible = sisp_hash['2 - Identificação do responsável no órgão para contato posterior']
43   - software.responsible_for_acquirement = sisp_hash['4 - Responsáveis pelo Desenvolvimento/Aquisição']
44   - software.system_info = sisp_hash['5 - Sistema']
45   - software.development_info = sisp_hash['6 - Características do Desenvolvimento']
46   - software.maintenance = sisp_hash['7 - Manutenção do Sistema']
47   - software.standards_adherence = sisp_hash['8 - Aderência a padrões']
48   - software.plataform = sisp_hash['9 - Ambiente / Plataforma']
49   -end
50   -
51   -def create_software_attrs sisp_hash
52   - name = sisp_hash['3 - Identificação do software']['Nome']
53   - identifier = "sisp-#{name.to_slug}"
54   - software = Community.find_by_identifier(identifier)
55   - software = software.software_info if software
56   - software ||= create_software_info(name)
57   -
58   - set_software_category software, sisp_hash['3 - Identificação do software']['Subtipo']
59   - software.features = sisp_hash['5 - Sistema']['Principais funcionalidades']
60   - software.finality = sisp_hash['5 - Sistema']['Objetivos do sistema']
61   - software.objectives = sisp_hash['5 - Sistema']['Objetivos do sistema']
62   - software.acronym = sisp_hash['3 - Identificação do software']['Sigla'].split[0]
63   - software
64   -end
65   -
66   -$env = Environment.default
67   -
68   -$software_category = Category.find_by_name("Software")
69   -$software_category ||= Category.create(:name => "Software", :environment => $env)
70   -
71   -print 'Creating SISP Softwares: '
72   -$imported_data.keys.each do |key|
73   -
74   - sisp = $imported_data[key]['software_info']
75   -
76   - sw = create_software_attrs sisp
77   -
78   - sw.sisp_url = $imported_data[key]['url']
79   - sw.sisp = true
80   - sw.sisp_id = key.to_i
81   -
82   - set_sisp_hashes sw, sisp
83   -
84   - if sw.valid? && sw.community.valid?
85   - sw.community.save
86   - sw.save
87   - print '.'
88   - else
89   - p sw.errors.full_messages
90   - print 'F'
91   - end
92   -end
93   -
94   -puts "\n Done"
95   -
src/noosfero-spb/software_communities/lib/tasks/import_sisp_software.rake 0 → 100755
... ... @@ -0,0 +1,178 @@
  1 +# encoding: UTF-8
  2 +
  3 +namespace :software do
  4 + desc "Import sisp software from yml"
  5 + task :import_sisp_from_yml => :environment do
  6 + $imported_data = YAML.load_file('script/sisp-catalogo.yml')
  7 + $env = Environment.default
  8 +
  9 + $software_category = Category.find_by_name("Software")
  10 + $software_category ||= Category.create(:name => "Software", :environment => $env)
  11 + $sisp_user = create_sisp_user
  12 +
  13 + $created_software={}
  14 +
  15 + print 'Creating SISP Softwares: '
  16 + $imported_data.keys.each do |key|
  17 +
  18 + sisp = $imported_data[key]['software_info']
  19 +
  20 + sw = create_software_and_attrs sisp
  21 +
  22 + sw.sisp_url = $imported_data[key]['url']
  23 + sw.sisp = true
  24 + sw.sisp_id = key.to_i
  25 +
  26 + set_sisp_hashes sw, sisp
  27 +
  28 + if sw.valid? && sw.community.valid?
  29 + sw.community.save
  30 + sw.save
  31 + print '.'
  32 + else
  33 + puts sw.errors.full_messages
  34 + print 'F'
  35 + end
  36 + end
  37 +
  38 + puts "\n Done"
  39 + end
  40 +end
  41 +
  42 +def create_community name
  43 + community = Community.new
  44 + community.name = name
  45 + identifier = create_identifier name
  46 +
  47 + $created_software[identifier]= $created_software[identifier].nil? ? 0 : $created_software[identifier]+1
  48 + identifier = (identifier + "-copy#{$created_software[identifier]}") if ($created_software[identifier] != 0)
  49 +
  50 + #TODO remove
  51 + p "created new: #{identifier}"
  52 +
  53 + community.identifier = identifier
  54 + community
  55 +end
  56 +
  57 +def create_software_info name, finality = "blank", acronym = ""
  58 + community = create_community(name)
  59 + software_info = SoftwareInfo.new
  60 + software_info.community = community
  61 + software_info.finality = finality
  62 + software_info.acronym = acronym
  63 + software_info.public_software = true
  64 +
  65 + software_info
  66 +end
  67 +
  68 +def set_software_category software, category_name
  69 + category = Category.find_by_name(category_name)
  70 + category ||= Category.create(:name => category_name, :parent => $software_category, :environment => $env)
  71 + software.community.categories << category
  72 +end
  73 +
  74 +def set_sisp_hashes software, sisp_hash
  75 + software.sisp_type = sisp_hash['3 - Identificação do software']['Tipo de Software']
  76 + software.agency_identification = sisp_hash['1 - Identificação do órgão']
  77 + software.softawre_requirements = sisp_hash['10 - Requisitos de software']
  78 + software.hardware_requirements = sisp_hash['11 - Requisitos de Hardware']
  79 + software.documentation = sisp_hash['12 - Documentação']
  80 + software.system_applications = sisp_hash['13 - Aplicações do sistema']
  81 + software.active_versions = sisp_hash['15 - Versões em uso']
  82 + software.estimated_cost = sisp_hash['16 - Custo Estimado']
  83 + software.responsible = sisp_hash['2 - Identificação do responsável no órgão para contato posterior']
  84 + software.responsible_for_acquirement = sisp_hash['4 - Responsáveis pelo Desenvolvimento/Aquisição']
  85 + software.system_info = sisp_hash['5 - Sistema']
  86 + software.development_info = sisp_hash['6 - Características do Desenvolvimento']
  87 + software.maintenance = sisp_hash['7 - Manutenção do Sistema']
  88 + software.standards_adherence = sisp_hash['8 - Aderência a padrões']
  89 + software.plataform = sisp_hash['9 - Ambiente / Plataforma']
  90 +end
  91 +
  92 +def create_identifier name
  93 + "#{name.to_slug}".truncate(150, :omission => '', :separator => '-')
  94 +end
  95 +
  96 +def create_sisp_user #TODO change user info
  97 + user = User.find_by_login('sisp')
  98 + user ||= User.new(:login => 'sisp', :email => 'sisp_user@changeme.com', :password => 'sisp1234', :password_confirmation => 'sisp1234', :environment => $env)
  99 + user.activate if !user.activated?
  100 + user
  101 +end
  102 +
  103 +def create_institution sisp_hash
  104 +
  105 + #TODO create_institution if doesnt exist
  106 +
  107 + name = sisp_hash['1 - Identificação do órgão']['Nome da Empresa/Órgão']
  108 + institution_community = Community::new
  109 + institution_community.name = name
  110 + institution_community.country = "Brasil"
  111 + institution_community.state = "Unknown" #TODO see what to put here
  112 + institution_community.city = "Unknown" #TODO see what to put here
  113 + institution_community.save
  114 +
  115 + institution = PublicInstitution.new
  116 + institution.community = institution_community
  117 + institution.name = name
  118 + institution.juridical_nature = sisp_hash['1 - Identificação do órgão']['Natureza']
  119 + institution.acronym = sisp_hash['1 - Identificação do órgão']['Sigla'] #TODO empty if bigger than 10
  120 + institution.governmental_power = sisp_hash['1 - Identificação do órgão']['Abrangência']
  121 + institution.governmental_sphere = sisp_hash['1 - Identificação do órgão']['Esfera']
  122 + institution.cnpj = "Unknown" #TODO see what to put here
  123 + institution.corporate_name = name #TODO see what to put here
  124 + institution.save
  125 + institution
  126 +
  127 +end
  128 +
  129 +def create_ratings community_identifier, sisp_hash
  130 + software_community = Community.find_by_identifier(community_identifier)
  131 +
  132 + comment_system = Comment.create!(:body=>"Informações de custo de sistema importadas automaticamente do catálogo SISP.", :target => software_community, :author=> $sisp_user)
  133 + comment_maintenance = Comment.create!(:body=>"Informações de custo de manutenção importadas automaticamente do catálogo SISP.", :target => software_community, :author=> $sisp_user)
  134 +
  135 + institution = create_institution(sisp_hash)
  136 +
  137 + system_rating = OrganizationRating.create!(
  138 + :comment => comment_system,
  139 + :value => 3,
  140 + :person => $sisp_user.person,
  141 + :organization => software_community,
  142 + :institution => institution,
  143 + :saved_value => sisp_hash['16 - Custo Estimado']['Custo do sistema'],
  144 + :people_benefited => 0
  145 +)
  146 +
  147 + maintenance_rating = OrganizationRating.create!(
  148 + :comment => comment_maintenance,
  149 + :value => 3,
  150 + :person => $sisp_user.person,
  151 + :organization => software_community,
  152 + :institution => institution,
  153 + :saved_value => sisp_hash['16 - Custo Estimado']['Custo de Manutenção'],
  154 + :people_benefited => 0
  155 + )
  156 +
  157 +end
  158 +
  159 +def create_software_and_attrs sisp_hash
  160 + name = sisp_hash['3 - Identificação do software']['Nome'].truncate(240, :omission => '', :separator => ' ')
  161 + identifier = create_identifier name
  162 +
  163 + #software = Community.find_by_identifier(identifier)
  164 + #software = software.software_info if software
  165 + #software ||= create_software_info(name)
  166 + software = create_software_info(name)
  167 +
  168 + create_ratings identifier, sisp_hash
  169 +
  170 + set_software_category software, sisp_hash['3 - Identificação do software']['Subtipo']
  171 + software.features = sisp_hash['5 - Sistema']['Principais funcionalidades']
  172 + software.finality = sisp_hash['5 - Sistema']['Objetivos do sistema']
  173 + software.objectives = sisp_hash['5 - Sistema']['Objetivos do sistema']
  174 + software.acronym = sisp_hash['3 - Identificação do software']['Sigla'].split[0]
  175 + software.acronym = "" if (software.acronym.size > 10)
  176 + software
  177 +end
  178 +
... ...