Browse Source

Moved seeds to own files and call them in a loop to restructure them and make separate executions (for resetting purposes) possible.

Thorsten Eckel 7 years ago
parent
commit
0fd75fa482

File diff suppressed because it is too large
+ 13 - 5753
db/seeds.rb


+ 27 - 0
db/seeds/channels.rb

@@ -0,0 +1,27 @@
+Channel.create_if_not_exists(
+  area: 'Email::Notification',
+  options: {
+    outbound: {
+      adapter: 'smtp',
+      options: {
+        host: 'host.example.com',
+        user: '',
+        password: '',
+        ssl: true,
+      },
+    },
+  },
+  group_id: 1,
+  preferences: { online_service_disable: true },
+  active: false,
+)
+Channel.create_if_not_exists(
+  area: 'Email::Notification',
+  options: {
+    outbound: {
+      adapter: 'sendmail',
+    },
+  },
+  preferences: { online_service_disable: true },
+  active: true,
+)

+ 8 - 0
db/seeds/chats.rb

@@ -0,0 +1,8 @@
+Chat.create_if_not_exists(
+  name: 'default',
+  max_queue: 5,
+  note: '',
+  active: true,
+  updated_by_id: 1,
+  created_by_id: 1,
+)

+ 44 - 0
db/seeds/community_user_resources.rb

@@ -0,0 +1,44 @@
+org_community = Organization.create_if_not_exists(
+  id: 1,
+  name: 'Zammad Foundation',
+)
+user_community = User.create_or_update(
+  id: 2,
+  login: 'nicole.braun@zammad.org',
+  firstname: 'Nicole',
+  lastname: 'Braun',
+  email: 'nicole.braun@zammad.org',
+  password: '',
+  active: true,
+  roles: [ Role.find_by(name: 'Customer') ],
+  organization_id: org_community.id,
+)
+
+UserInfo.current_user_id = user_community.id
+
+ticket = Ticket.create(
+  group_id: Group.find_by(name: 'Users').id,
+  customer_id: User.find_by(login: 'nicole.braun@zammad.org').id,
+  title: 'Welcome to Zammad!',
+)
+Ticket::Article.create(
+  ticket_id: ticket.id,
+  type_id: Ticket::Article::Type.find_by(name: 'phone').id,
+  sender_id: Ticket::Article::Sender.find_by(name: 'Customer').id,
+  from: 'Zammad Feedback <feedback@zammad.org>',
+  body: 'Welcome!
+
+Thank you for choosing Zammad.
+
+You will find updates and patches at https://zammad.org/. Online
+documentation is available at https://zammad.org/documentation. Get
+involved (discussions, contributing, ...) at https://zammad.org/participate.
+
+Regards,
+
+Your Zammad Team
+',
+  internal: false,
+)
+
+UserInfo.current_user_id = 1

+ 8 - 0
db/seeds/groups.rb

@@ -0,0 +1,8 @@
+Group.create_if_not_exists(
+  id: 1,
+  name: 'Users',
+  signature_id: Signature.first.id,
+  note: 'Standard Group/Pool for Tickets.',
+  updated_by_id: 1,
+  created_by_id: 1
+)

+ 66 - 0
db/seeds/karma_activities.rb

@@ -0,0 +1,66 @@
+Karma::Activity.create_or_update(
+  name: 'ticket create',
+  description: 'You have created a ticket',
+  score: 10,
+  once_ttl: 60,
+)
+Karma::Activity.create_or_update(
+  name: 'ticket close',
+  description: 'You have closed a ticket',
+  score: 5,
+  once_ttl: 60,
+)
+Karma::Activity.create_or_update(
+  name: 'ticket answer 1h',
+  description: 'You have answered a ticket within 1h',
+  score: 25,
+  once_ttl: 60,
+)
+Karma::Activity.create_or_update(
+  name: 'ticket answer 2h',
+  description: 'You have answered a ticket within 2h',
+  score: 20,
+  once_ttl: 60,
+)
+Karma::Activity.create_or_update(
+  name: 'ticket answer 12h',
+  description: 'You have answered a ticket within 12h',
+  score: 10,
+  once_ttl: 60,
+)
+Karma::Activity.create_or_update(
+  name: 'ticket answer 24h',
+  description: 'You have answered a ticket within 24h',
+  score: 5,
+  once_ttl: 60,
+)
+Karma::Activity.create_or_update(
+  name: 'ticket pending state',
+  description: 'Usage of advanced features',
+  score: 2,
+  once_ttl: 60,
+)
+Karma::Activity.create_or_update(
+  name: 'ticket escalated',
+  description: 'You have escalated tickets',
+  score: -5,
+  once_ttl: 60 * 60 * 24,
+)
+Karma::Activity.create_or_update(
+  name: 'ticket reminder overdue (+2 days)',
+  description: 'You have tickets that are over 2 days overdue',
+  score: -5,
+  once_ttl: 60 * 60 * 24,
+)
+Karma::Activity.create_or_update(
+  name: 'text module',
+  description: 'Usage of advanced features',
+  score: 4,
+  once_ttl: 60 * 30,
+)
+Karma::Activity.create_or_update(
+  name: 'tagging',
+  description: 'Usage of advanced features',
+  score: 4,
+  once_ttl: 60 * 60 * 4,
+)

+ 6 - 0
db/seeds/links.rb

@@ -0,0 +1,6 @@
+Link::Type.create_if_not_exists(id: 1, name: 'normal')
+Link::Object.create_if_not_exists(id: 1, name: 'Ticket')
+Link::Object.create_if_not_exists(id: 2, name: 'Announcement')
+Link::Object.create_if_not_exists(id: 3, name: 'Question/Answer')
+Link::Object.create_if_not_exists(id: 4, name: 'Idea')
+Link::Object.create_if_not_exists(id: 5, name: 'Bug')

+ 18 - 0
db/seeds/macros.rb

@@ -0,0 +1,18 @@
+Macro.create_if_not_exists(
+  name: 'Close & Tag as Spam',
+  perform: {
+    'ticket.state_id' => {
+      value: Ticket::State.by_category(:closed).first.id,
+    },
+    'ticket.tags' => {
+      operator: 'add',
+      value: 'spam',
+    },
+    'ticket.owner_id' => {
+      pre_condition: 'current_user.id',
+      value: '',
+    },
+  },
+  note: 'example macro',
+  active: true,
+)

+ 100 - 0
db/seeds/networks.rb

@@ -0,0 +1,100 @@
+network = Network.create_if_not_exists(
+  id: 1,
+  name: 'base',
+)
+
+Network::Category::Type.create_if_not_exists(
+  id: 1,
+  name: 'Announcement',
+)
+Network::Category::Type.create_if_not_exists(
+  id: 2,
+  name: 'Idea',
+)
+Network::Category::Type.create_if_not_exists(
+  id: 3,
+  name: 'Question',
+)
+Network::Category::Type.create_if_not_exists(
+  id: 4,
+  name: 'Bug Report',
+)
+
+Network::Privacy.create_if_not_exists(
+  id: 1,
+  name: 'logged in',
+  key: 'loggedIn',
+)
+Network::Privacy.create_if_not_exists(
+  id: 2,
+  name: 'logged in and moderator',
+  key: 'loggedInModerator',
+)
+Network::Category.create_if_not_exists(
+  id: 1,
+  name: 'Announcements',
+  network_id: network.id,
+  network_category_type_id: Network::Category::Type.find_by(name: 'Announcement').id,
+  network_privacy_id: Network::Privacy.find_by(name: 'logged in and moderator').id,
+  allow_comments: true,
+)
+Network::Category.create_if_not_exists(
+  id: 2,
+  name: 'Questions',
+  network_id: network.id,
+  allow_comments: true,
+  network_category_type_id: Network::Category::Type.find_by(name: 'Question').id,
+  network_privacy_id: Network::Privacy.find_by(name: 'logged in').id,
+)
+Network::Category.create_if_not_exists(
+  id: 3,
+  name: 'Ideas',
+  network_id: network.id,
+  network_category_type_id: Network::Category::Type.find_by(name: 'Idea').id,
+  network_privacy_id: Network::Privacy.find_by(name: 'logged in').id,
+  allow_comments: true,
+)
+Network::Category.create_if_not_exists(
+  id: 4,
+  name: 'Bug Reports',
+  network_id: network.id,
+  network_category_type_id: Network::Category::Type.find_by(name: 'Bug Report').id,
+  network_privacy_id: Network::Privacy.find_by(name: 'logged in').id,
+  allow_comments: true,
+)
+item = Network::Item.create(
+  title: 'Example Announcement',
+  body: 'Some announcement....',
+  network_category_id: Network::Category.find_by(name: 'Announcements').id,
+)
+Network::Item::Comment.create(
+  network_item_id: item.id,
+  body: 'Some comment....',
+)
+item = Network::Item.create(
+  title: 'Example Question?',
+  body: 'Some questions....',
+  network_category_id: Network::Category.find_by(name: 'Questions').id,
+)
+Network::Item::Comment.create(
+  network_item_id: item.id,
+  body: 'Some comment....',
+)
+item = Network::Item.create(
+  title: 'Example Idea',
+  body: 'Some idea....',
+  network_category_id: Network::Category.find_by(name: 'Ideas').id,
+)
+Network::Item::Comment.create(
+  network_item_id: item.id,
+  body: 'Some comment....',
+)
+item = Network::Item.create(
+  title: 'Example Bug Report',
+  body: 'Some bug....',
+  network_category_id: Network::Category.find_by(name: 'Bug Reports').id,
+)
+Network::Item::Comment.create(
+  network_item_id: item.id,
+  body: 'Some comment....',
+)

+ 1667 - 0
db/seeds/object_manager_attributes.rb

@@ -0,0 +1,1667 @@
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Ticket',
+  name: 'title',
+  display: 'Title',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 200,
+    null: false,
+    translate: false,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_top: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    edit: {},
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 15,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Ticket',
+  name: 'customer_id',
+  display: 'Customer',
+  data_type: 'user_autocompletion',
+  data_option: {
+    relation: 'User',
+    autocapitalize: false,
+    multiple: false,
+    guess: true,
+    null: false,
+    limit: 200,
+    placeholder: 'Enter Person or Organization/Company',
+    minLengt: 2,
+    translate: false,
+    permission: ['ticket.agent'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_top: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    edit: {},
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 10,
+)
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Ticket',
+  name: 'type',
+  display: 'Type',
+  data_type: 'select',
+  data_option: {
+    default: '',
+    options: {
+      'Incident' => 'Incident',
+      'Problem'  => 'Problem',
+      'Request for Change' => 'Request for Change',
+    },
+    nulloption: true,
+    multiple: false,
+    null: true,
+    translate: true,
+  },
+  editable: true,
+  active: false,
+  screens: {
+    create_middle: {
+      '-all-' => {
+        null: false,
+        item_class: 'column',
+      },
+    },
+    edit: {
+      'ticket.agent' => {
+        null: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 20,
+)
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Ticket',
+  name: 'group_id',
+  display: 'Group',
+  data_type: 'select',
+  data_option: {
+    default: '',
+    relation: 'Group',
+    relation_condition: { access: 'rw' },
+    nulloption: true,
+    multiple: false,
+    null: false,
+    translate: false,
+    only_shown_if_selectable: true,
+    permission: ['ticket.agent', 'ticket.customer'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_middle: {
+      '-all-' => {
+        null: false,
+        item_class: 'column',
+      },
+    },
+    edit: {
+      'ticket.agent' => {
+        null: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 25,
+)
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Ticket',
+  name: 'owner_id',
+  display: 'Owner',
+  data_type: 'select',
+  data_option: {
+    default: '',
+    relation: 'User',
+    relation_condition: { roles: 'Agent' },
+    nulloption: true,
+    multiple: false,
+    null: true,
+    translate: false,
+    permission: ['ticket.agent'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_middle: {
+      '-all-' => {
+        null: true,
+        item_class: 'column',
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 30,
+)
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Ticket',
+  name: 'state_id',
+  display: 'State',
+  data_type: 'select',
+  data_option: {
+    relation: 'TicketState',
+    nulloption: true,
+    multiple: false,
+    null: false,
+    default: Ticket::State.find_by(default_follow_up: true).id,
+    translate: true,
+    filter: Ticket::State.by_category(:viewable).pluck(:id),
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_middle: {
+      'ticket.agent' => {
+        null: false,
+        item_class: 'column',
+        filter: Ticket::State.by_category(:viewable_agent_new).pluck(:id),
+      },
+      'ticket.customer' => {
+        item_class: 'column',
+        nulloption: false,
+        null: true,
+        filter: Ticket::State.by_category(:viewable_customer_new).pluck(:id),
+        default: Ticket::State.find_by(default_create: true).id,
+      },
+    },
+    edit: {
+      'ticket.agent' => {
+        nulloption: false,
+        null: false,
+        filter: Ticket::State.by_category(:viewable_agent_edit).pluck(:id),
+      },
+      'ticket.customer' => {
+        nulloption: false,
+        null: true,
+        filter: Ticket::State.by_category(:viewable_customer_edit).pluck(:id),
+        default: Ticket::State.find_by(default_follow_up: true).id,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 40,
+)
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Ticket',
+  name: 'pending_time',
+  display: 'Pending till',
+  data_type: 'datetime',
+  data_option: {
+    future: true,
+    past: false,
+    diff: 24,
+    null: true,
+    translate: true,
+    required_if: {
+      state_id: Ticket::State.by_category(:pending).pluck(:id),
+    },
+    shown_if: {
+      state_id: Ticket::State.by_category(:pending).pluck(:id),
+    },
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_middle: {
+      '-all-' => {
+        null: false,
+        item_class: 'column',
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 41,
+)
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Ticket',
+  name: 'priority_id',
+  display: 'Priority',
+  data_type: 'select',
+  data_option: {
+    relation: 'TicketPriority',
+    nulloption: false,
+    multiple: false,
+    null: false,
+    default: Ticket::Priority.find_by(default_create: true).id,
+    translate: true,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_middle: {
+      'ticket.agent' => {
+        null: false,
+        item_class: 'column',
+      },
+    },
+    edit: {
+      'ticket.agent' => {
+        null: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 80,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Ticket',
+  name: 'tags',
+  display: 'Tags',
+  data_type: 'tag',
+  data_option: {
+    type: 'text',
+    null: true,
+    translate: false,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_bottom: {
+      'ticket.agent' => {
+        null: true,
+      },
+    },
+    edit: {},
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 900,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'TicketArticle',
+  name: 'type_id',
+  display: 'Type',
+  data_type: 'select',
+  data_option: {
+    relation: 'TicketArticleType',
+    nulloption: false,
+    multiple: false,
+    null: false,
+    default: Ticket::Article::Type.lookup(name: 'note').id,
+    translate: true,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_middle: {},
+    edit: {
+      'ticket.agent' => {
+        null: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 100,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'TicketArticle',
+  name: 'internal',
+  display: 'Visibility',
+  data_type: 'select',
+  data_option: {
+    options: { true: 'internal', false: 'public' },
+    nulloption: false,
+    multiple: false,
+    null: true,
+    default: false,
+    translate: true,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_middle: {},
+    edit: {
+      'ticket.agent' => {
+        null: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 200,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'TicketArticle',
+  name: 'to',
+  display: 'To',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 1000,
+    null: true,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_middle: {},
+    edit: {
+      'ticket.agent' => {
+        null: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 300,
+)
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'TicketArticle',
+  name: 'cc',
+  display: 'Cc',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 1000,
+    null: true,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_top: {},
+    create_middle: {},
+    edit: {
+      'ticket.agent' => {
+        null: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 400,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'TicketArticle',
+  name: 'body',
+  display: 'Text',
+  data_type: 'richtext',
+  data_option: {
+    type: 'richtext',
+    maxlength: 20_000,
+    upload: true,
+    rows: 8,
+    null: true,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create_top: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 600,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'login',
+  display: 'Login',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 100,
+    null: true,
+    autocapitalize: false,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {},
+    view: {
+      '-all-' => {
+        shown: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 100,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'firstname',
+  display: 'Firstname',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 150,
+    null: false,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    invite_agent: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    invite_customer: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 200,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'lastname',
+  display: 'Lastname',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 150,
+    null: false,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    invite_agent: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    invite_customer: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 300,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'email',
+  display: 'Email',
+  data_type: 'input',
+  data_option: {
+    type: 'email',
+    maxlength: 150,
+    null: false,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    invite_agent: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    invite_customer: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 400,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'web',
+  display: 'Web',
+  data_type: 'input',
+  data_option: {
+    type: 'url',
+    maxlength: 250,
+    null: true,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 500,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'phone',
+  display: 'Phone',
+  data_type: 'input',
+  data_option: {
+    type: 'tel',
+    maxlength: 100,
+    null: true,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 600,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'mobile',
+  display: 'Mobile',
+  data_type: 'input',
+  data_option: {
+    type: 'tel',
+    maxlength: 100,
+    null: true,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 700,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'fax',
+  display: 'Fax',
+  data_type: 'input',
+  data_option: {
+    type: 'tel',
+    maxlength: 100,
+    null: true,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 800,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'organization_id',
+  display: 'Organization',
+  data_type: 'autocompletion_ajax',
+  data_option: {
+    multiple: false,
+    nulloption: true,
+    null: true,
+    relation: 'Organization',
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 900,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'department',
+  display: 'Department',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 200,
+    null: true,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: true,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1000,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'street',
+  display: 'Street',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 100,
+    null: true,
+  },
+  editable: true,
+  active: false,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1100,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'zip',
+  display: 'Zip',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 100,
+    null: true,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: true,
+  active: false,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1200,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'city',
+  display: 'City',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 100,
+    null: true,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: true,
+  active: false,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1300,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'address',
+  display: 'Address',
+  data_type: 'textarea',
+  data_option: {
+    type: 'text',
+    maxlength: 500,
+    null: true,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: true,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1350,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'password',
+  display: 'Password',
+  data_type: 'input',
+  data_option: {
+    type: 'password',
+    maxlength: 100,
+    null: true,
+    autocomplete: 'new-password',
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      'admin.user' => {
+        null: true,
+      },
+    },
+    view: {}
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1400,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'vip',
+  display: 'VIP',
+  data_type: 'boolean',
+  data_option: {
+    null: true,
+    default: false,
+    item_class: 'formGroup--halfSize',
+    options: {
+      false: 'no',
+      true: 'yes',
+    },
+    translate: true,
+    permission: ['admin.user', 'ticket.agent'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1490,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'note',
+  display: 'Note',
+  data_type: 'richtext',
+  data_option: {
+    type: 'text',
+    maxlength: 250,
+    null: true,
+    note: 'Notes are visible to agents only, never to customers.',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1500,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'role_ids',
+  display: 'Permissions',
+  data_type: 'user_permission',
+  data_option: {
+    null: false,
+    item_class: 'checkbox',
+    permission: ['admin.user'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {
+      '-all-' => {
+        null: false,
+        default: [Role.lookup(name: 'Agent').id],
+      },
+    },
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1600,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'User',
+  name: 'active',
+  display: 'Active',
+  data_type: 'active',
+  data_option: {
+    null: true,
+    default: true,
+    permission: ['admin.user', 'ticket.agent'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    signup: {},
+    invite_agent: {},
+    invite_customer: {},
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1800,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Organization',
+  name: 'name',
+  display: 'Name',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 150,
+    null: false,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 200,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Organization',
+  name: 'shared',
+  display: 'Shared organization',
+  data_type: 'boolean',
+  data_option: {
+    null: true,
+    default: true,
+    note: 'Customers in the organization can view each other items.',
+    item_class: 'formGroup--halfSize',
+    options: {
+      true: 'yes',
+      false: 'no',
+    },
+    translate: true,
+    permission: ['admin.organization'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1400,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Organization',
+  name: 'domain_assignment',
+  display: 'Domain based assignment',
+  data_type: 'boolean',
+  data_option: {
+    null: true,
+    default: false,
+    note: 'Assign Users based on users domain.',
+    item_class: 'formGroup--halfSize',
+    options: {
+      true: 'yes',
+      false: 'no',
+    },
+    translate: true,
+    permission: ['admin.organization'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1410,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Organization',
+  name: 'domain',
+  display: 'Domain',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 150,
+    null: true,
+    item_class: 'formGroup--halfSize',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1420,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Organization',
+  name: 'note',
+  display: 'Note',
+  data_type: 'richtext',
+  data_option: {
+    type: 'text',
+    maxlength: 250,
+    null: true,
+    note: 'Notes are visible to agents only, never to customers.',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1500,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Organization',
+  name: 'active',
+  display: 'Active',
+  data_type: 'active',
+  data_option: {
+    null: true,
+    default: true,
+    permission: ['admin.organization'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1800,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Group',
+  name: 'name',
+  display: 'Name',
+  data_type: 'input',
+  data_option: {
+    type: 'text',
+    maxlength: 150,
+    null: false,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 200,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Group',
+  name: 'assignment_timeout',
+  display: 'Assignment Timeout',
+  data_type: 'integer',
+  data_option: {
+    maxlength: 150,
+    null: true,
+    note: 'Assignment timeout in minutes if assigned agent is not working on it. Ticket will be shown as unassigend.',
+    min: 0,
+    max: 999_999,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 300,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Group',
+  name: 'follow_up_possible',
+  display: 'Follow up possible',
+  data_type: 'select',
+  data_option: {
+    default: 'yes',
+    options: {
+      yes: 'yes',
+      new_ticket: 'do not reopen Ticket but create new Ticket'
+    },
+    null: false,
+    note: 'Follow up for closed ticket possible or not.',
+    translate: true
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 400,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Group',
+  name: 'follow_up_assignment',
+  display: 'Assign Follow Ups',
+  data_type: 'select',
+  data_option: {
+    default: 'yes',
+    options: {
+      true: 'yes',
+      false: 'no',
+    },
+    null: false,
+    note: 'Assign follow up to latest agent again.',
+    translate: true
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 500,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Group',
+  name: 'email_address_id',
+  display: 'Email',
+  data_type: 'select',
+  data_option: {
+    default: '',
+    multiple: false,
+    null: true,
+    relation: 'EmailAddress',
+    nulloption: true,
+    do_not_log: true,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 600,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Group',
+  name: 'signature_id',
+  display: 'Signature',
+  data_type: 'select',
+  data_option: {
+    default: '',
+    multiple: false,
+    null: true,
+    relation: 'Signature',
+    nulloption: true,
+    do_not_log: true,
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 600,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Group',
+  name: 'note',
+  display: 'Note',
+  data_type: 'richtext',
+  data_option: {
+    type: 'text',
+    maxlength: 250,
+    null: true,
+    note: 'Notes are visible to agents only, never to customers.',
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    edit: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: true,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1500,
+)
+
+ObjectManager::Attribute.add(
+  force: true,
+  object: 'Group',
+  name: 'active',
+  display: 'Active',
+  data_type: 'active',
+  data_option: {
+    null: true,
+    default: true,
+    permission: ['admin.group'],
+  },
+  editable: false,
+  active: true,
+  screens: {
+    create: {
+      '-all-' => {
+        null: true,
+      },
+    },
+    edit: {
+      '-all-': {
+        null: false,
+      },
+    },
+    view: {
+      '-all-' => {
+        shown: false,
+      },
+    },
+  },
+  to_create: false,
+  to_migrate: false,
+  to_delete: false,
+  position: 1800,
+)

Some files were not shown because too many files changed in this diff