trabajo-afectivo/lib/fill_db.rb

215 lines
6.4 KiB
Ruby
Raw Normal View History

# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
2015-05-04 18:58:28 +00:00
# rubocop:disable Rails/Output
module FillDb
=begin
fill your database with demo records
FillDb.load(
2017-10-15 06:19:57 +00:00
agents: 50,
customers: 1000,
groups: 20,
organizations: 40,
overviews: 5,
tickets: 100,
2017-10-15 06:19:57 +00:00
)
2017-10-15 06:19:57 +00:00
or if you only want to create 100 tickets
FillDb.load(tickets: 100)
FillDb.load(agents: 20)
FillDb.load(overviews: 20)
FillDb.load(tickets: 10000)
=end
2017-10-15 06:19:57 +00:00
def self.load(params)
nice = params[:nice] || 0.5
agents = params[:agents] || 0
customers = params[:customers] || 0
groups = params[:groups] || 0
organizations = params[:organizations] || 0
overviews = params[:overviews] || 0
2017-10-15 06:19:57 +00:00
tickets = params[:tickets] || 0
puts 'load db with:'
2014-07-23 22:20:39 +00:00
puts " agents:#{agents}"
puts " customers:#{customers}"
puts " groups:#{groups}"
puts " organizations:#{organizations}"
puts " overviews:#{overviews}"
2014-07-23 22:20:39 +00:00
puts " tickets:#{tickets}"
# set current user
UserInfo.current_user_id = 1
# organizations
organization_pool = []
if organizations.zero?
organization_pool = Organization.where(active: true)
puts " take #{organization_pool.length} organizations"
else
2017-10-15 06:19:57 +00:00
(1..organizations).each do
ActiveRecord::Base.transaction do
organization = Organization.create!(name: "FillOrganization::#{rand(999_999)}", active: true)
organization_pool.push organization
end
end
2014-07-23 22:20:39 +00:00
end
# create agents
agent_pool = []
if agents.zero?
agent_pool = Role.where(name: 'Agent').first.users.where(active: true)
puts " take #{agent_pool.length} agents"
else
2017-10-15 06:19:57 +00:00
roles = Role.where(name: [ 'Agent'])
2014-07-23 22:20:39 +00:00
groups_all = Group.all
2017-10-15 06:19:57 +00:00
(1..agents).each do
ActiveRecord::Base.transaction do
suffix = rand(99_999).to_s
user = User.create_or_update(
login: "filldb-agent-#{suffix}",
firstname: "agent #{suffix}",
lastname: "agent #{suffix}",
email: "filldb-agent-#{suffix}@example.com",
password: 'agentpw',
active: true,
roles: roles,
groups: groups_all,
)
2017-10-15 06:19:57 +00:00
sleep nice
agent_pool.push user
end
end
2014-07-23 22:20:39 +00:00
end
# create customer
customer_pool = []
if customers.zero?
customer_pool = Role.where(name: 'Customer').first.users.where(active: true)
puts " take #{customer_pool.length} customers"
else
2017-10-15 06:19:57 +00:00
roles = Role.where(name: [ 'Customer'])
2014-07-23 22:20:39 +00:00
groups_all = Group.all
2017-10-15 06:19:57 +00:00
(1..customers).each do
ActiveRecord::Base.transaction do
suffix = rand(99_999).to_s
organization = nil
2017-11-23 08:09:44 +00:00
if organization_pool.present? && rand(2) == 1
organization = organization_pool[ organization_pool.length - 1 ]
end
user = User.create_or_update(
login: "filldb-customer-#{suffix}",
firstname: "customer #{suffix}",
lastname: "customer #{suffix}",
email: "filldb-customer-#{suffix}@example.com",
password: 'customerpw',
active: true,
organization: organization,
roles: roles,
)
2017-10-15 06:19:57 +00:00
sleep nice
customer_pool.push user
end
end
2014-07-23 22:20:39 +00:00
end
# create groups
group_pool = []
if groups.zero?
group_pool = Group.where(active: true)
puts " take #{group_pool.length} groups"
else
2017-10-15 06:19:57 +00:00
(1..groups).each do
ActiveRecord::Base.transaction do
group = Group.create!(name: "FillGroup::#{rand(999_999)}", active: true)
group_pool.push group
Role.where(name: 'Agent').first.users.where(active: true).each do |user|
user_groups = user.groups
user_groups.push group
user.groups = user_groups
2017-10-15 06:19:57 +00:00
user.save!
end
2017-10-15 06:19:57 +00:00
sleep nice
end
end
2014-07-23 22:20:39 +00:00
end
# create overviews
if !overviews.zero?
(1..overviews).each do
ActiveRecord::Base.transaction do
2019-06-28 11:38:49 +00:00
Overview.create!(
name: "Filloverview::#{rand(999_999)}",
role_ids: [Role.find_by(name: 'Agent').id],
condition: {
'ticket.state_id' => {
operator: 'is',
value: Ticket::State.by_category(:work_on_all).pluck(:id),
},
},
order: {
by: 'created_at',
direction: 'ASC',
},
view: {
d: %w[title customer group state owner created_at],
s: %w[title customer group state owner created_at],
m: %w[number title customer group state owner created_at],
view_mode_default: 's',
},
active: true
)
end
end
end
2014-07-23 22:20:39 +00:00
# create tickets
priority_pool = Ticket::Priority.all
state_pool = Ticket::State.all
2017-11-23 08:09:44 +00:00
return if !tickets || tickets.zero?
2017-11-23 08:09:44 +00:00
(1..tickets).each do
ActiveRecord::Base.transaction do
customer = customer_pool[ rand(customer_pool.length - 1) ]
agent = agent_pool[ rand(agent_pool.length - 1) ]
ticket = Ticket.create!(
title: "some title äöüß#{rand(999_999)}",
group: group_pool[ rand(group_pool.length - 1) ],
customer: customer,
owner: agent,
state: state_pool[ rand(state_pool.length - 1) ],
priority: priority_pool[ rand(priority_pool.length - 1) ],
2017-11-23 08:09:44 +00:00
updated_by_id: agent.id,
created_by_id: agent.id,
)
# create article
2019-06-28 11:38:49 +00:00
Ticket::Article.create!(
ticket_id: ticket.id,
from: customer.email,
to: 'some_recipient@example.com',
subject: "some subject#{rand(999_999)}",
message_id: "some@id-#{rand(999_999)}",
body: 'some message ...',
internal: false,
sender: Ticket::Article::Sender.where(name: 'Customer').first,
type: Ticket::Article::Type.where(name: 'phone').first,
2017-11-23 08:09:44 +00:00
updated_by_id: agent.id,
created_by_id: agent.id,
)
puts " Ticket #{ticket.number} created"
sleep nice
end
2014-07-23 22:20:39 +00:00
end
end
end
2018-04-12 14:57:37 +00:00
# rubocop:enable Rails/Output