123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class Issue1573MultiOrga < ActiveRecord::Migration[6.1]
- def change
- # return if it's a new setup
- return if !Setting.exists?(name: 'system_init_done')
- add_user_organization
- remove_ticket_organization_readonly
- add_organization_to_overview
- fix_organization_screens
- end
- def add_user_organization
- UserInfo.current_user_id = 1
- ObjectManager::Attribute.add(
- force: true,
- object: 'User',
- name: 'organization_ids',
- display: 'Secondary organizations',
- data_type: 'autocompletion_ajax',
- data_option: {
- multiple: true,
- nulloption: true,
- null: true,
- relation: 'Organization',
- item_class: 'formGroup--halfSize',
- display_limit: 3,
- },
- editable: false,
- active: true,
- screens: {
- signup: {},
- invite_agent: {},
- invite_customer: {
- '-all-' => {
- null: true,
- },
- },
- edit: {
- '-all-' => {
- null: true,
- },
- },
- create: {
- '-all-' => {
- null: true,
- },
- },
- view: {
- '-all-' => {
- shown: true,
- },
- },
- },
- to_create: false,
- to_migrate: false,
- to_delete: false,
- position: 901,
- )
- end
- def remove_ticket_organization_readonly
- attribute = ObjectManager::Attribute.find_by(name: 'organization_id', object_lookup_id: ObjectLookup.by_name('Ticket'))
- attribute.data_type = 'autocompletion_ajax_customer_organization'
- attribute.data_option.delete(:readonly)
- attribute.data_option[:permission] = ['ticket.agent', 'ticket.customer']
- attribute.save!(validate: false)
- end
- def overview_customer_index(overview, view)
- overview.view[view].index('customer') || (overview.view[view].count - 1)
- end
- def add_organization_to_overview
- overview = Overview.find_by(link: 'my_organization_tickets')
- return if overview.blank?
- %w[d s m].each do |view|
- next if overview.view[view].blank?
- next if overview.view[view].include?('organization')
- idx = overview_customer_index(overview, view)
- overview.view[view].insert(idx + 1, 'organization')
- end
- overview.save!
- end
- def fix_organization_screens
- ObjectManager::Attribute.where(object_lookup_id: ObjectLookup.by_name('Organization'), editable: false).each do |attribute|
- customer = false
- if attribute.name == 'name'
- customer = true
- end
- attribute.screens[:view] = {
- 'ticket.agent' => {
- shown: true,
- },
- 'ticket.customer' => {
- shown: customer,
- }
- }
- attribute.save!
- end
- end
- end
|