diff --git a/import_sisp b/import_sisp new file mode 100755 index 0000000..8456b27 --- /dev/null +++ b/import_sisp @@ -0,0 +1,95 @@ +#!/usr/bin/env ruby +# encoding: UTF-8 + +require_relative '../config/environment' +include Noosfero::SampleDataHelper + +$imported_data = YAML.load_file('script/sisp-catalogo.yml') + +def create_community name + community = Community.new + community.name = name + community.identifier = "sisp-#{name.to_slug}" + community +end + +def create_software_info name, finality = "blank", acronym = "" + community = create_community(name) + software_info = SoftwareInfo.new + software_info.community = community + software_info.finality = finality + software_info.acronym = acronym + software_info.public_software = true + + software_info +end + +def set_software_category software, category_name + category = Category.find_by_name(category_name) + category ||= Category.create(:name => category_name, :parent => $software_category, :environment => $env) + software.community.categories << category +end + +def set_sisp_hashes software, sisp_hash + software.sisp_type = sisp_hash['3 - Identificação do software']['Tipo de Software'] + software.agency_identification = sisp_hash['1 - Identificação do órgão'] + software.softawre_requirements = sisp_hash['10 - Requisitos de software'] + software.hardware_requirements = sisp_hash['11 - Requisitos de Hardware'] + software.documentation = sisp_hash['12 - Documentação'] + software.system_applications = sisp_hash['13 - Aplicações do sistema'] + software.active_versions = sisp_hash['15 - Versões em uso'] + software.estimated_cost = sisp_hash['16 - Custo Estimado'] + software.responsible = sisp_hash['2 - Identificação do responsável no órgão para contato posterior'] + software.responsible_for_acquirement = sisp_hash['4 - Responsáveis pelo Desenvolvimento/Aquisição'] + software.system_info = sisp_hash['5 - Sistema'] + software.development_info = sisp_hash['6 - Características do Desenvolvimento'] + software.maintenance = sisp_hash['7 - Manutenção do Sistema'] + software.standards_adherence = sisp_hash['8 - Aderência a padrões'] + software.plataform = sisp_hash['9 - Ambiente / Plataforma'] +end + +def create_software_attrs sisp_hash + name = sisp_hash['3 - Identificação do software']['Nome'] + identifier = "sisp-#{name.to_slug}" + software = Community.find_by_identifier(identifier) + software = software.software_info if software + software ||= create_software_info(name) + + set_software_category software, sisp_hash['3 - Identificação do software']['Subtipo'] + software.features = sisp_hash['5 - Sistema']['Principais funcionalidades'] + software.finality = sisp_hash['5 - Sistema']['Objetivos do sistema'] + software.objectives = sisp_hash['5 - Sistema']['Objetivos do sistema'] + software.acronym = sisp_hash['3 - Identificação do software']['Sigla'].split[0] + software +end + +$env = Environment.default + +$software_category = Category.find_by_name("Software") +$software_category ||= Category.create(:name => "Software", :environment => $env) + +print 'Creating SISP Softwares: ' +$imported_data.keys.each do |key| + + sisp = $imported_data[key]['software_info'] + + sw = create_software_attrs sisp + + sw.sisp_url = $imported_data[key]['url'] + sw.sisp = true + sw.sisp_id = key.to_i + + set_sisp_hashes sw, sisp + + if sw.valid? && sw.community.valid? + sw.community.save + sw.save + print '.' + else + p sw.errors.full_messages + print 'F' + end +end + +puts "\n Done" + diff --git a/src/noosfero-spb/software_communities/db/migrate/20151125175514_change_software_info_structure.rb b/src/noosfero-spb/software_communities/db/migrate/20151125175514_change_software_info_structure.rb index 3e0f464..0204955 100644 --- a/src/noosfero-spb/software_communities/db/migrate/20151125175514_change_software_info_structure.rb +++ b/src/noosfero-spb/software_communities/db/migrate/20151125175514_change_software_info_structure.rb @@ -1,6 +1,7 @@ class ChangeSoftwareInfoStructure < ActiveRecord::Migration def up change_table :software_infos do |t| + t.text :sisp_url t.text :agency_identification t.text :softawre_requirements t.text :hardware_requirements @@ -16,24 +17,29 @@ class ChangeSoftwareInfoStructure < ActiveRecord::Migration t.text :standards_adherence t.text :plataform t.text :sisp_type + t.integer :sisp_id end + + change_column :software_infos, :finality, :text end def down - remove_column :agency_identification - remove_column :softawre_requirements - remove_column :hardware_requirements - remove_column :documentation - remove_column :system_applications - remove_column :active_versions - remove_column :estimated_cost - remove_column :responsible - remove_column :responsible_for_acquirement - remove_column :system_info - remove_column :development_info - remove_column :maintenance - remove_column :standards_adherence - remove_column :plataform - remove_column :sisp_type + remove_column :software_infos, :agency_identification + remove_column :software_infos, :softawre_requirements + remove_column :software_infos, :hardware_requirements + remove_column :software_infos, :documentation + remove_column :software_infos, :system_applications + remove_column :software_infos, :active_versions + remove_column :software_infos, :estimated_cost + remove_column :software_infos, :responsible + remove_column :software_infos, :responsible_for_acquirement + remove_column :software_infos, :system_info + remove_column :software_infos, :development_info + remove_column :software_infos, :maintenance + remove_column :software_infos, :standards_adherence + remove_column :software_infos, :plataform + remove_column :software_infos, :sisp_type + remove_column :software_infos, :sisp_id + remove_column :software_infos, :sisp_url end end diff --git a/src/noosfero-spb/software_communities/lib/software_info.rb b/src/noosfero-spb/software_communities/lib/software_info.rb index 3629b33..562a603 100644 --- a/src/noosfero-spb/software_communities/lib/software_info.rb +++ b/src/noosfero-spb/software_communities/lib/software_info.rb @@ -81,7 +81,7 @@ class SoftwareInfo < ActiveRecord::Base has_one :software_categories - validates_length_of :finality, :maximum => 120 + validates_length_of :finality, :maximum => 4000 validates_length_of :objectives, :maximum => 4000 validates_length_of :features, :maximum => 4000 validates_presence_of :finality, :community -- libgit2 0.21.2