cirandas.net

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