scinote-web/app/assets/javascripts/my_modules/repositories.js
artoscinote 81a9a7225b
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 043086d55f.

* 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 10:39:51 +02:00

836 lines
30 KiB
JavaScript

/* eslint-disable no-param-reassign, no-use-before-define */
/* global DataTableHelpers PerfectScrollbar FilePreviewModal animateSpinner HelperModule
initAssignedTasksDropdown I18n prepareRepositoryHeaderForExport initReminderDropdown */
var MyModuleRepositories = (function() {
const FULL_VIEW_MODAL = $('#myModuleRepositoryFullViewModal');
const UPDATE_REPOSITORY_MODAL = $('#updateRepositoryRecordModal');
const STATUS_POLLING_INTERVAL = 10000;
var SIMPLE_TABLE;
var FULL_VIEW_TABLE;
var FULL_VIEW_TABLE_SCROLLBAR;
var SELECTED_ROWS = {};
function stockManagementColumns(withConsumption = true) {
let columns = [
{
visible: true,
searchable: false,
data: 'stock'
}
];
if (withConsumption) {
columns = columns.concat([{
visible: true,
searchable: false,
data: 'consumedStock'
}]);
}
return columns;
}
function stockManagementColumnDefs(withConsumption = true) {
let columns = [
{
targets: 'row-stock',
className: 'item-stock',
sWidth: '1%',
render: function(data) {
return $.fn.dataTable.render.RepositoryStockValue(data);
}
}
];
if (withConsumption) {
columns = columns.concat([{
targets: 'row-consumption',
className: 'item-consumed-stock',
sWidth: '1%',
render: function(data) {
return $.fn.dataTable.render.RepositoryStockConsumptionValue(data);
}
}]);
}
return columns;
}
function reloadRepositoriesList(repositoryId, expand = false) {
var repositoriesContainer = $('#assigned-items-container');
$.get(repositoriesContainer.data('repositories-list-url'), function(result) {
repositoriesContainer.html(result.html);
$('.assigned-items-title').attr('data-assigned-items-count', result.assigned_rows_count);
// expand recently updated repository
if (expand) {
$('#assigned-items-container').collapse('show');
$('#assigned-repository-items-container-' + repositoryId).collapse('show');
}
});
}
function tableColumns(tableContainer, skipCheckbox = false) {
var columns = $(tableContainer).data('default-table-columns');
var customColumns = $(tableContainer).find('thead th[data-type]');
for (let i = 0; i < columns.length; i += 1) {
columns[i].data = String(i);
columns[i].defaultContent = '';
if (skipCheckbox && i === 0) columns[i].visible = false;
}
customColumns.each((i, column) => {
columns.push({
visible: true,
searchable: true,
data: column.dataset.type === 'RepositoryStockValue' ? 'stock' : String(columns.length),
defaultContent: $.fn.dataTable.render['default' + column.dataset.type](column.id)
});
});
if ($(tableContainer).data('stock-consumption-column')) {
columns.push({
visible: true,
searchable: false,
data: 'consumedStock'
});
}
return columns;
}
function fullViewColumnDefs(tableContainer) {
let columnDefs = [{
targets: 0,
visible: true,
searchable: false,
orderable: false,
className: 'dt-body-center',
sWidth: '1%',
render: function(data) {
var checked = data ? 'checked' : '';
return `<div class="sci-checkbox-container">
<input class='repository-row-selector sci-checkbox' type='checkbox' ${checked}>
<span class='sci-checkbox-label'></span>
</div>`;
}
}];
if (FULL_VIEW_MODAL.find('.table').data('type') === 'live') {
columnDefs.push({
targets: 1,
searchable: false,
className: 'assigned-column',
sWidth: '1%',
render: function(data, type, row) {
return $.fn.dataTable.render.AssignedTasksValue(data, row);
}
}, {
targets: 3,
className: 'item-name',
render: function(data, type, row) {
return "<a href='" + row.recordInfoUrl + "' class='record-info-link'>" + data + '</a>';
}
});
} else {
columnDefs.push({
targets: 2,
className: 'item-name'
});
}
if ($(tableContainer).data('stock-management')) {
columnDefs = columnDefs.concat(
stockManagementColumnDefs(
$(tableContainer).data('stock-consumption-column')
)
);
}
columnDefs.push(
{
targets: '_all',
render: function(data) {
if (typeof data === 'object' && $.fn.dataTable.render[data.value_type]) {
return $.fn.dataTable.render[data.value_type](data);
}
if (data !== undefined && data.stock_present !== undefined) {
return $.fn.dataTable.render.RepositoryStockConsumptionValue(data);
}
return data;
}
}
);
return columnDefs;
}
function simpleTableColumns(tableContainer) {
let columns = [
{
visible: true,
searchable: false,
data: 0
}
];
if ($(tableContainer).data('stock-management')) {
columns = columns.concat(stockManagementColumns());
}
return columns;
}
function simpleViewColumnDefs(tableContainer) {
let columnDefs = [{
targets: 0,
className: 'item-name',
render: function(data, type, row) {
var recordName = "<a href='" + row.recordInfoUrl + "'"
+ "class='record-info-link'>" + data + '</a>';
if (row.hasActiveReminders) {
recordName = `<div class="dropdown row-reminders-dropdown"
data-row-reminders-url="${row.rowRemindersUrl}" tabindex='-1'>
<i class="fas fa-bell dropdown-toggle row-reminders-icon"
data-toggle="dropdown" id="rowReminders${row.DT_RowId}}"></i>
<ul class="dropdown-menu" role="menu" aria-labelledby="rowReminders${row.DT_RowId}">
</ul>
</div>` + recordName;
}
return recordName;
}
}];
if ($(tableContainer).data('stock-management')) {
columnDefs = columnDefs.concat(stockManagementColumnDefs());
}
return columnDefs;
}
function renderSimpleTable(tableContainer) {
if (SIMPLE_TABLE) SIMPLE_TABLE.destroy();
SIMPLE_TABLE = $(tableContainer).DataTable({
dom: "Rt<'pagination-row'<'version-label'><'pagination-actions'p>>",
processing: true,
serverSide: true,
responsive: true,
pageLength: 5,
order: [[0, 'asc']],
sScrollY: '100%',
sScrollX: '100%',
sScrollXInner: '100%',
destroy: true,
ajax: {
url: $(tableContainer).data('source'),
contentType: 'application/json',
data: function(d) {
d.order[0].column = tableContainer.data('name-column-id');
d.assigned = 'assigned';
d.view_mode = true;
d.simple_view = true;
return JSON.stringify(d);
},
global: false,
type: 'POST'
},
columns: simpleTableColumns(tableContainer),
columnDefs: simpleViewColumnDefs(tableContainer),
drawCallback: function() {
var repositoryContainer = $(this).closest('.assigned-repository-container');
var simpleViewTableScrollbar = new PerfectScrollbar($(tableContainer).closest('.dataTables_scrollBody')[0]);
repositoryContainer.find('.table.dataTable').removeClass('hidden');
repositoryContainer.find('.version-label').html(tableContainer.data('version-label'));
SIMPLE_TABLE.columns.adjust();
},
createdRow: function(row, data) {
$(row).find('.item-name').attr('data-state', data.DT_RowAttr['data-state']);
},
fnInitComplete: function() {
initReminderDropdown(tableContainer);
}
});
}
function reloadSimpleTable() {
if (!SIMPLE_TABLE) return;
SIMPLE_TABLE.ajax.reload(null, false);
}
function renderFullViewTable(tableContainer, options = {}) {
if (FULL_VIEW_TABLE) FULL_VIEW_TABLE.destroy();
SELECTED_ROWS = {};
FULL_VIEW_TABLE_SCROLLBAR = false;
FULL_VIEW_TABLE = $(tableContainer).DataTable({
dom: "R<'main-actions hidden'<'toolbar'><'filter-container'f>>t<'pagination-row hidden'<'pagination-info'li><'pagination-actions'p>>",
processing: true,
stateSave: true,
serverSide: true,
order: $(tableContainer).data('default-order'),
pageLength: 25,
sScrollX: '100%',
sScrollXInner: '100%',
stateDuration: 0,
destroy: true,
ajax: {
url: $(tableContainer).data('source'),
contentType: 'application/json',
data: function(d) {
if (options.assigned) d.assigned = 'assigned';
d.view_mode = true;
return JSON.stringify(d);
},
global: false,
type: 'POST'
},
columns: tableColumns(tableContainer, options.skipCheckbox),
columnDefs: fullViewColumnDefs(tableContainer),
fnInitComplete: function() {
var dataTableWrapper = $(tableContainer).closest('.dataTables_wrapper');
DataTableHelpers.initLengthAppearance(dataTableWrapper);
DataTableHelpers.initSearchField(dataTableWrapper, I18n.t('repositories.show.filter_inventory_items'));
$('<img class="barcode-scanner" src="/images/icon_small/barcode.png"></img>').appendTo($('.search-container'));
dataTableWrapper.find('.main-actions, .pagination-row').removeClass('hidden');
if (options.assign_mode) {
renderFullViewAssignButtons();
} else {
$('.table-container .toolbar').html($('#repositoryToolbarButtonsTemplate').html());
if (FULL_VIEW_MODAL.find('.modal-content').hasClass('show-sidebar')) {
FULL_VIEW_MODAL.find('#showVersionsSidebar').addClass('active');
}
}
initAssignedTasksDropdown(tableContainer);
initReminderDropdown(tableContainer);
},
drawCallback: function() {
FULL_VIEW_TABLE.columns.adjust();
renderFullViewRepositoryName(
tableContainer.attr('data-repository-name'),
tableContainer.attr('data-repository-snapshot-created'),
options.assign_mode
);
updateFullViewRowsCount(tableContainer.attr('data-assigned-items-count'));
if (FULL_VIEW_TABLE_SCROLLBAR) {
FULL_VIEW_TABLE_SCROLLBAR.update();
} else {
FULL_VIEW_TABLE_SCROLLBAR = new PerfectScrollbar(
$(tableContainer).closest('.dataTables_scrollBody')[0],
{
wheelSpeed: 0.5,
minScrollbarLength: 20
}
);
}
},
stateLoadCallback: function(settings, callback) {
var loadStateUrl = $(tableContainer).data('load-state-url');
$.post(loadStateUrl, function(json) {
if (!options.assign_mode) {
json.state.columns[0].visible = false;
}
if ($(tableContainer).data('type') !== 'snapshot') {
json.state.columns[6].visible = false;
json.state.columns[7].visible = false;
}
if (json.state.search) delete json.state.search;
callback(json.state);
});
},
rowCallback: function(row) {
var checkbox = $(row).find('.repository-row-selector');
if (SELECTED_ROWS[row.id]) {
$(row).addClass('selected');
checkbox.attr('checked', !checkbox.attr('checked'));
}
},
createdRow: function(row, data) {
$(row).find('.item-name').attr('data-state', data.DT_RowAttr['data-state']);
}
});
}
function setSelectedItem() {
let versionsSidebar = FULL_VIEW_MODAL.find('.repository-versions-sidebar');
let currentId = FULL_VIEW_MODAL.find('.table').data('id');
versionsSidebar.find('.list-group-item').removeClass('active');
versionsSidebar.find(`[data-id="${currentId}"]`).addClass('active');
if (versionsSidebar.find(`[data-id="${currentId}"]`).attr('data-selected') == 'false') {
$('#setDefaultVersionButton').parent().removeClass('hidden');
} else {
$('#setDefaultVersionButton').parent().addClass('hidden');
}
}
function reloadTable(tableUrl) {
animateSpinner(null, true);
$.getJSON(tableUrl, (data) => {
FULL_VIEW_MODAL.find('.table-container').html(data.html);
renderFullViewTable(FULL_VIEW_MODAL.find('.table'), { assigned: true, skipCheckbox: true });
setSelectedItem();
animateSpinner(null, false);
});
}
function initSelectAllCheckbox() {
FULL_VIEW_MODAL.on('click', 'input.select-all', function() {
var selectAllCheckbox = $(this);
var rows = FULL_VIEW_MODAL.find('.dataTables_scrollBody tbody tr');
$.each(rows, function(i, row) {
var checkbox = $(row).find('.repository-row-selector');
if (checkbox.prop('checked') === selectAllCheckbox.prop('checked')) return;
checkbox.prop('checked', !checkbox.prop('checked'));
selectFullViewRow(row);
});
});
}
function refreshSelectAllCheckbox() {
var checkboxes = FULL_VIEW_MODAL.find('.dataTables_scrollBody .repository-row-selector');
var selectedCheckboxes = FULL_VIEW_MODAL.find('.dataTables_scrollBody .repository-row-selector:checked');
var selectAllCheckbox = FULL_VIEW_MODAL.find('input.select-all');
selectAllCheckbox.prop('indeterminate', false);
if (selectedCheckboxes.length === 0) {
selectAllCheckbox.prop('checked', false);
} else if (selectedCheckboxes.length === checkboxes.length) {
selectAllCheckbox.prop('checked', true);
} else {
selectAllCheckbox.prop('indeterminate', true);
}
}
function checkSnapshotStatus(snapshotItem) {
$.getJSON(snapshotItem.data('status-url'), (statusData) => {
if (statusData.status !== 'provisioning') {
$.getJSON(snapshotItem.data('version-item-url'), (itemData) => {
snapshotItem.replaceWith(itemData.html);
if (statusData.status === 'failed') {
$('#snapshot-error-' + itemData.repository_id).modal('show');
}
});
} else {
setTimeout(function() {
checkSnapshotStatus(snapshotItem);
}, STATUS_POLLING_INTERVAL);
}
});
}
function initSimpleTable() {
$('#assigned-items-container').on('shown.bs.collapse', '.assigned-repository-container', function() {
var repositoryContainer = $(this);
var repositoryTable = repositoryContainer.find('.table');
var initializedTable = repositoryContainer.find('.dataTables_wrapper table');
// do not try to re-initialized already initialized table
if (initializedTable.length) {
initializedTable.DataTable().columns.adjust();
return;
}
repositoryTable.attr('data-source', $(this).data('repository-url'));
repositoryTable.attr('data-version-label', $(this).data('footer-label'));
repositoryTable.attr('data-name-column-id', $(this).data('name-column-id'));
repositoryTable.attr('data-stock-management', $(this).data('data-stock-management'));
repositoryContainer.html(repositoryTable);
renderSimpleTable(repositoryTable);
});
$('#wrapper').on('sideBar::shown sideBar::hidden', function() {
if (SIMPLE_TABLE) {
SIMPLE_TABLE.columns.adjust();
}
});
}
function initVersionsStatusCheck() {
let sidebar = FULL_VIEW_MODAL.find('.repository-versions-sidebar');
sidebar.find('.repository-snapshot-item.provisioning').each(function() {
var snapshotItem = $(this);
setTimeout(function() {
checkSnapshotStatus(snapshotItem);
}, STATUS_POLLING_INTERVAL);
});
}
function refreshCreationSnapshotInfoText() {
var snapshotsCount = FULL_VIEW_MODAL.find('.repository-snapshot-item').length;
var createSnapshotInfo = FULL_VIEW_MODAL.find('.create-snapshot-item .info');
if (snapshotsCount) {
createSnapshotInfo.addClass('hidden');
} else {
createSnapshotInfo.removeClass('hidden');
}
}
function initVersionsSidebarActions() {
FULL_VIEW_MODAL.on('click', '#showVersionsSidebar', function(e) {
$(this).toggleClass('active');
if ($(this).hasClass('active')) {
$.getJSON(FULL_VIEW_MODAL.find('.table').data('versions-sidebar-url'), (data) => {
var snapshotsItemsScrollBar;
FULL_VIEW_MODAL.find('.repository-versions-sidebar').html(data.html);
snapshotsItemsScrollBar = new PerfectScrollbar(
FULL_VIEW_MODAL.find('.repository-snapshots-container')[0]
);
setSelectedItem();
FULL_VIEW_MODAL.find('.modal-content').addClass('show-sidebar');
initVersionsStatusCheck();
snapshotsItemsScrollBar.update();
FULL_VIEW_TABLE.columns.adjust();
});
} else {
FULL_VIEW_MODAL.find('#collapseVersionsSidebar').click();
}
e.stopPropagation();
});
FULL_VIEW_MODAL.on('click', '#createRepositorySnapshotButton', function(e) {
animateSpinner(null, true);
$.ajax({
url: $(this).data('action-path'),
type: 'POST',
dataType: 'json',
success: function(data) {
let snapshotItem = $(data.html);
FULL_VIEW_MODAL.find('.snapshots-container-scrollbody').prepend(snapshotItem);
setTimeout(function() {
checkSnapshotStatus(snapshotItem);
}, STATUS_POLLING_INTERVAL);
animateSpinner(null, false);
refreshCreationSnapshotInfoText();
}
});
e.stopPropagation();
});
FULL_VIEW_MODAL.on('click', '.delete-snapshot-button', function(e) {
let snapshotItem = $(this).closest('.repository-snapshot-item');
animateSpinner(null, true);
$.ajax({
url: $(this).data('action-path'),
type: 'DELETE',
dataType: 'json',
success: function() {
if (snapshotItem.data('id') === FULL_VIEW_MODAL.find('.table').data('id')) {
reloadTable(FULL_VIEW_MODAL.find('#selectLiveVersionButton').data('table-url'));
}
snapshotItem.remove();
animateSpinner(null, false);
refreshCreationSnapshotInfoText();
}
});
e.stopPropagation();
});
FULL_VIEW_MODAL.on('click', '.select-snapshot-button', function(e) {
reloadTable($(this).data('table-url'));
e.stopPropagation();
});
FULL_VIEW_MODAL.on('click', '.repository-snapshot-item', function(e) {
var snapshotButton = $(this).find('.select-snapshot-button');
if (!snapshotButton.hasClass('disabled')) {
snapshotButton.click();
}
e.stopPropagation();
});
FULL_VIEW_MODAL.on('click', '#selectLiveVersionButton', function(e) {
reloadTable(FULL_VIEW_MODAL.find('#selectLiveVersionButton').data('table-url'));
e.stopPropagation();
});
FULL_VIEW_MODAL.on('click', '#collapseVersionsSidebar', function(e) {
FULL_VIEW_MODAL.find('.modal-content').removeClass('show-sidebar');
FULL_VIEW_MODAL.find('#showVersionsSidebar').removeClass('active');
FULL_VIEW_TABLE.columns.adjust();
e.stopPropagation();
});
FULL_VIEW_MODAL.on('click', '#setDefaultVersionButton', function(e) {
let data;
animateSpinner(null, true);
if (FULL_VIEW_MODAL.find('.table').data('type') === 'live') {
data = { repository_id: FULL_VIEW_MODAL.find('.table').data('id') };
} else {
data = { repository_snapshot_id: FULL_VIEW_MODAL.find('.table').data('id') };
}
$.ajax({
url: $(this).data('select-path'),
type: 'POST',
dataType: 'json',
data: data,
success: function() {
let versionsList = FULL_VIEW_MODAL.find('.repository-versions-list');
versionsList.find('.list-group-item').attr('data-selected', false);
versionsList.find('.list-group-item.active').attr('data-selected', true);
$('#setDefaultVersionButton').parent().addClass('hidden');
reloadRepositoriesList(FULL_VIEW_MODAL.find('.table').data('id'));
animateSpinner(null, false);
}
});
e.stopPropagation();
});
FULL_VIEW_MODAL.on('hidden.bs.modal', function() {
FULL_VIEW_MODAL.find('.repository-versions-sidebar').empty();
FULL_VIEW_MODAL.find('.modal-content').removeClass('show-sidebar');
FULL_VIEW_MODAL.find('#showVersionsSidebar').removeClass('active');
FULL_VIEW_TABLE.destroy();
});
FULL_VIEW_MODAL.on('show.bs.modal', function() {
FULL_VIEW_MODAL.find('.table-container').empty();
FULL_VIEW_MODAL.find('.repository-title').empty();
FULL_VIEW_MODAL.find('.repository-version').empty();
updateFullViewRowsCount('');
});
}
function initRepositoryFullView() {
$('#assigned-items-container').on('click', '.action-buttons .full-screen', function(e) {
var repositoryNameObject = $(this).closest('.assigned-repository-caret')
.find('.assigned-repository-title');
renderFullViewRepositoryName(repositoryNameObject.text());
FULL_VIEW_MODAL.modal('show');
$.getJSON($(this).data('table-url'), (data) => {
FULL_VIEW_MODAL.find('.table-container').html(data.html);
renderFullViewTable(FULL_VIEW_MODAL.find('.table'), { assigned: true, skipCheckbox: true });
FULL_VIEW_MODAL.focus();
});
e.stopPropagation();
});
}
function initRepositoriesDropdown() {
$('.repositories-assign-container').on('show.bs.dropdown', function() {
var dropdownContainer = $(this);
$.getJSON(dropdownContainer.data('repositories-url'), function(result) {
dropdownContainer.find('.repositories-dropdown-menu').html(result.html);
});
});
}
function selectFullViewRow(row) {
var id = row.id;
if (!SELECTED_ROWS[id]) {
SELECTED_ROWS[id] = {
row_name: $(row).find('.record-info-link').text(),
assigned: $(row).find('.repository-row-selector').prop('checked')
};
} else {
delete SELECTED_ROWS[id];
}
$(row).toggleClass('selected');
if (Object.keys(SELECTED_ROWS).length) {
$('.assign-button').attr('disabled', false);
} else {
$('.assign-button').attr('disabled', true);
}
refreshSelectAllCheckbox();
}
function renderFullViewAssignButtons() {
var toolbar = FULL_VIEW_MODAL.find('.dataTables_wrapper .toolbar');
toolbar.empty();
if (parseInt(FULL_VIEW_MODAL.data('rows-count'), 10) === 0) {
toolbar.append($('#my-module-repository-full-view-assign-button').html());
toolbar.append($('#my-module-repository-full-view-assign-downstream-button').html());
} else {
toolbar.append($('#my-module-repository-full-view-update-button').html());
toolbar.append($('#my-module-repository-full-view-update-downstream-button').html());
}
}
function updateFullViewRowsCount(value) {
FULL_VIEW_MODAL.data('rows-count', value);
FULL_VIEW_MODAL.find('.repository-version').attr('data-rows-count', value);
}
function renderFullViewRepositoryName(name, snapshotDate, assignMode) {
var title;
var version;
var repositoryName = name || FULL_VIEW_MODAL.find('.repository-title').data('repository-name');
if (assignMode) {
title = I18n.t('my_modules.repository.full_view.assign_modal_header', {
repository_name: repositoryName
});
version = '';
} else if (snapshotDate) {
title = repositoryName;
version = I18n.t('my_modules.repository.full_view.modal_snapshot_header', {
snapshot_date: snapshotDate
});
} else {
title = repositoryName;
version = I18n.t('my_modules.repository.full_view.modal_live_header');
}
FULL_VIEW_MODAL.find('.repository-title').data('repository-name', repositoryName);
FULL_VIEW_MODAL.find('.repository-title').html(title);
FULL_VIEW_MODAL.find('.repository-version').html(version);
}
function initRepositoryAssignView() {
$('.repositories-dropdown-menu').on('click', '.repository', function(e) {
var assignUrlModal = $(this).data('assign-url-modal');
var updateUrlModal = $(this).data('update-url-modal');
FULL_VIEW_MODAL.modal('show');
$.get($(this).data('table-url'), (data) => {
FULL_VIEW_MODAL.find('.table-container').html(data.html);
FULL_VIEW_MODAL.data('assign-url-modal', assignUrlModal);
FULL_VIEW_MODAL.data('update-url-modal', updateUrlModal);
renderFullViewTable(FULL_VIEW_MODAL.find('.table'), { assign_mode: true });
});
e.stopPropagation();
});
FULL_VIEW_MODAL.on('click', '.table tbody tr', function() {
var checkbox = $(this).find('.repository-row-selector');
checkbox.prop('checked', !checkbox.prop('checked'));
selectFullViewRow(this);
}).on('click', '.table tbody tr .repository-row-selector', function(e) {
selectFullViewRow($(this).closest('tr')[0]);
e.stopPropagation();
}).on('click', '#assignRepositoryRecords', function() {
openAssignRecordsModal();
}).on('click', '#assignRepositoryRecordsDownstream', function() {
openAssignRecordsModal(true);
})
.on('click', '#updateRepositoryRecords', function() {
openUpdateRecordsModal();
})
.on('click', '#updateRepositoryRecordsDownstream', function() {
openUpdateRecordsModal(true);
});
UPDATE_REPOSITORY_MODAL.on('click', '.downstream-action', function() {
submitUpdateRepositoryRecord({ downstream: true });
}).on('click', '.task-action', function() {
submitUpdateRepositoryRecord({ downstream: false });
}).on('hidden.bs.modal', function() {
FULL_VIEW_MODAL.focus();
}).on('click', '.next-step', function() {
UPDATE_REPOSITORY_MODAL.find('.next-step, .description-1, .rows-list-container').addClass('hidden');
UPDATE_REPOSITORY_MODAL.find('.description-2, .my-modules-to-assign, .hidden-my-modules, .downstream-action').removeClass('hidden');
});
}
function openUpdateRecordsModal(downstream) {
var updateUrl = FULL_VIEW_MODAL.data('update-url-modal');
$.get(updateUrl, { selected_rows: SELECTED_ROWS, downstream: downstream }, function(data) {
var assignList;
var assignListScrollbar;
var unassignList;
var unassignListScrollbar;
UPDATE_REPOSITORY_MODAL.find('.modal-content').html(data.html);
UPDATE_REPOSITORY_MODAL.data('update-url', data.update_url);
assignList = UPDATE_REPOSITORY_MODAL.find('.rows-to-assign .rows-list')[0];
unassignList = UPDATE_REPOSITORY_MODAL.find('.rows-to-unassign .rows-list')[0];
if (assignList) assignListScrollbar = new PerfectScrollbar(assignList);
if (unassignList) unassignListScrollbar = new PerfectScrollbar(unassignList);
UPDATE_REPOSITORY_MODAL.modal('show');
if (assignList) assignListScrollbar.update();
if (unassignList) unassignListScrollbar.update();
});
}
function openAssignRecordsModal(downstream) {
var assignUrl = FULL_VIEW_MODAL.data('assign-url-modal');
$.get(assignUrl, { selected_rows: SELECTED_ROWS, downstream: downstream }, function(data) {
UPDATE_REPOSITORY_MODAL.find('.modal-content').html(data.html);
UPDATE_REPOSITORY_MODAL.data('update-url', data.update_url);
UPDATE_REPOSITORY_MODAL.modal('show');
});
}
function submitUpdateRepositoryRecord(options = {}) {
var rowsToAssign = [];
var rowsToUnassign = [];
$.each(Object.keys(SELECTED_ROWS), function(i, rowId) {
if (SELECTED_ROWS[rowId].assigned) {
rowsToAssign.push(rowId);
} else {
rowsToUnassign.push(rowId);
}
});
$.ajax({
url: UPDATE_REPOSITORY_MODAL.data('update-url'),
type: 'PATCH',
dataType: 'json',
data: {
rows_to_assign: rowsToAssign,
rows_to_unassign: rowsToUnassign,
downstream: options.downstream
},
success: function(data) {
UPDATE_REPOSITORY_MODAL.modal('hide');
HelperModule.flashAlertMsg(data.flash, 'success');
SELECTED_ROWS = {};
$(FULL_VIEW_TABLE.table().container()).find('.dataTable')
.attr('data-assigned-items-count', data.rows_count);
FULL_VIEW_TABLE.ajax.reload(null, false);
reloadRepositoriesList(data.repository_id, true);
updateFullViewRowsCount(data.rows_count);
renderFullViewAssignButtons();
},
error: function(response) {
if (response.status === 403) {
HelperModule.flashAlertMsg(I18n.t('general.no_permissions'), 'danger');
} else {
HelperModule.flashAlertMsg(response.responseJSON.flash, 'danger');
}
UPDATE_REPOSITORY_MODAL.modal('hide');
SELECTED_ROWS = {};
FULL_VIEW_TABLE.ajax.reload(null, false);
}
});
}
function initExportAssignedRows() {
FULL_VIEW_MODAL.on('click', '#exportAssignedItems', function() {
var headerIds = [];
$(FULL_VIEW_TABLE.table().container()).find('.dataTables_scrollHead thead tr th').each(function() {
headerIds.push(prepareRepositoryHeaderForExport($(this)));
});
$.post($(FULL_VIEW_TABLE.table().container()).find('.dataTable').data('export-url'), {
header_ids: headerIds
}, function(response) {
HelperModule.flashAlertMsg(response.message, 'success');
}).error((response) => {
HelperModule.flashAlertMsg(response.responseJSON.message, 'danger');
});
});
}
return {
init: () => {
initSimpleTable();
initRepositoryFullView();
initRepositoriesDropdown();
initVersionsSidebarActions();
initRepositoryAssignView();
initSelectAllCheckbox();
initExportAssignedRows();
},
reloadSimpletable: () => {
reloadSimpleTable();
},
reloadFullViewTable: () => {
if (!FULL_VIEW_TABLE) return;
FULL_VIEW_TABLE.ajax.reload(null, false);
}
};
}());
MyModuleRepositories.init();