Files
crm.clientright.ru/layouts/vlayout/modules/CustomView/resources/CustomView.js
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

291 lines
10 KiB
JavaScript

/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
var Vtiger_CustomView_Js = {
contentsCotainer : false,
columnListSelect2Element : false,
advanceFilterInstance : false,
//This will store the columns selection container
columnSelectElement : false,
//This will store the input hidden selectedColumnsList element
selectedColumnsList : false,
loadFilterView : function(url) {
var progressIndicatorElement = jQuery.progressIndicator();
AppConnector.request(url).then(
function(data){
app.hideModalWindow();
var contents = jQuery(".contentsDiv").html(data);
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
Vtiger_CustomView_Js.registerEvents();
Vtiger_CustomView_Js.advanceFilterInstance = Vtiger_AdvanceFilter_Js.getInstance(jQuery('.filterContainer',contents));
},
function(error,err){
}
);
},
loadDateFilterValues : function(){
var selectedDateFilter = jQuery('#standardDateFilter option:selected');
var currentDate = selectedDateFilter.data('currentdate');
var endDate = selectedDateFilter.data('enddate');
jQuery("#standardFilterCurrentDate").val(currentDate);
jQuery("#standardFilterEndDate").val(endDate);
},
/**
* Function to get the contents container
* @return : jQuery object of contents container
*/
getContentsContainer : function() {
if(Vtiger_CustomView_Js.contentsCotainer == false) {
Vtiger_CustomView_Js.contentsCotainer = jQuery('div.contentsDiv');
}
return Vtiger_CustomView_Js.contentsCotainer;
},
getColumnListSelect2Element : function() {
return Vtiger_CustomView_Js.columnListSelect2Element;
},
/**
* Function to get the view columns selection element
* @return : jQuery object of view columns selection element
*/
getColumnSelectElement : function() {
if(Vtiger_CustomView_Js.columnSelectElement == false) {
Vtiger_CustomView_Js.columnSelectElement = jQuery('#viewColumnsSelect');
}
return Vtiger_CustomView_Js.columnSelectElement;
},
/**
* Function to get the selected columns list
* @return : jQuery object of selectedColumnsList
*/
getSelectedColumnsList : function() {
if(Vtiger_CustomView_Js.selectedColumnsList == false) {
Vtiger_CustomView_Js.selectedColumnsList = jQuery('#selectedColumnsList');
}
return Vtiger_CustomView_Js.selectedColumnsList;
},
/**
* Function to regiser the event to make the columns list sortable
*/
makeColumnListSortable : function() {
var select2Element = Vtiger_CustomView_Js.getColumnListSelect2Element();
//TODO : peform the selection operation in context this might break if you have multi select element in advance filter
//The sorting is only available when Select2 is attached to a hidden input field.
var chozenChoiceElement = select2Element.find('ul.select2-choices');
chozenChoiceElement.sortable({
'containment': chozenChoiceElement,
start: function() { Vtiger_CustomView_Js.getSelectedColumnsList().select2("onSortStart"); },
update: function() { Vtiger_CustomView_Js.getSelectedColumnsList().select2("onSortEnd"); }
});
},
/**
* Function which will get the selected columns with order preserved
* @return : array of selected values in order
*/
getSelectedColumns : function() {
var columnListSelectElement = Vtiger_CustomView_Js.getColumnSelectElement();
var select2Element = Vtiger_CustomView_Js.getColumnListSelect2Element();
var selectedValuesByOrder = new Array();
var selectedOptions = columnListSelectElement.find('option:selected');
var orderedSelect2Options = select2Element.find('li.select2-search-choice').find('div');
orderedSelect2Options.each(function(index,element){
var chosenOption = jQuery(element);
selectedOptions.each(function(optionIndex, domOption){
var option = jQuery(domOption);
if(option.html() == chosenOption.html()) {
selectedValuesByOrder.push(option.val());
return false;
}
});
});
return selectedValuesByOrder;
},
/**
* Function which will arrange the chosen element choices in order
*/
arrangeSelectChoicesInOrder : function() {
var contentsContainer = Vtiger_CustomView_Js.getContentsContainer();
var chosenElement = Vtiger_CustomView_Js.getColumnListSelect2Element();
var choicesContainer = chosenElement.find('ul.select2-choices');
var choicesList = choicesContainer.find('li.select2-search-choice');
var coulmnListSelectElement = Vtiger_CustomView_Js.getColumnSelectElement();
var selectedOptions = coulmnListSelectElement.find('option:selected');
var selectedOrder = JSON.parse(jQuery('input[name="columnslist"]', contentsContainer).val());
for(var index=selectedOrder.length ; index > 0 ; index--) {
var selectedValue = selectedOrder[index-1];
var option = selectedOptions.filter('[value="'+selectedValue+'"]');
choicesList.each(function(choiceListIndex,element){
var liElement = jQuery(element);
if(liElement.find('div').html() == option.html()){
choicesContainer.prepend(liElement);
return false;
}
});
}
},
saveFilter : function() {
var aDeferred = jQuery.Deferred();
var formElement = jQuery("#CustomView");
var formData = formElement.serializeFormData();
var progressIndicatorInstance = jQuery.progressIndicator({
'blockInfo' : {
'enabled' : true
}
});
AppConnector.request(formData).then(
function(data){
progressIndicatorInstance.progressIndicator({
'mode' : 'hide'
})
aDeferred.resolve(data);
},
function(error){
progressIndicatorInstance.progressIndicator({
'mode' : 'hide'
})
aDeferred.reject(error);
}
)
return aDeferred.promise();
},
saveAndViewFilter : function(){
Vtiger_CustomView_Js.saveFilter().then(
function(response){
if (response.success) {
var url = response['result']['listviewurl'];
window.location.href=url;
} else {
var params = {
title: app.vtranslate('JS_DUPLICATE_RECORD'),
text: response.error['message']
};
Vtiger_Helper_Js.showPnotify(params);
}
},
function(error) {
}
);
},
/**
* Function which will register the select2 elements for columns selection
*/
registerSelect2ElementForColumnsSelection : function() {
var selectElement = Vtiger_CustomView_Js.getColumnSelectElement();
app.changeSelectElementView(selectElement, 'select2', {maximumSelectionSize: 12,dropdownCss : {'z-index' : 0}});
},
registerEvents: function(){
Vtiger_CustomView_Js.registerSelect2ElementForColumnsSelection();
var contentsContainer = Vtiger_CustomView_Js.getContentsContainer();
jQuery('.stndrdFilterDateSelect').datepicker();
jQuery('.chzn-select').chosen();
var select2Element = app.getSelect2ElementFromSelect(Vtiger_CustomView_Js.getColumnSelectElement());
Vtiger_CustomView_Js.columnListSelect2Element = select2Element;
//To arrange the chosen choices in the order that is selected
Vtiger_CustomView_Js.arrangeSelectChoicesInOrder();
jQuery("#standardDateFilter").change(function(){
Vtiger_CustomView_Js.loadDateFilterValues();
});
Vtiger_CustomView_Js.makeColumnListSortable();
jQuery("#CustomView").submit(function(e) {
var selectElement = Vtiger_CustomView_Js.getColumnSelectElement();
var select2Element = app.getSelect2ElementFromSelect(selectElement);
var result = Vtiger_MultiSelect_Validator_Js.invokeValidation(selectElement);
if(result != true){
select2Element.validationEngine('showPrompt', result , 'error','bottomLeft',true);
e.preventDefault();
return;
} else {
select2Element.validationEngine('hide');
}
if(jQuery('#viewname').val().length > 40) {
var params = {
title : app.vtranslate('JS_MESSAGE'),
text : app.vtranslate('JS_VIEWNAME_ALERT')
}
Vtiger_Helper_Js.showPnotify(params);
e.preventDefault();
return;
}
//Mandatory Fields selection validation
//Any one Mandatory Field should select while creating custom view.
var mandatoryFieldsList = JSON.parse(jQuery('#mandatoryFieldsList').val());
var selectedOptions = selectElement.val();
var mandatoryFieldsMissing = true;
for(var i=0; i<selectedOptions.length; i++) {
if(jQuery.inArray(selectedOptions[i], mandatoryFieldsList) >= 0) {
mandatoryFieldsMissing = false;
break;
}
}
if(mandatoryFieldsMissing){
var result = app.vtranslate('JS_PLEASE_SELECT_ATLEAST_ONE_MANDATORY_FIELD');
select2Element.validationEngine('showPrompt', result , 'error','bottomLeft',true);
e.preventDefault();
return;
} else {
select2Element.validationEngine('hide');
}
//Mandatory Fields validation ends
var result = jQuery(e.currentTarget).validationEngine('validate');
if(result == true){
//handled standard filters saved values.
var stdfilterlist = {};
if((jQuery('#standardFilterCurrentDate').val() != '') && (jQuery('#standardFilterEndDate').val()!= '') && (jQuery('select.standardFilterColumn option:selected').val() != 'none')){
stdfilterlist['columnname'] = jQuery('select.standardFilterColumn option:selected').val();
stdfilterlist['stdfilter'] = jQuery('select#standardDateFilter option:selected').val();
stdfilterlist['startdate'] = jQuery('#standardFilterCurrentDate').val();
stdfilterlist['enddate'] = jQuery('#standardFilterEndDate').val();
jQuery('#stdfilterlist').val(JSON.stringify(stdfilterlist));
}
//handled advanced filters saved values.
var advfilterlist = Vtiger_CustomView_Js.advanceFilterInstance.getValues();
jQuery('#advfilterlist').val(JSON.stringify(advfilterlist));
jQuery('input[name="columnslist"]', contentsContainer).val(JSON.stringify(Vtiger_CustomView_Js.getSelectedColumns()));
Vtiger_CustomView_Js.saveAndViewFilter();
return false;
} else {
app.formAlignmentAfterValidation(jQuery(e.currentTarget));
}
});
jQuery('#CustomView').validationEngine(app.validationEngineOptions);
}
}