ref: master
script/fbes-enterprise-call-import
#!/usr/bin/env ruby require "#{File.dirname(__FILE__)}/lib/fbes_enterprise_call" TestRecipient = 'braulio@eita.org.br' User.disable_signup_emails User::Mailer.class_eval do def script_welcome_email user, enterprise, community = nil recipients [user.person.email, "cirandas@fbes.org.br"] if Rails.env.production? recipients [TestRecipient] if Rails.env.development? from "SACC" subject "Bem vinda/o ao CIRANDAS" content_type "text/html" body name: user.person.name, enterprise: enterprise, login: user.login, email: user.person.email, password: user.password, change_pass_link: "http://cirandas.net/account/forgot_password", help: {index: "http://cirandas.net/ajuda", videos: "http://cirandas.net/ajuda/video-aulas-sobre-cirandas"}, fbes: {link: "http://www.fbes.org.br", name: "FBES - Forum Brasileiro de Economia Solidária"}, community: community end end def create_user data name = data[:name] mail = data[:mail] phone = data[:phone] pass = random_password 6 if mail.blank? $log.error "#{$log_prefix} Email não pode ser nulo...usuário não foi criado!" return nil else name = mail.split('@')[0] if name.blank? login = unique_login_from_name name end $log.info "#{$log_prefix} Criando usuário: login '%s', senha '%s' e email '%s' ..." % [ login, pass, mail ] user = User.new login: login, email: mail, password: pass, password_confirmation: pass, environment: $environment, terms_accepted: "1", terms_of_use: $environment.terms_of_use user.person_data = {name: name, contact_phone: phone} user.signup! $log.info "#{$log_prefix} Registrado!" $log.info "#{$log_prefix} Ativando o usuário..." user.activate user rescue => e $log.fatal "#{$log_prefix} Não foi possível criar ou ativar o usuário... devido a excessão %s" % [ e.message ] $log.fatal e.backtrace.join "\n" nil end def find_or_create_users adm_users adm_users.map do |data| if data[:mail].present? $log.info "#{$log_prefix} Verificando se o usuário com e-mail '%s' já existe..." % data[:mail] user = User.find_by_email data[:mail] if user.blank? $log.info "#{$log_prefix} não existe!" user = create_user data else $log.info "#{$log_prefix} já existe!" end end data[:record] = user end.compact end def notify_enterprise_to enterprise, user community_id = enterprise.identifier.sub /^ees-/, '' community = Community[community_id] if community_id.present? if community.present? $log.info "#{$log_prefix} Já existe a comunidade com identificador '%s', por isso foi criado o empreendimento com o identificador '%s'" % [ community.identifier, enterprise.identifier ] end User::Mailer.deliver_script_welcome_email user, enterprise rescue => e $log.fatal "#{$log_prefix} Não foi possível enviar o e-mail para '%s'...devido a excessão '%s'" % [ user.person.email, e ] $log.fatal e.backtrace.join "\n" end def add_admin_users enterprise, users users.each do |user| $log.info "#{$log_prefix} Verificando se o usuário '%s' já é um administrador do empreendimento '%s'" % [ user.login, enterprise.name ] if not user.person.is_admin? enterprise $log.info "#{$log_prefix} não é admin!" $log.info "#{$log_prefix} Adicionando usuário '%s' como administrador do empreendimento '%s'..." % [ user.name, enterprise.name ] if enterprise.add_admin user.person notify_enterprise_to enterprise, user else $log.error "#{$log_prefix} não foi possível adicionar o usuário '%s' como administrador do empreendimento..." % user.person.name end else $log.info "#{$log_prefix} já é admin!" end end end def create_enterprise data name = data[:name] identifier = data[:identifier] city = data[:city] state = data[:state] adm_users = data[:adm_users] $log.info "#{$log_prefix} Criando empreendimento '%s'..." % name identifier = generate_enterprise_identifier name, identifier, city $log.info "#{$log_prefix} Usando identificador %s" % identifier contact_email = nil adm_users.each do |u| break contact_email = u[:mail] if u[:mail].present? end enterprise = Enterprise.new name: name, identifier: identifier, enabled: false, contact_email: contact_email, environment: $environment, referer: 'FBES' enterprise.public_profile = true $log.info "#{$log_prefix} Registrando dados geográficos do empreendimento..." if !state.blank? and !city.blank? enterprise.city_with_region = city.to_s enterprise.state_with_region = State.find_by_acronym(state).name rescue state $log.info "#{$log_prefix} registrado!" else $log.info "#{$log_prefix} falta dados para cidade!" end enterprise.save! $log.info "#{$log_prefix} Criando usuários do empreendimento" users = find_or_create_users adm_users $log.info "#{$log_prefix} Adicionando usuários como gestores" add_admin_users enterprise, users $log.info "#{$log_prefix} Ativando empreendimento" owner = users.first.person rescue nil enterprise.enable owner data[:record] = enterprise data[:url] = "#{$environment.top_url}/#{enterprise.identifier}" data[:observations] << "Sem gestores associados!" if users.blank? enterprise rescue Exception => e $log.fatal "#{$log_prefix} Não foi possível criar o empreendimento devido a excessão '%s'" % e.message $log.fatal e.backtrace.join "\n" data[:url] = "Não foi possível registrar empreendimento" data[:observations] << e.message $enterprises_not_created << data nil end def do_import $log.debug "-" $enterprises.each do |data| #enterprise = find_enterprise e[:name], e[:identifier] enterprise = create_enterprise data $log.debug "-" puts (if enterprise then "." else "E" end) end end parse_opts init_log "fbes-enterprise-call-import.log" load_enterprises $log.debug "#{$log_prefix} Iniciando importação. Esta operação pode demorar algum tempo..." do_import puts "" $log.debug "#{$log_prefix} Importação finalizada!" puts "------------" puts "Foram importados %s..." % ($enterprises.count - $enterprises_not_created.count) puts "Aconteceram %s erros..." % $enterprises_not_created.count csv = export_imported puts "Verifique o arquivo com resultado da importação em '%s'." % csv puts "Verifique o arquivo de log '%s' para detalhes sobre a importação." % $log_name