scinote-web/app/models/user.rb

730 lines
24 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2017-06-23 21:19:08 +08:00
class User < ApplicationRecord
2018-10-12 06:48:12 +08:00
include SearchableModel
include SettingsModel
include VariablesModel
include User::TeamRoles
include TeamBySubjectModel
include InputSanitizeHelper
2019-09-23 22:33:57 +08:00
include ActiveStorageConcerns
2016-02-12 23:52:43 +08:00
devise :invitable, :confirmable, :database_authenticatable, :registerable,
:async, :recoverable, :rememberable, :trackable, :validatable,
2020-07-14 20:49:51 +08:00
:timeoutable, :omniauthable, :lockable,
2018-04-26 23:18:03 +08:00
omniauth_providers: Extends::OMNIAUTH_PROVIDERS,
stretches: Constants::PASSWORD_STRETCH_FACTOR
has_one_attached :avatar
2016-02-12 23:52:43 +08:00
auto_strip_attributes :full_name, :initials, nullify: false
validates :full_name,
presence: true,
length: { maximum: Constants::NAME_MAX_LENGTH }
validates :initials,
2016-09-16 21:41:31 +08:00
presence: true,
length: { maximum: Constants::USER_INITIALS_MAX_LENGTH }
validates :email,
presence: true,
length: { maximum: Constants::EMAIL_MAX_LENGTH }
2016-02-12 23:52:43 +08:00
validate :time_zone_check
validates :external_id, length: { maximum: Constants::EMAIL_MAX_LENGTH }
store_accessor :settings, :time_zone, :notifications_settings, :external_id
2021-04-08 23:40:16 +08:00
DEFAULT_SETTINGS = {
time_zone: 'UTC',
date_format: Constants::DEFAULT_DATE_FORMAT,
notifications_settings: {
assignments: true,
assignments_email: false,
recent: true,
recent_email: false,
2018-09-05 22:42:15 +08:00
system_message_email: false
2020-04-28 18:37:57 +08:00
}
2021-04-08 23:40:16 +08:00
}.freeze
2017-09-28 21:00:54 +08:00
DEFAULT_OTP_DRIFT_TIME_SECONDS = 10
store_accessor :variables, :export_vars
default_variables(
export_vars: {
num_of_export_all_last_24_hours: 0,
last_export_timestamp: Time.now.utc.beginning_of_day.to_i
}
)
2016-02-12 23:52:43 +08:00
# Relations
2017-08-30 00:49:07 +08:00
has_many :user_identities, inverse_of: :user
2017-01-24 23:34:21 +08:00
has_many :user_teams, inverse_of: :user
has_many :teams, through: :user_teams
has_many :user_assignments, dependent: :destroy
2016-02-12 23:52:43 +08:00
has_many :user_projects, inverse_of: :user
has_many :projects, through: :user_assignments, source: :assignable, source_type: 'Project'
2016-02-12 23:52:43 +08:00
has_many :user_my_modules, inverse_of: :user
has_many :my_modules, through: :user_assignments, source: :assignable, source_type: 'MyModule'
2016-02-12 23:52:43 +08:00
has_many :comments, inverse_of: :user
has_many :activities, inverse_of: :owner, foreign_key: 'owner_id'
2016-02-12 23:52:43 +08:00
has_many :results, inverse_of: :user
2017-06-06 23:35:29 +08:00
has_many :repositories, inverse_of: :user
2017-06-07 19:36:39 +08:00
has_many :repository_table_states, inverse_of: :user, dependent: :destroy
has_many :repository_table_filters, foreign_key: 'created_by_id', inverse_of: :created_by, dependent: :nullify
2016-02-12 23:52:43 +08:00
has_many :steps, inverse_of: :user
has_many :reports, inverse_of: :user
has_many :created_assets, class_name: 'Asset', foreign_key: 'created_by_id'
2017-01-25 22:00:14 +08:00
has_many :modified_assets,
class_name: 'Asset',
foreign_key: 'last_modified_by_id'
has_many :created_checklists,
class_name: 'Checklist',
foreign_key: 'created_by_id'
has_many :modified_checklists,
class_name: 'Checklist',
foreign_key: 'last_modified_by_id'
has_many :created_checklist_items,
class_name: 'ChecklistItem',
foreign_key: 'created_by_id'
has_many :modified_checklist_items,
class_name: 'ChecklistItem',
foreign_key: 'last_modified_by_id'
has_many :modified_comments,
class_name: 'Comment',
foreign_key: 'last_modified_by_id'
has_many :created_my_module_groups,
class_name: 'MyModuleGroup',
foreign_key: 'created_by_id'
has_many :created_my_module_tags,
class_name: 'MyModuleTag',
foreign_key: 'created_by_id'
has_many :created_my_modules,
class_name: 'MyModule',
foreign_key: 'created_by_id'
has_many :modified_my_modules,
class_name: 'MyModule',
foreign_key: 'last_modified_by_id'
has_many :archived_my_modules,
class_name: 'MyModule',
foreign_key: 'archived_by_id'
has_many :restored_my_modules,
class_name: 'MyModule',
foreign_key: 'restored_by_id'
has_many :created_teams,
class_name: 'Team',
foreign_key: 'created_by_id'
has_many :modified_teams,
class_name: 'Team',
foreign_key: 'last_modified_by_id'
has_many :created_projects,
class_name: 'Project',
foreign_key: 'created_by_id'
has_many :modified_projects,
class_name: 'Project',
foreign_key: 'last_modified_by_id'
has_many :archived_projects,
class_name: 'Project',
foreign_key: 'archived_by_id'
has_many :restored_projects,
class_name: 'Project',
foreign_key: 'restored_by_id'
has_many :archived_project_folders,
class_name: 'ProjectFolder',
foreign_key: 'archived_by_id',
inverse_of: :arhived_by
has_many :restored_project_folders,
class_name: 'ProjectFolder',
foreign_key: 'restored_by_id',
inverse_of: :restored_by
2017-01-25 22:00:14 +08:00
has_many :modified_reports,
class_name: 'Report',
foreign_key: 'last_modified_by_id'
has_many :modified_results,
class_name: 'Result',
foreign_key: 'modified_by_id'
has_many :archived_results,
class_name: 'Result',
foreign_key: 'archived_by_id'
has_many :restored_results,
class_name: 'Result',
foreign_key: 'restored_by_id'
2016-02-12 23:52:43 +08:00
has_many :modified_steps, class_name: 'Step', foreign_key: 'modified_by_id'
has_many :created_tables, class_name: 'Table', foreign_key: 'created_by_id'
2017-01-25 22:00:14 +08:00
has_many :modified_tables,
class_name: 'Table',
foreign_key: 'last_modified_by_id'
2016-02-12 23:52:43 +08:00
has_many :created_tags, class_name: 'Tag', foreign_key: 'created_by_id'
has_many :tokens,
class_name: 'Token',
foreign_key: 'user_id',
inverse_of: :user
2017-01-25 22:00:14 +08:00
has_many :modified_tags,
class_name: 'Tag',
foreign_key: 'last_modified_by_id'
has_many :assigned_user_my_modules,
class_name: 'UserMyModule',
foreign_key: 'assigned_by_id'
has_many :assigned_user_teams,
class_name: 'UserTeam',
foreign_key: 'assigned_by_id'
has_many :assigned_user_projects,
class_name: 'UserProject',
foreign_key: 'assigned_by_id'
has_many :added_protocols,
class_name: 'Protocol',
foreign_key: 'added_by_id',
inverse_of: :added_by
has_many :archived_protocols,
class_name: 'Protocol',
foreign_key: 'archived_by_id',
inverse_of: :archived_by
has_many :restored_protocols,
class_name: 'Protocol',
foreign_key: 'restored_by_id',
inverse_of: :restored_by
2020-06-04 21:44:47 +08:00
has_many :archived_repositories,
class_name: 'Repository',
2020-06-08 22:22:37 +08:00
foreign_key: 'archived_by_id',
inverse_of: :archived_by,
dependent: :nullify
has_many :restored_repositories,
class_name: 'Repository',
foreign_key: 'restored_by_id',
inverse_of: :restored_by,
dependent: :nullify
has_many :created_repository_rows,
class_name: 'RepositoryRow',
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
2020-06-05 05:29:37 +08:00
has_many :archived_repository_rows,
class_name: 'RepositoryRow',
2020-06-08 22:22:37 +08:00
foreign_key: 'archived_by_id',
inverse_of: :archived_by,
dependent: :nullify
2020-06-10 00:43:22 +08:00
has_many :restored_repository_rows,
class_name: 'RepositoryRow',
foreign_key: 'restored_by_id',
inverse_of: :restored_by,
dependent: :nullify
has_many :assigned_my_module_repository_rows,
class_name: 'MyModuleRepositoryRow',
2017-06-06 23:35:29 +08:00
foreign_key: 'assigned_by_id'
2019-12-10 16:40:40 +08:00
has_many :created_repository_status_types,
class_name: 'RepositoryStatusItem',
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
2019-12-10 16:40:40 +08:00
has_many :modified_repository_status_types,
class_name: 'RepositoryStatusItem',
foreign_key: 'last_modified_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
2019-12-10 16:40:40 +08:00
has_many :created_repository_status_value,
class_name: 'RepositoryStatusValue',
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
2019-12-10 16:40:40 +08:00
has_many :modified_repository_status_value,
class_name: 'RepositoryStatusValue',
foreign_key: 'last_modified_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
2019-12-10 16:40:40 +08:00
has_many :created_repository_date_time_values,
2019-11-18 22:21:57 +08:00
class_name: 'RepositoryDateTimeValue',
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
2019-12-10 16:40:40 +08:00
has_many :modified_repository_date_time_values,
2019-11-18 22:21:57 +08:00
class_name: 'RepositoryDateTimeValue',
foreign_key: 'last_modified_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
2019-12-09 20:38:40 +08:00
has_many :created_repository_checklist_values,
class_name: 'RepositoryChecklistValue',
2019-12-06 20:18:35 +08:00
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
2019-12-09 20:38:40 +08:00
has_many :modified_repository_checklist_values,
class_name: 'RepositoryChecklistValue',
2019-12-06 20:18:35 +08:00
foreign_key: 'last_modified_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
Version 1.25.0 (#4087) * Add initial implementation of inventory stock management [SCI-6402] * Add stock column type (#3786) * Add stock column type * Create new stock column [SCI-6410] * Small fixed for stock column [SCI-6410] * Add stock column validations [SCI-6410] Co-authored-by: Anton <anton@scinote.net> * Add stock table renders [SCI-6412] (#3787) Co-authored-by: Anton <anton@scinote.net> * Implemented stock management modal [SCI-6417] (#3788) * Implement inventory stock management modal [SCI-6417] * Add generalized validation mechanic, some bugfixes [SCI-6417] * Fix permission check and method name in RepositoryStockValue [SCI-6417] * Add stock and consumption to assigned items section [SCI-6434] (#3793) * Added UPDATE_STOCK_CONSUMPTION to MyModule permissons [SCI-6418] (#3781) * Fix invalid return in reports jobs [SCI-6409] (#3777) * Added UPDATE_STOCK_CONSUMPTION to MyModule permissons [SCI-6418] * Add current/new amount section to stock [SCI-6416] (#3791) Co-authored-by: Anton <anton@scinote.net> * Task stock consumption modal[SCI-6444][SCI-6445] (#3798) Add main logic for consumption on task [SCI-6444] Co-authored-by: Anton <anton@scinote.net> * Add stock management columns to snapshots [SCI-6448] * Handle stock management in full table views [SCI-6440] * Implement stock management activities [SCI-6452] (#3810) * Implement stock management activities [SCI-6452] * PR code fixes [SCI-6452] * Implement import for repository stock values [SCI-6461] (#3818) * Add permissions checking to assigned items view on tasks [SCI-6435] (#3801) * Add front-end validation for comments field [SCI-6464] (#3829) Co-authored-by: Anton <anton@scinote.net> * Add stock consumption to pdf and docx [SCI-6460] (#3816) Co-authored-by: Anton <anton@scinote.net> * Add support of repository snapshots to assigned items section [SCI-6439] (#3828) * Change subject of Repository (#3838) * Fixed full view assigned items modal stock consumption (#3846) * Implement repository snapshots displaying on assigned items full view modal [SCI-6442] (#3862) * Implement low stock threshold column [SCI-6555] (#3907) * Stock column fixes [SCI-6455] (#3878) * Fix issues with stock column management [SCI-6455] * Refactor stock column in datatables [SCI-6455] * Fix tests [SCI-6486] (#3913) * Fix tests [SCI-6486] * Fix rspec tests [SCI-6486] Co-authored-by: Anton <anton@scinote.net> * Implement basic logic for Date/DateTime/Stock reminders [SCI-6554] (#3911) * Implement basic logic for Date/DateTime/Stock reminders [SCI-6554] * Implement bell icon [SCI-6500] * Refactor reminder cells scope [SCI-6554] * Add red dot for date/datetime reminder [SCI-6499] (#3924) Co-authored-by: Anton <anton@scinote.net> * Add reminders to stock modal [SCI-6557] (#3917) Co-authored-by: Anton <anton@scinote.net> * Add flyout for repository reminders [SCI-6501] (#3926) Co-authored-by: Anton <anton@scinote.net> * Fix moving experiment [SCI-6602] (#3927) * Update Rails to 6.1.4.7 [SCI-6615] (#3928) * Task inventory activity for assigned item consumption [SCI-6453] (#3830) * Add task inventory activity [SCI-6453] * Apply user's time zone in advanced filters for time data type [SCI-6585] (#3930) * Bump version to 1.24.2 * Implement hidden repository cell reminders [SCI-6504] (#3933) * Low stock flyout reminders [SCI-6502] (#3932) * Display low stock flyout reminder [SCI-6502] * Display low stock flyout reminder [SCI-6502] * Adapt showing stock reminders for every bell icon click [SCI-6502] * Correct hound error [SCI-6502] * Fix event registration for fetching reminder data [SCI-6502] * Fix event registration for fetching reminder data [SCI-6502] * Fix hound [SCI-6502] * Remove not needed line [SCI-6502] * Add reminder template [SCI-6502] * Add clearing messages [SCI-6502] * Displaying low stock warning [SCI-6497] (#3912) * Low stock warning [SCI-6497 * Fix some bugs [SCI-6497] * Fix to long line [SCI-6497] * Clean not needed information in renderes [SCI-6497] * Icon bell reminder for an assigned item on the task [SCI-6506] (#3929) * Add bell icon on assigned task [SCI-6506] * Add flyout and improve quering [SCI-6506] * Refactor repository toolbar [SCI-6545] (#3943) Co-authored-by: Anton <anton@scinote.net> * Add datetime reminders to columns modal [SCI-6556] (#3934) Co-authored-by: Anton <anton@scinote.net> * Hide reminders for archived repositories [SCI-6609] (#3941) * Hide reminders for archived repositories [SCI-6609] * Always pass repository in datatable helper [SCI-6609] * Handle locked stock consumption state [SCI-6608] (#3942) * Change env variable name for s3 bucket region [SCI-6603] (#3944) * Add last_transition_error column to tasks [SCI-6610] (#3949) * Add microtransactions to stock consumptions [SCI-6626] (#3948) Co-authored-by: Anton <anton@scinote.net> * Date remidner flyout [SCI-6503] (#3937) * Implement date reminder flyout [SCI-6503] * Show only days left for date reminder [SCI-6503] * Pluralize day in reminders [SCI-6503] * Create partials for different reminders [SCI-6503] * Unify css for reminder [SCI-6503] * Add micro interactions for stock modal [SCI-6625] (#3947) Co-authored-by: Anton <anton@scinote.net> * Hide options to add New Tags for users without permissions on Task level [SCI-6573] (#3945) * Bump lodash-es from 4.17.15 to 4.17.21 (#3939) Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.15 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.21) --- updated-dependencies: - dependency-name: lodash-es dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Implement clearing hidden repository reminders [SCI-6507] (#3936) * Add stock filters [SCI-6547] (#3938) Co-authored-by: Anton <anton@scinote.net> * Fix assign view for task repository [SCI-6648] (#3954) Co-authored-by: Anton <anton@scinote.net> * Add micro-interactions to reminders flyout [SCI-6627] (#3951) Co-authored-by: Anton <anton@scinote.net> * Improve error reporting in task status transition [SCI-6611] (#3952) * Add ordering to global search results [SCI-6639] (#3960) * Fix multiple stock bugs [SCI-6651] (#3959) Co-authored-by: Anton <anton@scinote.net> * Fix large previews for csv files [SCI-6619] (#3961) * Add alias to cell sort query, to prevent join conflicts [SCI-6649] (#3953) * Add alias to cell sort query, to prevent join conflicts [SCI-6649] * Added value_type to join condition to make use of DB index [SCI-6649] * Update front end validation for columns managment [SCI-6657] (#3962) Co-authored-by: Anton <anton@scinote.net> * Print protocol smart annotation and table improvements [SCI-6566] (#3925) * Improve table printing in the print menu [SCI-6566] * Open smart annotation in new tab for print view [SCI-6566] * Unify naming of same parameter [SCI-6566] * Fix typo [SCI-6566] * Fix hound errors [SCI-6566] * Add stock management toggling [SCI-6653] (#3967) Co-authored-by: Anton <anton@scinote.net> * Fix caching of an experiment card dropdown [SCI-6606] (#3963) * Add stock consumption permission to user roles [SCI-6665] (#3966) * Show archive icon only on archived projects in the header [SCI-6617] (#3965) * Fix assigned items fullview modal [SCI-6664] (#3968) * Implement hide all repository reminders button [SCI-6505] (#3940) * Viewer role does not see any tasks in archived project [SCI-6616] (#3958) * Fix viewer role not see any tasks in archived project [SCI-6616] * Fix rollback for add read archive permission migration [SCI-6616] * Stock modal bugs [SCI-6667] (#3970) Co-authored-by: Anton <anton@scinote.net> * Always use Tika text extractor in server mode [SCI-6658] (#3957) * Implement stock consumption via the API [SCI-6642] (#3964) * Implement stock consumption via the API [SCI-6642] * Remove unnecessary attribute from InventoryItemSerializer [SCI-6642] * Amend permission check, add nested transaction support to consume_stock method [SCI-6642] * Toolbar fixes [SCI-6670] (#3973) Co-authored-by: Anton <anton@scinote.net> * Make stock column work properly with different orders [SCI-6677] (#3974) * Fix filters loading for stock filter [SCI-6687] (#3975) Co-authored-by: Anton <anton@scinote.net> * Hide reminders and disable stock consumption for archived items [SCI-6689] (#3978) * Fix red dot for datetime columns [SCI-6684] (#3977) Co-authored-by: Anton <anton@scinote.net> * Fix saving of inventory date time reminders saving [SCI-6672] (#3976) * Bump puma from 5.6.2 to 5.6.4 (#3972) Bumps [puma](https://github.com/puma/puma) from 5.6.2 to 5.6.4. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v5.6.2...v5.6.4) --- updated-dependencies: - dependency-name: puma dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Don't load reminders if the stock feature is disabled [SCI-6673] (#3981) * Don't load reminders if the stock feature is disabled [SCI-6673] * Don't load reminders if the stock feature is disabled [SCI-6673] * Unify stock management enabled check [6673] * Update repository card view for stock [SCI-6685] (#3982) Co-authored-by: Anton <anton@scinote.net> * Disable stock managememnt for all tables in my module context [SCI-6692] (#3983) * Implement failed snapshot pop-up on task screen [SCI-6612] (#3950) * Implement failed snapshot pop-up on task screen [SCI-6612] * Copy change [SCI-6612] * Proper handling of snapshot transition error [SCI-6612] * Move modal auto open logic to JS file [SCI-6612] * Remove unnecessary .html_safe [SCI-6612] * Fix assigning and consuming items [SCI-6686] (#3985) * Repository toolbar CSS fixes [SCI-6676] (#3984) Co-authored-by: Anton <anton@scinote.net> * Add basic validation to reminder value to prevent integer overflow errors [SCI-6693] (#3986) * Fix reminder dropdown on task screen [SCI-6678] (#3987) Co-authored-by: Anton <anton@scinote.net> * Fix inventory sorting with date time reminders [SCI-6683] (#3980) * Fix css stock modal [SCI-6675] (#3989) Co-authored-by: Anton <anton@scinote.net> * Stock column management UX/UI fixes [SCI-6674] (#3979) * Fix red dot for dates in repository [SCI-6696] (#3991) Co-authored-by: Anton <anton@scinote.net> * Added styling for failed snapshots in sidebar [SCI-6636] (#3990) * Added styling for failed snapshots in sidebar [SCI-6636] * Simplify markup for failed icon [SCI-6636] * Turn off autocomplete for stock amount/reminder [SCI-6694] (#3988) * Override error styling in stock column management [SCI-6674] (#3995) * Fix repository full view tables without stock management [SCI-6703] (#3994) * Add pagination to projects list [SCI-6655] * Add reminder preset to date(time) reminders [SCI-6693] (#3996) * Fix color on consumption link [SCI-6686] (#3992) * Fix sorting by date time columns in inventories [SCI-6683] (#4002) * Improve loading of the dashboard [SCI-6618] (#4001) * Stock modal UX fixes [SCI-6714] (#3998) Co-authored-by: Anton <anton@scinote.net> * Fix css for stotck modal [SCI-6698] (#3999) Co-authored-by: Anton <anton@scinote.net> * API: add endpoint for updating of stock [SCI-6549] (#3955) * Add test for Stock repository cell [SCI-6549] * Create and update stock inventory cell [SCI-6549] * Fix hound errors [SCI-6549] * Fix ledger recording [SCI-6549] * Fix api endpoint [SCI-6549] * Fix hound [SCI-6549] * Fix collapsing of assigned items tables [SCI-6705] (#4000) * API: add endpoint for creating stock column [SCI-6550] (#3956) * Add test for repositoty stock column api [SCI-6550] * Create and update stock column [SCI-6550] * Change stock unit [SCI-6550] * Fix hound [SCI-6550] * Fix on delete [SCI-6550] * Fix houd [SCI-6550] * Removed autofocus clear on open reminder flyout [SCI-6690] (#4003) * Removed clear autofocus on open reminder flyout [SCI-6690] * Fix hound [SCI-6690] * Adding/changing stock consumption [SCI-6708] (#4005) * Adding/changing stock consumption [SCI-6708] * Fix hound [SCI-6708] * Remove date red dots for snapshots [SCI-6715] (#4004) Co-authored-by: Anton <anton@scinote.net> * Add snapshot error message below task status [SCI-6614] (#4009) * Add repository snapshot error modal [SCI-6613] (#3993) * Bump nokogiri from 1.13.3 to 1.13.4 (#4008) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.3 to 1.13.4. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/v1.13.4/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.3...v1.13.4) --- updated-dependencies: - dependency-name: nokogiri dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add pagination for experiments [SCI-6656] * Fix sorting by time and time range columns [SCI-6683] (#4011) * Bump moment from 2.24.0 to 2.29.2 (#4006) Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.29.2. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.24.0...2.29.2) --- updated-dependencies: - dependency-name: moment dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Align items in assigned item section [SCI-6707] (#4007) * Add locking and unique index to repository row assigning [SCI-6591] (#3921) * tmp (#3935) * Revert "tmp (#3935)" (#4014) This reverts commit 043086d55fe0c7adeac528662e1433ccdb91aed0. * Move cursor to end of value when focusing consumption amount [SCI-6727] (#4013) * Fix removing stock reminder threshold [SCI-6724] (#4010) * Stock small ux fixes [SCI-6714] (#4015) Co-authored-by: Anton <anton@scinote.net> * Add aibility to delete stock column [SCI-6723] (#4017) Co-authored-by: Anton <anton@scinote.net> * Fix red dot for date reminders [SCI-6696] (#4016) Co-authored-by: Anton <anton@scinote.net> * Change the way setting stock works [SCI-6730] (#4018) * Fix error modal opening on successful snapshot [SCI-6726] (#4019) * Refactor and fix display of stock warnings and stock consumption [SCI-6734] (#4021) * Refactor and fix how stock consumption is displayed [SCI-6734] * Refactor and fix display of stock warnings [SCI-6734] * Fix stock consumption in reports [SCI-6735] * Fix markup * Focus authenticator code field [SCI-6716] (#4022) * Hide reminders settings and red dots if stock is disabled [SCI-6673] (#4024) * Fix decimals in stock consumption modal [SCI-6732] * Add edit title for stock consumption modal [SCI-6731] * Highlight negative stock in modal with red [SCI-6729] * Stock management test [SCI-6420] (#3946) * Initial test for stock management * Repository stock values adding [does not work] SCI-6420 * Fix typos SCI-6420 * Fix test [SCI-6420] * Test changes [SCI-6402] * Remove locking test [SCI-6420] * Remove lock [SCI-6420] * Remove serializer [SCI-6420] * Fix stock test and add ledger creation on consume [SCI-6420] * Fix inviting users to team [SCI-6725] (#4026) * Improve stock ledger records creation [SCI-6419] * Fix stock modal add/remove value preset value [SCI-6740] * API GET repository stock column output fix [SCI-6550] (#4030) * Add include stock unit items to Stock column get [SCI-6550] * Fix stock column test [SCI-6550] * Fix hound [SCI-6550] * Move list-type column includes to param, unify naming [SCI-6738] (#4036) * Add default includes for inventory columns with lists [SCI-6738] * Move list-type column includes to param, unify naming [SCI-6738] * Fix snapshot consumption display [SCI-6734] (#4035) * Fix decimal render function [SCI-6742] (#4037) Co-authored-by: Anton <anton@scinote.net> * Add comment to repository stock activities [SCI-6746] * Fix default stock column default units selection [SCI-6744] * Add negative validation for stock [SCI-6743] * Highlight negative value in consumption modal [SCI-6741] * Fix snapshot creation with stock consumption [SCI-6762] * Update stock value without reloading the table [SCI-6745] (#4041) * Allow tag creation on task level if you have permission [SCI-6573] (#4031) * Enable team normal user to edit repository files [SCI-6765] (#4049) * Add negative validation for treshold [SCI-6743] * Copy fix [SCI-6762] (#4048) * Add bell icon for negative stock [SCI-6770] * Fix formatting of stock consumption on tasks [SCI-6737] (#4050) * Fix duplicated inventories on tasks for export all [SCI-6776] * Stock / stock consumption display fixes [SCI-6771] (#4054) * Fix blank stock consumption representation in reports [SCI-6769] * Upgrade Rails to 6.1.5.1 * Show last page message only after second page [SCI-6761] * Small CSS fixes for repository [SCI-6767] * Added validations for date(time) column reminder [SCI-6775] (#4063) * Upgrade Ruby to 2.7.6 * Open repository on print view [SCI-6566] (#4055) * Fix saving of new date time columns with reminders [SCI-6774] (#4068) * Improve input field for adding new team [SCI-6155] * Allow deleteion of stock columns when stock management is disabled [SCI-6800] * Update default label template [SCI-6763] (#4064) * Stock editing and reminder fixes [SCI-6803] (#4078) * Fix stock editing after adding new value [SCI-6803] * Don't load reminders for snapshots [SCI-6803] * Improve loading time of canvas view/edit [SCI-6797] * Fix stock consumption rounding [SCI-6807] * Fix displaying of stock consumption units [SCI-6795] * Fix task dropdown actions [SCI-6817] * Fix archived tasks view [SCI-6822] * Fix display of repository snapshot with stock consumption [SCI-6824] * Fix duplicated counters on task card [SCI-6825] * Bump version to 1.25.0 Co-authored-by: Oleksii Kriuchykhin <okriuchykhin@biosistemika.com> Co-authored-by: aignatov-bio <47317017+aignatov-bio@users.noreply.github.com> Co-authored-by: Anton <anton@scinote.net> Co-authored-by: ajugo <andrej.jugovic7@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-11 16:39:51 +08:00
has_many :created_repository_stock_value,
class_name: 'RepositoryStockValue',
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
has_many :modified_repository_stock_value,
class_name: 'RepositoryStockValue',
foreign_key: 'created_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
2019-12-09 20:38:40 +08:00
has_many :created_repository_checklist_types,
class_name: 'RepositoryChecklistItem',
2019-12-06 20:18:35 +08:00
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
2019-12-09 20:38:40 +08:00
has_many :modified_repository_checklist_types,
class_name: 'RepositoryChecklistItem',
2019-12-06 20:18:35 +08:00
foreign_key: 'last_modified_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
2019-12-10 19:02:08 +08:00
has_many :created_repository_number_values,
2019-12-09 23:38:21 +08:00
class_name: 'RepositoryNumberValue',
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
2019-12-10 19:02:08 +08:00
has_many :modified_repository_number_values,
2019-12-09 23:38:21 +08:00
class_name: 'RepositoryNumberValue',
foreign_key: 'last_modified_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
has_many :created_repository_text_values,
class_name: 'RepositoryTextValue',
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
has_many :modified_repository_text_values,
class_name: 'RepositoryTextValue',
foreign_key: 'last_modified_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
Version 1.25.0 (#4087) * Add initial implementation of inventory stock management [SCI-6402] * Add stock column type (#3786) * Add stock column type * Create new stock column [SCI-6410] * Small fixed for stock column [SCI-6410] * Add stock column validations [SCI-6410] Co-authored-by: Anton <anton@scinote.net> * Add stock table renders [SCI-6412] (#3787) Co-authored-by: Anton <anton@scinote.net> * Implemented stock management modal [SCI-6417] (#3788) * Implement inventory stock management modal [SCI-6417] * Add generalized validation mechanic, some bugfixes [SCI-6417] * Fix permission check and method name in RepositoryStockValue [SCI-6417] * Add stock and consumption to assigned items section [SCI-6434] (#3793) * Added UPDATE_STOCK_CONSUMPTION to MyModule permissons [SCI-6418] (#3781) * Fix invalid return in reports jobs [SCI-6409] (#3777) * Added UPDATE_STOCK_CONSUMPTION to MyModule permissons [SCI-6418] * Add current/new amount section to stock [SCI-6416] (#3791) Co-authored-by: Anton <anton@scinote.net> * Task stock consumption modal[SCI-6444][SCI-6445] (#3798) Add main logic for consumption on task [SCI-6444] Co-authored-by: Anton <anton@scinote.net> * Add stock management columns to snapshots [SCI-6448] * Handle stock management in full table views [SCI-6440] * Implement stock management activities [SCI-6452] (#3810) * Implement stock management activities [SCI-6452] * PR code fixes [SCI-6452] * Implement import for repository stock values [SCI-6461] (#3818) * Add permissions checking to assigned items view on tasks [SCI-6435] (#3801) * Add front-end validation for comments field [SCI-6464] (#3829) Co-authored-by: Anton <anton@scinote.net> * Add stock consumption to pdf and docx [SCI-6460] (#3816) Co-authored-by: Anton <anton@scinote.net> * Add support of repository snapshots to assigned items section [SCI-6439] (#3828) * Change subject of Repository (#3838) * Fixed full view assigned items modal stock consumption (#3846) * Implement repository snapshots displaying on assigned items full view modal [SCI-6442] (#3862) * Implement low stock threshold column [SCI-6555] (#3907) * Stock column fixes [SCI-6455] (#3878) * Fix issues with stock column management [SCI-6455] * Refactor stock column in datatables [SCI-6455] * Fix tests [SCI-6486] (#3913) * Fix tests [SCI-6486] * Fix rspec tests [SCI-6486] Co-authored-by: Anton <anton@scinote.net> * Implement basic logic for Date/DateTime/Stock reminders [SCI-6554] (#3911) * Implement basic logic for Date/DateTime/Stock reminders [SCI-6554] * Implement bell icon [SCI-6500] * Refactor reminder cells scope [SCI-6554] * Add red dot for date/datetime reminder [SCI-6499] (#3924) Co-authored-by: Anton <anton@scinote.net> * Add reminders to stock modal [SCI-6557] (#3917) Co-authored-by: Anton <anton@scinote.net> * Add flyout for repository reminders [SCI-6501] (#3926) Co-authored-by: Anton <anton@scinote.net> * Fix moving experiment [SCI-6602] (#3927) * Update Rails to 6.1.4.7 [SCI-6615] (#3928) * Task inventory activity for assigned item consumption [SCI-6453] (#3830) * Add task inventory activity [SCI-6453] * Apply user's time zone in advanced filters for time data type [SCI-6585] (#3930) * Bump version to 1.24.2 * Implement hidden repository cell reminders [SCI-6504] (#3933) * Low stock flyout reminders [SCI-6502] (#3932) * Display low stock flyout reminder [SCI-6502] * Display low stock flyout reminder [SCI-6502] * Adapt showing stock reminders for every bell icon click [SCI-6502] * Correct hound error [SCI-6502] * Fix event registration for fetching reminder data [SCI-6502] * Fix event registration for fetching reminder data [SCI-6502] * Fix hound [SCI-6502] * Remove not needed line [SCI-6502] * Add reminder template [SCI-6502] * Add clearing messages [SCI-6502] * Displaying low stock warning [SCI-6497] (#3912) * Low stock warning [SCI-6497 * Fix some bugs [SCI-6497] * Fix to long line [SCI-6497] * Clean not needed information in renderes [SCI-6497] * Icon bell reminder for an assigned item on the task [SCI-6506] (#3929) * Add bell icon on assigned task [SCI-6506] * Add flyout and improve quering [SCI-6506] * Refactor repository toolbar [SCI-6545] (#3943) Co-authored-by: Anton <anton@scinote.net> * Add datetime reminders to columns modal [SCI-6556] (#3934) Co-authored-by: Anton <anton@scinote.net> * Hide reminders for archived repositories [SCI-6609] (#3941) * Hide reminders for archived repositories [SCI-6609] * Always pass repository in datatable helper [SCI-6609] * Handle locked stock consumption state [SCI-6608] (#3942) * Change env variable name for s3 bucket region [SCI-6603] (#3944) * Add last_transition_error column to tasks [SCI-6610] (#3949) * Add microtransactions to stock consumptions [SCI-6626] (#3948) Co-authored-by: Anton <anton@scinote.net> * Date remidner flyout [SCI-6503] (#3937) * Implement date reminder flyout [SCI-6503] * Show only days left for date reminder [SCI-6503] * Pluralize day in reminders [SCI-6503] * Create partials for different reminders [SCI-6503] * Unify css for reminder [SCI-6503] * Add micro interactions for stock modal [SCI-6625] (#3947) Co-authored-by: Anton <anton@scinote.net> * Hide options to add New Tags for users without permissions on Task level [SCI-6573] (#3945) * Bump lodash-es from 4.17.15 to 4.17.21 (#3939) Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.15 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.21) --- updated-dependencies: - dependency-name: lodash-es dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Implement clearing hidden repository reminders [SCI-6507] (#3936) * Add stock filters [SCI-6547] (#3938) Co-authored-by: Anton <anton@scinote.net> * Fix assign view for task repository [SCI-6648] (#3954) Co-authored-by: Anton <anton@scinote.net> * Add micro-interactions to reminders flyout [SCI-6627] (#3951) Co-authored-by: Anton <anton@scinote.net> * Improve error reporting in task status transition [SCI-6611] (#3952) * Add ordering to global search results [SCI-6639] (#3960) * Fix multiple stock bugs [SCI-6651] (#3959) Co-authored-by: Anton <anton@scinote.net> * Fix large previews for csv files [SCI-6619] (#3961) * Add alias to cell sort query, to prevent join conflicts [SCI-6649] (#3953) * Add alias to cell sort query, to prevent join conflicts [SCI-6649] * Added value_type to join condition to make use of DB index [SCI-6649] * Update front end validation for columns managment [SCI-6657] (#3962) Co-authored-by: Anton <anton@scinote.net> * Print protocol smart annotation and table improvements [SCI-6566] (#3925) * Improve table printing in the print menu [SCI-6566] * Open smart annotation in new tab for print view [SCI-6566] * Unify naming of same parameter [SCI-6566] * Fix typo [SCI-6566] * Fix hound errors [SCI-6566] * Add stock management toggling [SCI-6653] (#3967) Co-authored-by: Anton <anton@scinote.net> * Fix caching of an experiment card dropdown [SCI-6606] (#3963) * Add stock consumption permission to user roles [SCI-6665] (#3966) * Show archive icon only on archived projects in the header [SCI-6617] (#3965) * Fix assigned items fullview modal [SCI-6664] (#3968) * Implement hide all repository reminders button [SCI-6505] (#3940) * Viewer role does not see any tasks in archived project [SCI-6616] (#3958) * Fix viewer role not see any tasks in archived project [SCI-6616] * Fix rollback for add read archive permission migration [SCI-6616] * Stock modal bugs [SCI-6667] (#3970) Co-authored-by: Anton <anton@scinote.net> * Always use Tika text extractor in server mode [SCI-6658] (#3957) * Implement stock consumption via the API [SCI-6642] (#3964) * Implement stock consumption via the API [SCI-6642] * Remove unnecessary attribute from InventoryItemSerializer [SCI-6642] * Amend permission check, add nested transaction support to consume_stock method [SCI-6642] * Toolbar fixes [SCI-6670] (#3973) Co-authored-by: Anton <anton@scinote.net> * Make stock column work properly with different orders [SCI-6677] (#3974) * Fix filters loading for stock filter [SCI-6687] (#3975) Co-authored-by: Anton <anton@scinote.net> * Hide reminders and disable stock consumption for archived items [SCI-6689] (#3978) * Fix red dot for datetime columns [SCI-6684] (#3977) Co-authored-by: Anton <anton@scinote.net> * Fix saving of inventory date time reminders saving [SCI-6672] (#3976) * Bump puma from 5.6.2 to 5.6.4 (#3972) Bumps [puma](https://github.com/puma/puma) from 5.6.2 to 5.6.4. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v5.6.2...v5.6.4) --- updated-dependencies: - dependency-name: puma dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Don't load reminders if the stock feature is disabled [SCI-6673] (#3981) * Don't load reminders if the stock feature is disabled [SCI-6673] * Don't load reminders if the stock feature is disabled [SCI-6673] * Unify stock management enabled check [6673] * Update repository card view for stock [SCI-6685] (#3982) Co-authored-by: Anton <anton@scinote.net> * Disable stock managememnt for all tables in my module context [SCI-6692] (#3983) * Implement failed snapshot pop-up on task screen [SCI-6612] (#3950) * Implement failed snapshot pop-up on task screen [SCI-6612] * Copy change [SCI-6612] * Proper handling of snapshot transition error [SCI-6612] * Move modal auto open logic to JS file [SCI-6612] * Remove unnecessary .html_safe [SCI-6612] * Fix assigning and consuming items [SCI-6686] (#3985) * Repository toolbar CSS fixes [SCI-6676] (#3984) Co-authored-by: Anton <anton@scinote.net> * Add basic validation to reminder value to prevent integer overflow errors [SCI-6693] (#3986) * Fix reminder dropdown on task screen [SCI-6678] (#3987) Co-authored-by: Anton <anton@scinote.net> * Fix inventory sorting with date time reminders [SCI-6683] (#3980) * Fix css stock modal [SCI-6675] (#3989) Co-authored-by: Anton <anton@scinote.net> * Stock column management UX/UI fixes [SCI-6674] (#3979) * Fix red dot for dates in repository [SCI-6696] (#3991) Co-authored-by: Anton <anton@scinote.net> * Added styling for failed snapshots in sidebar [SCI-6636] (#3990) * Added styling for failed snapshots in sidebar [SCI-6636] * Simplify markup for failed icon [SCI-6636] * Turn off autocomplete for stock amount/reminder [SCI-6694] (#3988) * Override error styling in stock column management [SCI-6674] (#3995) * Fix repository full view tables without stock management [SCI-6703] (#3994) * Add pagination to projects list [SCI-6655] * Add reminder preset to date(time) reminders [SCI-6693] (#3996) * Fix color on consumption link [SCI-6686] (#3992) * Fix sorting by date time columns in inventories [SCI-6683] (#4002) * Improve loading of the dashboard [SCI-6618] (#4001) * Stock modal UX fixes [SCI-6714] (#3998) Co-authored-by: Anton <anton@scinote.net> * Fix css for stotck modal [SCI-6698] (#3999) Co-authored-by: Anton <anton@scinote.net> * API: add endpoint for updating of stock [SCI-6549] (#3955) * Add test for Stock repository cell [SCI-6549] * Create and update stock inventory cell [SCI-6549] * Fix hound errors [SCI-6549] * Fix ledger recording [SCI-6549] * Fix api endpoint [SCI-6549] * Fix hound [SCI-6549] * Fix collapsing of assigned items tables [SCI-6705] (#4000) * API: add endpoint for creating stock column [SCI-6550] (#3956) * Add test for repositoty stock column api [SCI-6550] * Create and update stock column [SCI-6550] * Change stock unit [SCI-6550] * Fix hound [SCI-6550] * Fix on delete [SCI-6550] * Fix houd [SCI-6550] * Removed autofocus clear on open reminder flyout [SCI-6690] (#4003) * Removed clear autofocus on open reminder flyout [SCI-6690] * Fix hound [SCI-6690] * Adding/changing stock consumption [SCI-6708] (#4005) * Adding/changing stock consumption [SCI-6708] * Fix hound [SCI-6708] * Remove date red dots for snapshots [SCI-6715] (#4004) Co-authored-by: Anton <anton@scinote.net> * Add snapshot error message below task status [SCI-6614] (#4009) * Add repository snapshot error modal [SCI-6613] (#3993) * Bump nokogiri from 1.13.3 to 1.13.4 (#4008) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.3 to 1.13.4. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/v1.13.4/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.3...v1.13.4) --- updated-dependencies: - dependency-name: nokogiri dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add pagination for experiments [SCI-6656] * Fix sorting by time and time range columns [SCI-6683] (#4011) * Bump moment from 2.24.0 to 2.29.2 (#4006) Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.29.2. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.24.0...2.29.2) --- updated-dependencies: - dependency-name: moment dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Align items in assigned item section [SCI-6707] (#4007) * Add locking and unique index to repository row assigning [SCI-6591] (#3921) * tmp (#3935) * Revert "tmp (#3935)" (#4014) This reverts commit 043086d55fe0c7adeac528662e1433ccdb91aed0. * Move cursor to end of value when focusing consumption amount [SCI-6727] (#4013) * Fix removing stock reminder threshold [SCI-6724] (#4010) * Stock small ux fixes [SCI-6714] (#4015) Co-authored-by: Anton <anton@scinote.net> * Add aibility to delete stock column [SCI-6723] (#4017) Co-authored-by: Anton <anton@scinote.net> * Fix red dot for date reminders [SCI-6696] (#4016) Co-authored-by: Anton <anton@scinote.net> * Change the way setting stock works [SCI-6730] (#4018) * Fix error modal opening on successful snapshot [SCI-6726] (#4019) * Refactor and fix display of stock warnings and stock consumption [SCI-6734] (#4021) * Refactor and fix how stock consumption is displayed [SCI-6734] * Refactor and fix display of stock warnings [SCI-6734] * Fix stock consumption in reports [SCI-6735] * Fix markup * Focus authenticator code field [SCI-6716] (#4022) * Hide reminders settings and red dots if stock is disabled [SCI-6673] (#4024) * Fix decimals in stock consumption modal [SCI-6732] * Add edit title for stock consumption modal [SCI-6731] * Highlight negative stock in modal with red [SCI-6729] * Stock management test [SCI-6420] (#3946) * Initial test for stock management * Repository stock values adding [does not work] SCI-6420 * Fix typos SCI-6420 * Fix test [SCI-6420] * Test changes [SCI-6402] * Remove locking test [SCI-6420] * Remove lock [SCI-6420] * Remove serializer [SCI-6420] * Fix stock test and add ledger creation on consume [SCI-6420] * Fix inviting users to team [SCI-6725] (#4026) * Improve stock ledger records creation [SCI-6419] * Fix stock modal add/remove value preset value [SCI-6740] * API GET repository stock column output fix [SCI-6550] (#4030) * Add include stock unit items to Stock column get [SCI-6550] * Fix stock column test [SCI-6550] * Fix hound [SCI-6550] * Move list-type column includes to param, unify naming [SCI-6738] (#4036) * Add default includes for inventory columns with lists [SCI-6738] * Move list-type column includes to param, unify naming [SCI-6738] * Fix snapshot consumption display [SCI-6734] (#4035) * Fix decimal render function [SCI-6742] (#4037) Co-authored-by: Anton <anton@scinote.net> * Add comment to repository stock activities [SCI-6746] * Fix default stock column default units selection [SCI-6744] * Add negative validation for stock [SCI-6743] * Highlight negative value in consumption modal [SCI-6741] * Fix snapshot creation with stock consumption [SCI-6762] * Update stock value without reloading the table [SCI-6745] (#4041) * Allow tag creation on task level if you have permission [SCI-6573] (#4031) * Enable team normal user to edit repository files [SCI-6765] (#4049) * Add negative validation for treshold [SCI-6743] * Copy fix [SCI-6762] (#4048) * Add bell icon for negative stock [SCI-6770] * Fix formatting of stock consumption on tasks [SCI-6737] (#4050) * Fix duplicated inventories on tasks for export all [SCI-6776] * Stock / stock consumption display fixes [SCI-6771] (#4054) * Fix blank stock consumption representation in reports [SCI-6769] * Upgrade Rails to 6.1.5.1 * Show last page message only after second page [SCI-6761] * Small CSS fixes for repository [SCI-6767] * Added validations for date(time) column reminder [SCI-6775] (#4063) * Upgrade Ruby to 2.7.6 * Open repository on print view [SCI-6566] (#4055) * Fix saving of new date time columns with reminders [SCI-6774] (#4068) * Improve input field for adding new team [SCI-6155] * Allow deleteion of stock columns when stock management is disabled [SCI-6800] * Update default label template [SCI-6763] (#4064) * Stock editing and reminder fixes [SCI-6803] (#4078) * Fix stock editing after adding new value [SCI-6803] * Don't load reminders for snapshots [SCI-6803] * Improve loading time of canvas view/edit [SCI-6797] * Fix stock consumption rounding [SCI-6807] * Fix displaying of stock consumption units [SCI-6795] * Fix task dropdown actions [SCI-6817] * Fix archived tasks view [SCI-6822] * Fix display of repository snapshot with stock consumption [SCI-6824] * Fix duplicated counters on task card [SCI-6825] * Bump version to 1.25.0 Co-authored-by: Oleksii Kriuchykhin <okriuchykhin@biosistemika.com> Co-authored-by: aignatov-bio <47317017+aignatov-bio@users.noreply.github.com> Co-authored-by: Anton <anton@scinote.net> Co-authored-by: ajugo <andrej.jugovic7@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-11 16:39:51 +08:00
has_many :created_repository_stock_values,
class_name: 'RepositoryStockValue',
foreign_key: 'created_by_id',
inverse_of: :created_by,
dependent: :nullify
has_many :modified_repository_stock_values,
class_name: 'RepositoryStockValue',
foreign_key: 'last_modified_by_id',
inverse_of: :last_modified_by,
dependent: :nullify
has_many :user_notifications, inverse_of: :user
has_many :notifications, through: :user_notifications
has_many :user_system_notifications, dependent: :destroy
has_many :system_notifications, through: :user_system_notifications
2017-03-23 22:45:02 +08:00
has_many :zip_exports, inverse_of: :user, dependent: :destroy
has_many :datatables_teams, class_name: '::Views::Datatables::DatatablesTeam'
has_many :view_states, dependent: :destroy
2016-02-12 23:52:43 +08:00
2018-08-17 17:59:47 +08:00
has_many :access_grants, class_name: 'Doorkeeper::AccessGrant',
foreign_key: :resource_owner_id,
dependent: :delete_all
has_many :access_tokens, class_name: 'Doorkeeper::AccessToken',
foreign_key: :resource_owner_id,
dependent: :delete_all
Version 1.25.0 (#4087) * Add initial implementation of inventory stock management [SCI-6402] * Add stock column type (#3786) * Add stock column type * Create new stock column [SCI-6410] * Small fixed for stock column [SCI-6410] * Add stock column validations [SCI-6410] Co-authored-by: Anton <anton@scinote.net> * Add stock table renders [SCI-6412] (#3787) Co-authored-by: Anton <anton@scinote.net> * Implemented stock management modal [SCI-6417] (#3788) * Implement inventory stock management modal [SCI-6417] * Add generalized validation mechanic, some bugfixes [SCI-6417] * Fix permission check and method name in RepositoryStockValue [SCI-6417] * Add stock and consumption to assigned items section [SCI-6434] (#3793) * Added UPDATE_STOCK_CONSUMPTION to MyModule permissons [SCI-6418] (#3781) * Fix invalid return in reports jobs [SCI-6409] (#3777) * Added UPDATE_STOCK_CONSUMPTION to MyModule permissons [SCI-6418] * Add current/new amount section to stock [SCI-6416] (#3791) Co-authored-by: Anton <anton@scinote.net> * Task stock consumption modal[SCI-6444][SCI-6445] (#3798) Add main logic for consumption on task [SCI-6444] Co-authored-by: Anton <anton@scinote.net> * Add stock management columns to snapshots [SCI-6448] * Handle stock management in full table views [SCI-6440] * Implement stock management activities [SCI-6452] (#3810) * Implement stock management activities [SCI-6452] * PR code fixes [SCI-6452] * Implement import for repository stock values [SCI-6461] (#3818) * Add permissions checking to assigned items view on tasks [SCI-6435] (#3801) * Add front-end validation for comments field [SCI-6464] (#3829) Co-authored-by: Anton <anton@scinote.net> * Add stock consumption to pdf and docx [SCI-6460] (#3816) Co-authored-by: Anton <anton@scinote.net> * Add support of repository snapshots to assigned items section [SCI-6439] (#3828) * Change subject of Repository (#3838) * Fixed full view assigned items modal stock consumption (#3846) * Implement repository snapshots displaying on assigned items full view modal [SCI-6442] (#3862) * Implement low stock threshold column [SCI-6555] (#3907) * Stock column fixes [SCI-6455] (#3878) * Fix issues with stock column management [SCI-6455] * Refactor stock column in datatables [SCI-6455] * Fix tests [SCI-6486] (#3913) * Fix tests [SCI-6486] * Fix rspec tests [SCI-6486] Co-authored-by: Anton <anton@scinote.net> * Implement basic logic for Date/DateTime/Stock reminders [SCI-6554] (#3911) * Implement basic logic for Date/DateTime/Stock reminders [SCI-6554] * Implement bell icon [SCI-6500] * Refactor reminder cells scope [SCI-6554] * Add red dot for date/datetime reminder [SCI-6499] (#3924) Co-authored-by: Anton <anton@scinote.net> * Add reminders to stock modal [SCI-6557] (#3917) Co-authored-by: Anton <anton@scinote.net> * Add flyout for repository reminders [SCI-6501] (#3926) Co-authored-by: Anton <anton@scinote.net> * Fix moving experiment [SCI-6602] (#3927) * Update Rails to 6.1.4.7 [SCI-6615] (#3928) * Task inventory activity for assigned item consumption [SCI-6453] (#3830) * Add task inventory activity [SCI-6453] * Apply user's time zone in advanced filters for time data type [SCI-6585] (#3930) * Bump version to 1.24.2 * Implement hidden repository cell reminders [SCI-6504] (#3933) * Low stock flyout reminders [SCI-6502] (#3932) * Display low stock flyout reminder [SCI-6502] * Display low stock flyout reminder [SCI-6502] * Adapt showing stock reminders for every bell icon click [SCI-6502] * Correct hound error [SCI-6502] * Fix event registration for fetching reminder data [SCI-6502] * Fix event registration for fetching reminder data [SCI-6502] * Fix hound [SCI-6502] * Remove not needed line [SCI-6502] * Add reminder template [SCI-6502] * Add clearing messages [SCI-6502] * Displaying low stock warning [SCI-6497] (#3912) * Low stock warning [SCI-6497 * Fix some bugs [SCI-6497] * Fix to long line [SCI-6497] * Clean not needed information in renderes [SCI-6497] * Icon bell reminder for an assigned item on the task [SCI-6506] (#3929) * Add bell icon on assigned task [SCI-6506] * Add flyout and improve quering [SCI-6506] * Refactor repository toolbar [SCI-6545] (#3943) Co-authored-by: Anton <anton@scinote.net> * Add datetime reminders to columns modal [SCI-6556] (#3934) Co-authored-by: Anton <anton@scinote.net> * Hide reminders for archived repositories [SCI-6609] (#3941) * Hide reminders for archived repositories [SCI-6609] * Always pass repository in datatable helper [SCI-6609] * Handle locked stock consumption state [SCI-6608] (#3942) * Change env variable name for s3 bucket region [SCI-6603] (#3944) * Add last_transition_error column to tasks [SCI-6610] (#3949) * Add microtransactions to stock consumptions [SCI-6626] (#3948) Co-authored-by: Anton <anton@scinote.net> * Date remidner flyout [SCI-6503] (#3937) * Implement date reminder flyout [SCI-6503] * Show only days left for date reminder [SCI-6503] * Pluralize day in reminders [SCI-6503] * Create partials for different reminders [SCI-6503] * Unify css for reminder [SCI-6503] * Add micro interactions for stock modal [SCI-6625] (#3947) Co-authored-by: Anton <anton@scinote.net> * Hide options to add New Tags for users without permissions on Task level [SCI-6573] (#3945) * Bump lodash-es from 4.17.15 to 4.17.21 (#3939) Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.15 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.21) --- updated-dependencies: - dependency-name: lodash-es dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Implement clearing hidden repository reminders [SCI-6507] (#3936) * Add stock filters [SCI-6547] (#3938) Co-authored-by: Anton <anton@scinote.net> * Fix assign view for task repository [SCI-6648] (#3954) Co-authored-by: Anton <anton@scinote.net> * Add micro-interactions to reminders flyout [SCI-6627] (#3951) Co-authored-by: Anton <anton@scinote.net> * Improve error reporting in task status transition [SCI-6611] (#3952) * Add ordering to global search results [SCI-6639] (#3960) * Fix multiple stock bugs [SCI-6651] (#3959) Co-authored-by: Anton <anton@scinote.net> * Fix large previews for csv files [SCI-6619] (#3961) * Add alias to cell sort query, to prevent join conflicts [SCI-6649] (#3953) * Add alias to cell sort query, to prevent join conflicts [SCI-6649] * Added value_type to join condition to make use of DB index [SCI-6649] * Update front end validation for columns managment [SCI-6657] (#3962) Co-authored-by: Anton <anton@scinote.net> * Print protocol smart annotation and table improvements [SCI-6566] (#3925) * Improve table printing in the print menu [SCI-6566] * Open smart annotation in new tab for print view [SCI-6566] * Unify naming of same parameter [SCI-6566] * Fix typo [SCI-6566] * Fix hound errors [SCI-6566] * Add stock management toggling [SCI-6653] (#3967) Co-authored-by: Anton <anton@scinote.net> * Fix caching of an experiment card dropdown [SCI-6606] (#3963) * Add stock consumption permission to user roles [SCI-6665] (#3966) * Show archive icon only on archived projects in the header [SCI-6617] (#3965) * Fix assigned items fullview modal [SCI-6664] (#3968) * Implement hide all repository reminders button [SCI-6505] (#3940) * Viewer role does not see any tasks in archived project [SCI-6616] (#3958) * Fix viewer role not see any tasks in archived project [SCI-6616] * Fix rollback for add read archive permission migration [SCI-6616] * Stock modal bugs [SCI-6667] (#3970) Co-authored-by: Anton <anton@scinote.net> * Always use Tika text extractor in server mode [SCI-6658] (#3957) * Implement stock consumption via the API [SCI-6642] (#3964) * Implement stock consumption via the API [SCI-6642] * Remove unnecessary attribute from InventoryItemSerializer [SCI-6642] * Amend permission check, add nested transaction support to consume_stock method [SCI-6642] * Toolbar fixes [SCI-6670] (#3973) Co-authored-by: Anton <anton@scinote.net> * Make stock column work properly with different orders [SCI-6677] (#3974) * Fix filters loading for stock filter [SCI-6687] (#3975) Co-authored-by: Anton <anton@scinote.net> * Hide reminders and disable stock consumption for archived items [SCI-6689] (#3978) * Fix red dot for datetime columns [SCI-6684] (#3977) Co-authored-by: Anton <anton@scinote.net> * Fix saving of inventory date time reminders saving [SCI-6672] (#3976) * Bump puma from 5.6.2 to 5.6.4 (#3972) Bumps [puma](https://github.com/puma/puma) from 5.6.2 to 5.6.4. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v5.6.2...v5.6.4) --- updated-dependencies: - dependency-name: puma dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Don't load reminders if the stock feature is disabled [SCI-6673] (#3981) * Don't load reminders if the stock feature is disabled [SCI-6673] * Don't load reminders if the stock feature is disabled [SCI-6673] * Unify stock management enabled check [6673] * Update repository card view for stock [SCI-6685] (#3982) Co-authored-by: Anton <anton@scinote.net> * Disable stock managememnt for all tables in my module context [SCI-6692] (#3983) * Implement failed snapshot pop-up on task screen [SCI-6612] (#3950) * Implement failed snapshot pop-up on task screen [SCI-6612] * Copy change [SCI-6612] * Proper handling of snapshot transition error [SCI-6612] * Move modal auto open logic to JS file [SCI-6612] * Remove unnecessary .html_safe [SCI-6612] * Fix assigning and consuming items [SCI-6686] (#3985) * Repository toolbar CSS fixes [SCI-6676] (#3984) Co-authored-by: Anton <anton@scinote.net> * Add basic validation to reminder value to prevent integer overflow errors [SCI-6693] (#3986) * Fix reminder dropdown on task screen [SCI-6678] (#3987) Co-authored-by: Anton <anton@scinote.net> * Fix inventory sorting with date time reminders [SCI-6683] (#3980) * Fix css stock modal [SCI-6675] (#3989) Co-authored-by: Anton <anton@scinote.net> * Stock column management UX/UI fixes [SCI-6674] (#3979) * Fix red dot for dates in repository [SCI-6696] (#3991) Co-authored-by: Anton <anton@scinote.net> * Added styling for failed snapshots in sidebar [SCI-6636] (#3990) * Added styling for failed snapshots in sidebar [SCI-6636] * Simplify markup for failed icon [SCI-6636] * Turn off autocomplete for stock amount/reminder [SCI-6694] (#3988) * Override error styling in stock column management [SCI-6674] (#3995) * Fix repository full view tables without stock management [SCI-6703] (#3994) * Add pagination to projects list [SCI-6655] * Add reminder preset to date(time) reminders [SCI-6693] (#3996) * Fix color on consumption link [SCI-6686] (#3992) * Fix sorting by date time columns in inventories [SCI-6683] (#4002) * Improve loading of the dashboard [SCI-6618] (#4001) * Stock modal UX fixes [SCI-6714] (#3998) Co-authored-by: Anton <anton@scinote.net> * Fix css for stotck modal [SCI-6698] (#3999) Co-authored-by: Anton <anton@scinote.net> * API: add endpoint for updating of stock [SCI-6549] (#3955) * Add test for Stock repository cell [SCI-6549] * Create and update stock inventory cell [SCI-6549] * Fix hound errors [SCI-6549] * Fix ledger recording [SCI-6549] * Fix api endpoint [SCI-6549] * Fix hound [SCI-6549] * Fix collapsing of assigned items tables [SCI-6705] (#4000) * API: add endpoint for creating stock column [SCI-6550] (#3956) * Add test for repositoty stock column api [SCI-6550] * Create and update stock column [SCI-6550] * Change stock unit [SCI-6550] * Fix hound [SCI-6550] * Fix on delete [SCI-6550] * Fix houd [SCI-6550] * Removed autofocus clear on open reminder flyout [SCI-6690] (#4003) * Removed clear autofocus on open reminder flyout [SCI-6690] * Fix hound [SCI-6690] * Adding/changing stock consumption [SCI-6708] (#4005) * Adding/changing stock consumption [SCI-6708] * Fix hound [SCI-6708] * Remove date red dots for snapshots [SCI-6715] (#4004) Co-authored-by: Anton <anton@scinote.net> * Add snapshot error message below task status [SCI-6614] (#4009) * Add repository snapshot error modal [SCI-6613] (#3993) * Bump nokogiri from 1.13.3 to 1.13.4 (#4008) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.3 to 1.13.4. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/v1.13.4/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.3...v1.13.4) --- updated-dependencies: - dependency-name: nokogiri dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add pagination for experiments [SCI-6656] * Fix sorting by time and time range columns [SCI-6683] (#4011) * Bump moment from 2.24.0 to 2.29.2 (#4006) Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.29.2. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.24.0...2.29.2) --- updated-dependencies: - dependency-name: moment dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Align items in assigned item section [SCI-6707] (#4007) * Add locking and unique index to repository row assigning [SCI-6591] (#3921) * tmp (#3935) * Revert "tmp (#3935)" (#4014) This reverts commit 043086d55fe0c7adeac528662e1433ccdb91aed0. * Move cursor to end of value when focusing consumption amount [SCI-6727] (#4013) * Fix removing stock reminder threshold [SCI-6724] (#4010) * Stock small ux fixes [SCI-6714] (#4015) Co-authored-by: Anton <anton@scinote.net> * Add aibility to delete stock column [SCI-6723] (#4017) Co-authored-by: Anton <anton@scinote.net> * Fix red dot for date reminders [SCI-6696] (#4016) Co-authored-by: Anton <anton@scinote.net> * Change the way setting stock works [SCI-6730] (#4018) * Fix error modal opening on successful snapshot [SCI-6726] (#4019) * Refactor and fix display of stock warnings and stock consumption [SCI-6734] (#4021) * Refactor and fix how stock consumption is displayed [SCI-6734] * Refactor and fix display of stock warnings [SCI-6734] * Fix stock consumption in reports [SCI-6735] * Fix markup * Focus authenticator code field [SCI-6716] (#4022) * Hide reminders settings and red dots if stock is disabled [SCI-6673] (#4024) * Fix decimals in stock consumption modal [SCI-6732] * Add edit title for stock consumption modal [SCI-6731] * Highlight negative stock in modal with red [SCI-6729] * Stock management test [SCI-6420] (#3946) * Initial test for stock management * Repository stock values adding [does not work] SCI-6420 * Fix typos SCI-6420 * Fix test [SCI-6420] * Test changes [SCI-6402] * Remove locking test [SCI-6420] * Remove lock [SCI-6420] * Remove serializer [SCI-6420] * Fix stock test and add ledger creation on consume [SCI-6420] * Fix inviting users to team [SCI-6725] (#4026) * Improve stock ledger records creation [SCI-6419] * Fix stock modal add/remove value preset value [SCI-6740] * API GET repository stock column output fix [SCI-6550] (#4030) * Add include stock unit items to Stock column get [SCI-6550] * Fix stock column test [SCI-6550] * Fix hound [SCI-6550] * Move list-type column includes to param, unify naming [SCI-6738] (#4036) * Add default includes for inventory columns with lists [SCI-6738] * Move list-type column includes to param, unify naming [SCI-6738] * Fix snapshot consumption display [SCI-6734] (#4035) * Fix decimal render function [SCI-6742] (#4037) Co-authored-by: Anton <anton@scinote.net> * Add comment to repository stock activities [SCI-6746] * Fix default stock column default units selection [SCI-6744] * Add negative validation for stock [SCI-6743] * Highlight negative value in consumption modal [SCI-6741] * Fix snapshot creation with stock consumption [SCI-6762] * Update stock value without reloading the table [SCI-6745] (#4041) * Allow tag creation on task level if you have permission [SCI-6573] (#4031) * Enable team normal user to edit repository files [SCI-6765] (#4049) * Add negative validation for treshold [SCI-6743] * Copy fix [SCI-6762] (#4048) * Add bell icon for negative stock [SCI-6770] * Fix formatting of stock consumption on tasks [SCI-6737] (#4050) * Fix duplicated inventories on tasks for export all [SCI-6776] * Stock / stock consumption display fixes [SCI-6771] (#4054) * Fix blank stock consumption representation in reports [SCI-6769] * Upgrade Rails to 6.1.5.1 * Show last page message only after second page [SCI-6761] * Small CSS fixes for repository [SCI-6767] * Added validations for date(time) column reminder [SCI-6775] (#4063) * Upgrade Ruby to 2.7.6 * Open repository on print view [SCI-6566] (#4055) * Fix saving of new date time columns with reminders [SCI-6774] (#4068) * Improve input field for adding new team [SCI-6155] * Allow deleteion of stock columns when stock management is disabled [SCI-6800] * Update default label template [SCI-6763] (#4064) * Stock editing and reminder fixes [SCI-6803] (#4078) * Fix stock editing after adding new value [SCI-6803] * Don't load reminders for snapshots [SCI-6803] * Improve loading time of canvas view/edit [SCI-6797] * Fix stock consumption rounding [SCI-6807] * Fix displaying of stock consumption units [SCI-6795] * Fix task dropdown actions [SCI-6817] * Fix archived tasks view [SCI-6822] * Fix display of repository snapshot with stock consumption [SCI-6824] * Fix duplicated counters on task card [SCI-6825] * Bump version to 1.25.0 Co-authored-by: Oleksii Kriuchykhin <okriuchykhin@biosistemika.com> Co-authored-by: aignatov-bio <47317017+aignatov-bio@users.noreply.github.com> Co-authored-by: Anton <anton@scinote.net> Co-authored-by: ajugo <andrej.jugovic7@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-11 16:39:51 +08:00
has_many :hidden_repository_cell_reminders, dependent: :destroy
before_validation :downcase_email!
before_destroy :destroy_notifications
2016-02-12 23:52:43 +08:00
def name
full_name
end
def name=(name)
2017-07-06 15:07:05 +08:00
self.full_name = name
2016-02-12 23:52:43 +08:00
end
2018-02-26 18:05:05 +08:00
def avatar_remote_url=(url_value)
self.avatar = URI.parse(url_value)
# Assuming url_value is http://example.com/photos/face.png
# avatar.filename == "face.png"
# avatar.content_type == "image/png"
2018-02-26 18:05:05 +08:00
@avatar_remote_url = url_value
end
def avatar_variant(style)
2019-10-22 18:27:13 +08:00
return Constants::DEFAULT_AVATAR_URL.gsub(':style', style.to_s) unless avatar.attached?
format = case style.to_sym
when :medium
Constants::MEDIUM_PIC_FORMAT
when :thumb
Constants::THUMB_PIC_FORMAT
when :icon
Constants::ICON_PIC_FORMAT
when :icon_small
Constants::ICON_SMALL_PIC_FORMAT
else
Constants::ICON_SMALL_PIC_FORMAT
end
2019-09-12 23:21:48 +08:00
avatar.variant(resize_to_limit: format)
end
def avatar_url(style)
Rails.application.routes.url_helpers.url_for(avatar_variant(style))
end
def date_format
settings[:date_format] || Constants::DEFAULT_DATE_FORMAT
end
def date_format=(date_format)
return if settings[:date_format] == date_format
if Constants::SUPPORTED_DATE_FORMATS.include?(date_format)
settings[:date_format] = date_format
clear_view_cache
end
end
2017-08-03 22:03:15 +08:00
def current_team
Team.find_by_id(self.current_team_id)
end
2017-08-30 00:49:07 +08:00
def self.from_omniauth(auth)
includes(:user_identities)
.where(
'user_identities.provider=? AND user_identities.uid=?',
auth.provider,
auth.uid
)
.references(:user_identities)
.take
2016-02-12 23:52:43 +08:00
end
# Search all active users for username & email. Can
2017-01-24 23:34:21 +08:00
# also specify which team to ignore.
2016-02-12 23:52:43 +08:00
def self.search(
active_only,
query = nil,
2017-01-24 23:34:21 +08:00
team_to_ignore = nil
2016-02-12 23:52:43 +08:00
)
result = User.all
result = result.where.not(confirmed_at: nil) if active_only
2016-02-12 23:52:43 +08:00
2017-01-24 23:34:21 +08:00
if team_to_ignore.present?
ignored_ids = UserTeam.select(:user_id).where(team_id: team_to_ignore.id)
2021-10-28 18:58:42 +08:00
result = result.where.not(users: { id: ignored_ids })
2016-02-12 23:52:43 +08:00
end
result.where_attributes_like(%i(full_name email), query).distinct
2016-07-21 19:11:15 +08:00
end
2016-02-12 23:52:43 +08:00
# Whether user is active (= confirmed) or not
def active?
confirmed_at.present?
2016-02-12 23:52:43 +08:00
end
def active_status_str
if active?
2017-01-25 22:00:14 +08:00
I18n.t('users.enums.status.active')
2016-02-12 23:52:43 +08:00
else
2017-01-25 22:00:14 +08:00
I18n.t('users.enums.status.pending')
2016-02-12 23:52:43 +08:00
end
end
2017-01-24 23:34:21 +08:00
def projects_by_teams(team_id = 0, sort_by = nil, archived = false)
2016-02-12 23:52:43 +08:00
archived = archived ? true : false
2017-01-25 22:00:14 +08:00
query = Project.all.joins(:user_projects)
sql = 'projects.team_id IN (SELECT DISTINCT team_id ' \
'FROM user_teams WHERE user_teams.user_id = :user_id)'
2017-02-13 21:20:44 +08:00
if team_id.zero? || !user_teams.find_by(team_id: team_id).try(:admin?)
# Admins see all projects of team
sql += ' AND (projects.visibility=1 OR user_projects.user_id=:user_id)'
2016-02-12 23:52:43 +08:00
end
sql += ' AND projects.archived = :archived '
sort =
case sort_by
when 'old'
{ created_at: :asc }
when 'atoz'
{ name: :asc }
when 'ztoa'
{ name: :desc }
else
{ created_at: :desc }
end
2016-02-12 23:52:43 +08:00
2017-01-24 23:34:21 +08:00
if team_id > 0
2016-02-12 23:52:43 +08:00
result = query
2017-01-25 22:00:14 +08:00
.where('projects.team_id = ?', team_id)
2017-02-13 21:20:44 +08:00
.where(sql, user_id: id, archived: archived)
2017-01-25 22:00:14 +08:00
.order(sort)
.distinct
.group_by(&:team)
2016-02-12 23:52:43 +08:00
else
result = query
2017-02-13 21:20:44 +08:00
.where(sql, user_id: id, archived: archived)
2017-01-25 22:00:14 +08:00
.order(sort)
.distinct
.group_by(&:team)
2016-02-12 23:52:43 +08:00
end
result || []
end
# Finds all activities of user that is assigned to project. If user
# is not an owner of the project, user must be also assigned to
# module.
2017-12-14 21:02:40 +08:00
def last_activities
2016-02-12 23:52:43 +08:00
Activity
.joins(project: :user_projects)
2017-12-14 21:02:40 +08:00
.joins(
'LEFT OUTER JOIN my_modules ON activities.my_module_id = my_modules.id'
)
.joins(
'LEFT OUTER JOIN user_my_modules ON my_modules.id = ' \
'user_my_modules.my_module_id'
)
2016-02-12 23:52:43 +08:00
.where(user_projects: { user_id: self })
.where(
2017-12-14 21:02:40 +08:00
'activities.my_module_id IS NULL OR ' \
'user_projects.role = 0 OR ' \
2016-02-12 23:52:43 +08:00
'user_my_modules.user_id = ?',
id
)
.order(created_at: :desc)
end
2016-08-03 21:31:25 +08:00
def self.find_by_valid_wopi_token(token)
Rails.logger.warn "WOPI: searching by token #{token}"
User
2016-12-21 23:52:15 +08:00
.joins('LEFT OUTER JOIN tokens ON user_id = users.id')
.where(tokens: { token: token })
.where('tokens.ttl = 0 OR tokens.ttl > ?', Time.now.to_i)
.first
2016-08-03 21:31:25 +08:00
end
def get_wopi_token
2016-12-21 23:52:15 +08:00
# WOPI does not have a good way to request a new token,
# so a new token should be provided each time this is called,
# while keeping any old tokens as long as they have not yet expired
tokens = Token.where(user_id: id).distinct
2016-12-01 20:48:11 +08:00
2016-12-21 23:52:15 +08:00
tokens.each do |token|
token.delete if token.ttl < Time.now.to_i
end
2016-12-01 20:48:11 +08:00
2016-12-21 23:52:15 +08:00
token_string = "#{Devise.friendly_token(20)}-#{id}"
# WOPI uses millisecond TTLs
2016-12-08 18:12:24 +08:00
ttl = (Time.now + 1.day).to_i
wopi_token = Token.create(token: token_string, ttl: ttl, user_id: id)
Rails.logger.warn("WOPI: generating new token #{wopi_token.token}")
wopi_token
2016-08-03 21:31:25 +08:00
end
2017-01-24 23:34:21 +08:00
def teams_ids
teams.pluck(:id)
2016-10-25 02:07:20 +08:00
end
# Returns a hash with user statistics
def statistics
statistics = {}
2017-01-24 23:34:21 +08:00
statistics[:number_of_teams] = teams.count
statistics[:number_of_projects] = projects.count
number_of_experiments = 0
projects.find_each do |pr|
number_of_experiments += pr.experiments.count
end
statistics[:number_of_experiments] = number_of_experiments
statistics[:number_of_protocols] =
added_protocols.where(
protocol_type: Protocol.protocol_types.slice(
:in_repository_private,
:in_repository_public,
:in_repository_archived
).values
).count
statistics
end
def self.from_azure_jwt_token(token_payload)
includes(:user_identities)
.where(
'user_identities.provider=? AND user_identities.uid=?',
Rails.configuration.x.azure_ad_apps[token_payload[:aud]][:provider],
token_payload[:sub]
)
.references(:user_identities)
.take
end
def has_linked_account?(provider)
user_identities.where(provider: provider).exists?
end
# This method must be overwriten for addons that will be installed
def show_login_system_notification?
2019-02-27 20:55:46 +08:00
user_system_notifications.show_on_login.present? &&
(ENV['ENABLE_TUTORIAL'] != 'true' || settings['tutorial_completed'])
end
# json friendly attributes
NOTIFICATIONS_TYPES = %w(assignments_notification recent_notification
assignments_email_notification
recent_email_notification
system_message_email_notification)
# declare notifications getters
NOTIFICATIONS_TYPES.each do |name|
define_method(name) do
2017-10-05 19:56:56 +08:00
attr_name = name.gsub('_notification', '')
notifications_settings.fetch(attr_name.to_sym)
end
end
# declare notifications setters
NOTIFICATIONS_TYPES.each do |name|
define_method("#{name}=") do |value|
2017-10-05 19:56:56 +08:00
attr_name = name.gsub('_notification', '').to_sym
notifications_settings[attr_name] = value
end
end
2021-02-25 14:43:04 +08:00
def enabled_notifications_for?(notification_type, channel)
return true if %i(deliver deliver_error).include?(notification_type)
2021-02-25 14:43:04 +08:00
case channel
when :web
notification_type == :recent_changes && recent_notification ||
notification_type == :assignment && assignments_notification
when :email
notification_type == :recent_changes && recent_email_notification ||
notification_type == :assignment && assignments_email_notification
end
end
def increase_daily_exports_counter!
range = Time.now.utc.beginning_of_day.to_i..Time.now.utc.end_of_day.to_i
last_export = export_vars[:last_export_timestamp] || 0
export_vars[:num_of_export_all_last_24_hours] ||= 0
if range.cover?(last_export)
export_vars[:num_of_export_all_last_24_hours] += 1
else
export_vars[:num_of_export_all_last_24_hours] = 1
end
export_vars[:last_export_timestamp] = Time.now.utc.to_i
save
end
def has_available_exports?
last_export_timestamp = export_vars[:last_export_timestamp] || 0
# limit 0 means unlimited exports
return true if TeamZipExport.exports_limit.zero? || last_export_timestamp < Time.now.utc.beginning_of_day.to_i
exports_left.positive?
end
def exports_left
if (export_vars[:last_export_timestamp] || 0) < Time.now.utc.beginning_of_day.to_i
return TeamZipExport.exports_limit
end
TeamZipExport.exports_limit - export_vars[:num_of_export_all_last_24_hours]
end
def global_activity_filter(filters, search_query)
query_teams = teams.pluck(:id)
query_teams &= filters[:teams].map(&:to_i) if filters[:teams]
query_teams &= User.team_by_subject(filters[:subjects]) if filters[:subjects]
User.where(id: UserTeam.where(team_id: query_teams).select(:user_id))
.search(false, search_query)
.select(:full_name, :id)
2019-08-06 21:25:52 +08:00
.map { |i| { label: escape_input(i[:full_name]), value: i[:id] } }
end
def file_name
return '' unless avatar.attached?
avatar.blob&.filename&.sanitized
end
2020-06-30 20:16:00 +08:00
def valid_otp?(otp)
raise StandardError, 'Missing otp_secret' unless otp_secret
totp = ROTP::TOTP.new(otp_secret, issuer: 'sciNote')
totp.verify(
otp,
drift_behind: ENV.fetch('OTP_DRIFT_TIME_SECONDS', DEFAULT_OTP_DRIFT_TIME_SECONDS).to_i
)
2020-06-30 20:16:00 +08:00
end
2020-07-02 17:24:33 +08:00
def assign_2fa_token!
2020-07-01 21:44:52 +08:00
self.otp_secret = ROTP::Base32.random
2020-07-01 17:07:33 +08:00
save!
end
2020-07-01 21:44:52 +08:00
def enable_2fa!
2020-07-09 23:01:00 +08:00
recovery_codes = []
Constants::TWO_FACTOR_RECOVERY_CODE_COUNT.times do
recovery_codes.push(SecureRandom.hex(Constants::TWO_FACTOR_RECOVERY_CODE_LENGTH / 2))
end
2020-07-09 23:01:00 +08:00
update!(
two_factor_auth_enabled: true,
otp_recovery_codes: recovery_codes.map { |c| Devise::Encryptor.digest(self.class, c) }
)
recovery_codes
2020-07-01 20:41:55 +08:00
end
2020-07-01 21:44:52 +08:00
def disable_2fa!
2020-07-09 23:01:00 +08:00
update!(two_factor_auth_enabled: false, otp_secret: nil, otp_recovery_codes: nil)
end
def recover_2fa!(code)
return unless otp_recovery_codes
2020-07-09 23:01:00 +08:00
otp_recovery_codes.each do |recovery_code|
if Devise::Encryptor.compare(self.class, recovery_code, code)
2020-07-13 22:05:23 +08:00
update!(otp_recovery_codes: otp_recovery_codes.reject { |i| i == recovery_code })
2020-07-09 23:01:00 +08:00
return true
end
end
false
end
protected
2016-02-12 23:52:43 +08:00
def confirmation_required?
Rails.configuration.x.enable_email_confirmations
end
2016-02-12 23:52:43 +08:00
def time_zone_check
if time_zone.nil? ||
ActiveSupport::TimeZone.new(time_zone).nil?
2016-02-12 23:52:43 +08:00
errors.add(:time_zone)
end
end
2016-08-03 21:31:25 +08:00
private
def downcase_email!
return unless email
self.email = email.downcase
end
def destroy_notifications
# Find all notifications where user is the only reference
# on the notification, and destroy all such notifications
# (user_notifications are destroyed when notification is
# destroyed). We try to do this efficiently (hence in_groups_of).
nids_all = notifications.pluck(:id)
nids_all.in_groups_of(1000, false) do |nids|
Notification
.where(id: nids)
.joins(:user_notifications)
.group('notifications.id')
.having('count(notification_id) <= 1')
.destroy_all
end
2016-08-03 21:31:25 +08:00
# Now, simply destroy all user notification relations left
user_notifications.destroy_all
end
def clear_view_cache
Rails.cache.delete_matched(%r{^views\/users\/#{id}-})
end
2016-02-12 23:52:43 +08:00
end