# 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) =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? (1..organizations).each do ActiveRecord::Base.transaction do organization = Organization.create!(name: "FillOrganization::#{rand(999_999)}", active: true) organization_pool.push organization end end else organization_pool = Organization.where(active: true) puts " take #{organization_pool.length} organizations" end # create agents agent_pool = [] if !agents.zero? roles = Role.where(name: [ 'Agent']) groups_all = Group.all (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, ) sleep nice agent_pool.push user end end else agent_pool = Role.where(name: 'Agent').first.users.where(active: true) puts " take #{agent_pool.length} agents" end # create customer customer_pool = [] if !customers.zero? roles = Role.where(name: [ 'Customer']) groups_all = Group.all (1..customers).each do ActiveRecord::Base.transaction do suffix = rand(99_999).to_s organization = nil if !organization_pool.empty? && 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, ) sleep nice customer_pool.push user end end else customer_pool = Role.where(name: 'Customer').first.users.where(active: true) puts " take #{customer_pool.length} customers" end # create groups group_pool = [] if !groups.zero? (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 user.save! end sleep nice end end else group_pool = Group.where(active: true) puts " take #{group_pool.length} groups" end # create overviews if !overviews.zero? (1..overviews).each do ActiveRecord::Base.transaction do overview = 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 # create tickets priority_pool = Ticket::Priority.all state_pool = Ticket::State.all if tickets && !tickets.zero? (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) ], updated_by_id: agent.id, created_by_id: agent.id, ) # create article article = 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, updated_by_id: agent.id, created_by_id: agent.id, ) puts " Ticket #{ticket.number} created" sleep nice end end end end end