123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
- # rubocop:disable Rails/Output
- module FillDb
- =begin
- fill your database with demo records
- FillDb.load(
- agents: 50,
- customers: 1000,
- groups: 20,
- organizations: 40,
- overviews: 5,
- tickets: 100,
- )
- 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
- 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
- tickets = params[:tickets] || 0
- puts 'load db with:'
- puts " agents:#{agents}"
- puts " customers:#{customers}"
- puts " groups:#{groups}"
- puts " organizations:#{organizations}"
- puts " overviews:#{overviews}"
- 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
- (1..organizations).each do
- ActiveRecord::Base.transaction do
- organization = Organization.create!(name: "FillOrganization::#{counter}", active: true)
- organization_pool.push organization
- end
- end
- 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
- roles = Role.where(name: [ 'Agent'])
- groups_all = Group.all
- (1..agents).each do
- ActiveRecord::Base.transaction do
- suffix = counter.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,
- )
- sleep nice
- agent_pool.push user
- end
- end
- 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
- roles = Role.where(name: [ 'Customer'])
- groups_all = Group.all
- true_or_false = [true, false]
- (1..customers).each do
- ActiveRecord::Base.transaction do
- suffix = counter.to_s
- organization = nil
- if organization_pool.present? && true_or_false.sample
- organization = organization_pool.sample
- 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,
- )
- sleep nice
- customer_pool.push user
- end
- end
- end
- # create groups
- group_pool = []
- if groups.zero?
- group_pool = Group.where(active: true)
- puts " take #{group_pool.length} groups"
- else
- (1..groups).each do
- ActiveRecord::Base.transaction do
- group = Group.create!(name: "FillGroup::#{counter}", 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
- user.save!
- end
- sleep nice
- end
- end
- end
- # create overviews
- if !overviews.zero?
- (1..overviews).each do
- ActiveRecord::Base.transaction do
- Overview.create!(
- name: "Filloverview::#{counter}",
- 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
- # create tickets
- priority_pool = Ticket::Priority.all
- state_pool = Ticket::State.all
- return if !tickets || tickets.zero?
- (1..tickets).each do
- ActiveRecord::Base.transaction do
- customer = customer_pool.sample
- agent = agent_pool.sample
- ticket = Ticket.create!(
- title: "some title äöüß#{counter}",
- group: group_pool.sample,
- customer: customer,
- owner: agent,
- state: state_pool.sample,
- priority: priority_pool.sample,
- updated_by_id: agent.id,
- created_by_id: agent.id,
- )
- # create article
- Ticket::Article.create!(
- ticket_id: ticket.id,
- from: customer.email,
- to: 'some_recipient@example.com',
- subject: "some subject#{counter}",
- message_id: "some@id-#{counter}",
- body: 'some message ...',
- internal: false,
- sender: Ticket::Article::Sender.where(name: 'Customer').first,
- type: Ticket::Article::Type.where(name: 'phone').first,
- updated_by_id: agent.id,
- created_by_id: agent.id,
- )
- puts " Ticket #{ticket.number} created"
- sleep nice
- end
- end
- end
- def self.counter
- @counter ||= SecureRandom.random_number(1_000_000)
- @counter += 1
- end
- end
- # rubocop:enable Rails/Output
|