first commit
This commit is contained in:
248
layouts/v7/modules/Campaigns/RelatedList.tpl
Normal file
248
layouts/v7/modules/Campaigns/RelatedList.tpl
Normal file
@@ -0,0 +1,248 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** 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.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
{strip}
|
||||
{if !empty($CUSTOM_VIEWS)}
|
||||
{include file="PicklistColorMap.tpl"|vtemplate_path:$MODULE LISTVIEW_HEADERS=$RELATED_HEADERS}
|
||||
<div class="relatedContainer">
|
||||
{assign var=RELATED_MODULE_NAME value=$RELATED_MODULE->get('name')}
|
||||
{assign var=IS_RELATION_FIELD_ACTIVE value="{if $RELATION_FIELD}{$RELATION_FIELD->isActiveField()}{else}false{/if}"}
|
||||
<input type="hidden" name="emailEnabledModules" value=true />
|
||||
<input type="hidden" id="view" value="{$VIEW}" />
|
||||
<input type="hidden" name="currentPageNum" value="{$PAGING->getCurrentPage()}" />
|
||||
<input type="hidden" name="relatedModuleName" class="relatedModuleName" value="{$RELATED_MODULE_NAME}" />
|
||||
<input type="hidden" value="{$ORDER_BY}" id="orderBy">
|
||||
<input type="hidden" value="{$SORT_ORDER}" id="sortOrder">
|
||||
<input type="hidden" value="{$RELATED_ENTIRES_COUNT}" id="noOfEntries">
|
||||
<input type='hidden' value="{$PAGING->getPageLimit()}" id='pageLimit'>
|
||||
<input type='hidden' value="{$PAGING->get('page')}" id='pageNumber'>
|
||||
<input type="hidden" value="{$PAGING->isNextPageExists()}" id="nextPageExist"/>
|
||||
<input type="hidden" id="selectedIds" name="selectedIds" data-selected-ids={ZEND_JSON::encode($SELECTED_IDS)} />
|
||||
<input type="hidden" id="excludedIds" name="excludedIds" data-excluded-ids={ZEND_JSON::encode($EXCLUDED_IDS)} />
|
||||
<input type="hidden" id="recordsCount" name="recordsCount" />
|
||||
<input type='hidden' value="{$TOTAL_ENTRIES}" id='totalCount'>
|
||||
<input type='hidden' value="{$TAB_LABEL}" id='tab_label' name='tab_label'>
|
||||
<input type='hidden' value="{$IS_RELATION_FIELD_ACTIVE}" id='isRelationFieldActive'>
|
||||
|
||||
<div class="relatedHeader">
|
||||
<div class="btn-toolbar row">
|
||||
<div class="col-lg-5 col-md-5 col-sm-5 btn-toolbar">
|
||||
{foreach item=RELATED_LINK from=$RELATED_LIST_LINKS['LISTVIEWBASIC']}
|
||||
<div class="btn-group">
|
||||
{assign var=DROPDOWNS value=$RELATED_LINK->get('linkdropdowns')}
|
||||
{if count($DROPDOWNS) gt 0}
|
||||
<div class="btn-group">
|
||||
<a class="btn dropdown-toggle" href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-delay="200" data-close-others="false" style="width:20px;height:18px;">
|
||||
<img title="{$RELATED_LINK->getLabel()}" alt="{$RELATED_LINK->getLabel()}" src="{vimage_path("{$RELATED_LINK->getIcon()}")}">
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
{foreach item=DROPDOWN from=$DROPDOWNS}
|
||||
<li><a id="{$RELATED_MODULE_NAME}_relatedlistView_add_{Vtiger_Util_Helper::replaceSpaceWithUnderScores($DROPDOWN['label'])}" class="{$RELATED_LINK->get('linkclass')}" href='javascript:void(0)' data-documentType="{$DROPDOWN['type']}" data-url="{$DROPDOWN['url']}" data-name="{$RELATED_MODULE_NAME}" data-firsttime="{$DROPDOWN['firsttime']}"><i class="icon-plus"></i> {vtranslate($DROPDOWN['label'], $RELATED_MODULE_NAME)}</a></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{else}
|
||||
{assign var=IS_SEND_EMAIL_BUTTON value={$RELATED_LINK->get('_sendEmail')}}
|
||||
{assign var=IS_SELECT_BUTTON value={$RELATED_LINK->get('_selectRelation')}}
|
||||
<button type="button" module="{$RELATED_MODULE_NAME}" class="btn addButton btn-default
|
||||
{if $IS_SELECT_BUTTON eq true} selectRelation {/if} {if $IS_SEND_EMAIL_BUTTON eq true} sendEmail {/if}"
|
||||
{if $IS_SELECT_BUTTON eq true} data-moduleName="{$RELATED_LINK->get('_module')->get('name')}"{/if}
|
||||
{if ($RELATED_LINK->isPageLoadLink())}
|
||||
{if $RELATION_FIELD} data-name="{$RELATION_FIELD->getName()}" {/if}
|
||||
{if $IS_SEND_EMAIL_BUTTON neq true}data-url="{$RELATED_LINK->getUrl()}"{/if}
|
||||
{elseif $IS_SEND_EMAIL_BUTTON eq true}
|
||||
onclick="{$RELATED_LINK->getUrl()}"
|
||||
{/if}
|
||||
{if ($IS_SELECT_BUTTON neq true) && ($IS_SEND_EMAIL_BUTTON neq true)}name="addButton"{/if}
|
||||
{if $IS_SEND_EMAIL_BUTTON eq true} disabled="disabled" {/if}>{if ($IS_SELECT_BUTTON neq true) && ($IS_SEND_EMAIL_BUTTON neq true)}<i class="fa fa-plus"></i>{/if} {$RELATED_LINK->getLabel()}</button>
|
||||
{/if}
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class='col-lg-4 col-md-4 col-sm-4'>
|
||||
<span class="customFilterMainSpan">
|
||||
{if $CUSTOM_VIEWS|@count gt 0}
|
||||
<select id="recordsFilter" class="select2 col-lg-8" data-placeholder="{vtranslate('LBL_SELECT_TO_LOAD_LIST', $RELATED_MODULE_NAME)}">
|
||||
<option></option>
|
||||
{foreach key=GROUP_LABEL item=GROUP_CUSTOM_VIEWS from=$CUSTOM_VIEWS}
|
||||
<optgroup label=' {if $GROUP_LABEL eq 'Mine'} {else if} {vtranslate($GROUP_LABEL, $RELATED_MODULE_NAME)} {/if}' >
|
||||
{foreach item="CUSTOM_VIEW" from=$GROUP_CUSTOM_VIEWS}
|
||||
<option id="filterOptionId_{$CUSTOM_VIEW->get('cvid')}" value="{$CUSTOM_VIEW->get('cvid')}" class="filterOptionId_{$CUSTOM_VIEW->get('cvid')}" data-id="{$CUSTOM_VIEW->get('cvid')}">{if $CUSTOM_VIEW->get('viewname') eq 'All'}{vtranslate($CUSTOM_VIEW->get('viewname'), $RELATED_MODULE_NAME)} {vtranslate($RELATED_MODULE_NAME, $RELATED_MODULE_NAME)}{else}{vtranslate($CUSTOM_VIEW->get('viewname'), $RELATED_MODULE_NAME)}{/if}{if $GROUP_LABEL neq 'Mine'} [ {$CUSTOM_VIEW->getOwnerName()} ] {/if}</option>
|
||||
{/foreach}
|
||||
</optgroup>
|
||||
{/foreach}
|
||||
</select>
|
||||
{else}
|
||||
<input type="hidden" value="0" id="customFilter" />
|
||||
{/if}
|
||||
</span>
|
||||
</div>
|
||||
{assign var=CLASS_VIEW_ACTION value='relatedViewActions'}
|
||||
{assign var=CLASS_VIEW_PAGING_INPUT value='relatedViewPagingInput'}
|
||||
{assign var=CLASS_VIEW_PAGING_INPUT_SUBMIT value='relatedViewPagingInputSubmit'}
|
||||
{assign var=CLASS_VIEW_BASIC_ACTION value='relatedViewBasicAction'}
|
||||
{assign var=PAGING_MODEL value=$PAGING}
|
||||
{assign var=RECORD_COUNT value=$RELATED_RECORDS|@count}
|
||||
{assign var=PAGE_NUMBER value=$PAGING->get('page')}
|
||||
{include file="Pagination.tpl"|vtemplate_path:$MODULE SHOWPAGEJUMP=true}
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-lg-12 col-md-12 col-sm-12'>
|
||||
{assign var=RELATED_MODULE_NAME value=$RELATED_MODULE->get('name')}
|
||||
<div class="hide messageContainer" style = "height:30px;">
|
||||
<center><a id="selectAllMsgDiv" href="#">{vtranslate('LBL_SELECT_ALL',$MODULE)} {vtranslate($RELATED_MODULE_NAME ,$RELATED_MODULE_NAME)} (<span id="totalRecordsCount" value=""></span>)</a></center>
|
||||
</div>
|
||||
<div class="hide messageContainer" style = "height:30px;">
|
||||
<center><a id="deSelectAllMsgDiv" href="#">{vtranslate('LBL_DESELECT_ALL_RECORDS',$MODULE)}</a></center>
|
||||
</div>
|
||||
</div>
|
||||
<div class="relatedContents col-lg-12 col-md-12 col-sm-12 table-container">
|
||||
<div class="bottomscroll-div">
|
||||
{assign var=WIDTHTYPE value=$USER_MODEL->get('rowheight')}
|
||||
<table id="listview-table" class="table listview-table">
|
||||
<thead>
|
||||
<tr class="listViewHeaders">
|
||||
<th width="4%" style="padding-left: 12px;">
|
||||
<input type="checkbox" id="listViewEntriesMainCheckBox"/>
|
||||
</th>
|
||||
<th style="min-width:100px">
|
||||
</th>
|
||||
{foreach item=HEADER_FIELD from=$RELATED_HEADERS}
|
||||
<th class="nowrap">
|
||||
<a href="javascript:void(0);" class="listViewContentHeaderValues" data-nextsortorderval="{if $COLUMN_NAME eq $HEADER_FIELD->get('column')}{$NEXT_SORT_ORDER}{else}ASC{/if}" data-fieldname="{$HEADER_FIELD->get('column')}">
|
||||
{if $COLUMN_NAME eq $HEADER_FIELD->get('column')}
|
||||
<i class="fa fa-sort {$FASORT_IMAGE}"></i>
|
||||
{else}
|
||||
<i class="fa fa-sort customsort"></i>
|
||||
{/if}
|
||||
|
||||
{vtranslate($HEADER_FIELD->get('label'), $RELATED_MODULE_NAME)}
|
||||
{if $COLUMN_NAME eq $HEADER_FIELD->get('column')}<img class="{$SORT_IMAGE}">{/if}
|
||||
</a>
|
||||
{if $COLUMN_NAME eq $HEADER_FIELD->get('column')}
|
||||
<a href="#" class="removeSorting"><i class="fa fa-remove"></i></a>
|
||||
{/if}
|
||||
</th>
|
||||
{/foreach}
|
||||
<th class="nowrap">
|
||||
<a href="javascript:void(0);" class="listViewContentHeaderValues noSorting">{vtranslate('Status', $RELATED_MODULE_NAME)}</a>
|
||||
</th>
|
||||
</tr>
|
||||
<tr class="searchRow">
|
||||
<th></th>
|
||||
<th class="inline-search-btn">
|
||||
<button class="btn btn-success btn-sm" data-trigger="relatedListSearch">{vtranslate("LBL_SEARCH",$MODULE)}</button>
|
||||
</th>
|
||||
{foreach item=HEADER_FIELD from=$RELATED_HEADERS}
|
||||
<th>
|
||||
{if $HEADER_FIELD->get('column') eq 'time_start' or $HEADER_FIELD->get('column') eq 'time_end' or $HEADER_FIELD->getFieldDataType() eq 'reference'}
|
||||
{else}
|
||||
{assign var=FIELD_UI_TYPE_MODEL value=$HEADER_FIELD->getUITypeModel()}
|
||||
{include file=vtemplate_path($FIELD_UI_TYPE_MODEL->getListSearchTemplateName(),$RELATED_MODULE_NAME) FIELD_MODEL= $HEADER_FIELD SEARCH_INFO=$SEARCH_DETAILS[$HEADER_FIELD->getName()] USER_MODEL=$USER_MODEL}
|
||||
<input type="hidden" class="operatorValue" value="{$SEARCH_DETAILS[$HEADER_FIELD->getName()]['comparator']}">
|
||||
{/if}
|
||||
</th>
|
||||
{/foreach}
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
{foreach item=RELATED_RECORD from=$RELATED_RECORDS}
|
||||
<tr class="listViewEntries" data-id='{$RELATED_RECORD->getId()}' data-recordUrl='{$RELATED_RECORD->getDetailViewUrl()}'>
|
||||
<td width="4%" class="{$WIDTHTYPE}">
|
||||
<input type="checkbox" value="{$RELATED_RECORD->getId()}" class="listViewEntriesCheckBox"/>
|
||||
</td>
|
||||
<td style="width:100px">
|
||||
<span class="actionImages">
|
||||
<a name="relationEdit" data-url="{$RELATED_RECORD->getEditViewUrl()}" href="javascript:void(0)"><i title="{vtranslate('LBL_EDIT', $MODULE)}" class="fa fa-pencil"></i></a>
|
||||
{if $IS_DELETABLE}
|
||||
<a class="relationDelete"><i title="{vtranslate('LBL_UNLINK', $MODULE)}" class="vicon-linkopen"></i></a>
|
||||
{/if}
|
||||
</span>
|
||||
</td>
|
||||
{foreach item=HEADER_FIELD from=$RELATED_HEADERS}
|
||||
{assign var=RELATED_HEADERNAME value=$HEADER_FIELD->get('name')}
|
||||
{assign var=RELATED_LIST_VALUE value=$RELATED_RECORD->get($RELATED_HEADERNAME)}
|
||||
<td class="{$WIDTHTYPE} relatedListEntryValues" data-field-type="{$HEADER_FIELD->getFieldDataType()}" nowrap>
|
||||
<span class="value textOverflowEllipsis">
|
||||
{if $HEADER_FIELD->isNameField() eq true or $HEADER_FIELD->get('uitype') eq '4'}
|
||||
<a href="{$RELATED_RECORD->getDetailViewUrl()}">{$RELATED_RECORD->getDisplayValue($RELATED_HEADERNAME)}</a>
|
||||
{elseif $HEADER_FIELD->get('uitype') eq '71' or $HEADER_FIELD->get('uitype') eq '72'}
|
||||
{assign var=CURRENCY_SYMBOL value=Vtiger_RelationListView_Model::getCurrencySymbol($RELATED_RECORD->get('id'), $HEADER_FIELD)}
|
||||
{assign var=CURRENCY_VALUE value=CurrencyField::convertToUserFormat($RELATED_RECORD->get($RELATED_HEADERNAME))}
|
||||
{if $HEADER_FIELD->get('uitype') eq '72'}
|
||||
{assign var=CURRENCY_VALUE value=CurrencyField::convertToUserFormat($RELATED_RECORD->get($RELATED_HEADERNAME), null, true)}
|
||||
{/if}
|
||||
{if Users_Record_Model::getCurrentUserModel()->get('currency_symbol_placement') eq '$1.0'}
|
||||
{$CURRENCY_SYMBOL}{$CURRENCY_VALUE}
|
||||
{else}
|
||||
{$CURRENCY_VALUE}{$CURRENCY_SYMBOL}
|
||||
{/if}
|
||||
{else if $HEADER_FIELD->getFieldDataType() eq 'picklist'}
|
||||
<span {if !empty($RELATED_LIST_VALUE)} class="picklist-color picklist-{$HEADER_FIELD->getId()}-{Vtiger_Util_Helper::convertSpaceToHyphen($RELATED_LIST_VALUE)}" {/if}> {$RELATED_RECORD->getDisplayValue($RELATED_HEADERNAME)} </span>
|
||||
{else}
|
||||
{$RELATED_RECORD->getDisplayValue($RELATED_HEADERNAME)}
|
||||
{/if}
|
||||
</span>
|
||||
</td>
|
||||
{/foreach}
|
||||
<td class="{$WIDTHTYPE}" nowrap>
|
||||
<span class="currentStatus more dropdown action">
|
||||
<span class="statusValue dropdown-toggle" data-toggle="dropdown">{vtranslate($RELATED_RECORD->get('status'),$MODULE)} </span>
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i title="{vtranslate('LBL_EDIT', $MODULE)}" class="fa fa-arrow-down alignMiddle editRelatedStatus"></i></a>
|
||||
<ul class="dropdown-menu dropdown-menu-right">
|
||||
{foreach key=STATUS_ID item=STATUS from=$STATUS_VALUES}
|
||||
<li id="{$STATUS_ID}" data-status="{vtranslate($STATUS, $MODULE)}">
|
||||
<a>{vtranslate($STATUS, $MODULE)}</a>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var related_uimeta = (function () {
|
||||
var fieldInfo = {$RELATED_FIELDS_INFO};
|
||||
return {
|
||||
field: {
|
||||
get: function (name, property) {
|
||||
if (name && property === undefined) {
|
||||
return fieldInfo[name];
|
||||
}
|
||||
if (name && property) {
|
||||
return fieldInfo[name][property]
|
||||
}
|
||||
},
|
||||
isMandatory: function (name) {
|
||||
if (fieldInfo[name]) {
|
||||
return fieldInfo[name].mandatory;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
getType: function (name) {
|
||||
if (fieldInfo[name]) {
|
||||
return fieldInfo[name].type
|
||||
}
|
||||
return false;
|
||||
}
|
||||
},
|
||||
};
|
||||
})();
|
||||
</script>
|
||||
{else}
|
||||
{include file='RelatedList.tpl'|@vtemplate_path}
|
||||
{/if}
|
||||
{/strip}
|
||||
374
layouts/v7/modules/Campaigns/resources/RelatedList.js
Normal file
374
layouts/v7/modules/Campaigns/resources/RelatedList.js
Normal file
@@ -0,0 +1,374 @@
|
||||
/*+***********************************************************************************
|
||||
* 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.
|
||||
*************************************************************************************/
|
||||
|
||||
Vtiger_RelatedList_Js("Campaigns_RelatedList_Js",{
|
||||
|
||||
triggerSendEmail : function(massActionUrl, module){
|
||||
var detailInstance = Vtiger_Detail_Js.getInstance();
|
||||
var searchParams = JSON.stringify(detailInstance.getRelatedListSearchParams());
|
||||
var data = app.convertUrlToDataParams(massActionUrl);
|
||||
var selectedIds = jQuery('#selectedIds').data('selected-ids');
|
||||
var excludedIds = jQuery('#excludedIds').data('excluded-ids');
|
||||
if(selectedIds == "") {
|
||||
app.helper.showAlertBox({message:app.vtranslate('JS_PLEASE_SELECT_ONE_RECORD')});
|
||||
return false;
|
||||
}
|
||||
var params = {
|
||||
'search_params' : searchParams,
|
||||
'nolistcache' : (jQuery('#noFilterCache').val() == 1) ? 1 : 0,
|
||||
'selected_ids' : selectedIds,
|
||||
'excluded_ids' : excludedIds,
|
||||
'sourceModule' : app.getModuleName(),
|
||||
'sourceRecord' : jQuery('#recordId').val()
|
||||
};
|
||||
jQuery.extend(params, data);
|
||||
Vtiger_Index_Js.showComposeEmailPopup(params);
|
||||
}
|
||||
|
||||
},{
|
||||
selectedRecordIds : false,
|
||||
excludedRecordIds : false,
|
||||
|
||||
loadRelatedList : function(params) {
|
||||
var aDeferred = jQuery.Deferred();
|
||||
var self = this;
|
||||
self._super(params).then(function(data) {
|
||||
self.registerEvents();
|
||||
aDeferred.resolve(data);
|
||||
});
|
||||
return aDeferred.promise();
|
||||
},
|
||||
|
||||
changeCustomFilterElementView : function() {
|
||||
var self = this;
|
||||
var filterSelectElement = self.relatedContentContainer.find('#recordsFilter');
|
||||
if(filterSelectElement.length > 0){
|
||||
vtUtils.showSelect2ElementView(filterSelectElement);
|
||||
}
|
||||
},
|
||||
|
||||
registerChangeCustomFilterEvent : function() {
|
||||
var self = this;
|
||||
var filterSelectElement = this.relatedContentContainer.find('#recordsFilter');
|
||||
filterSelectElement.change(function(e){
|
||||
var element = jQuery(e.currentTarget);
|
||||
if (jQuery('.bootbox-confirm .in').length == 0) {
|
||||
var message = app.vtranslate('JS_APPENDED_TO_EXISTING_LIST',self.relatedModulename)+'<br><br>'+app.vtranslate('JS_WISH_TO_PROCEED');
|
||||
app.helper.showConfirmationBox({'message':message}).then(function(e){
|
||||
var cvId = element.find('option:selected').data('id');
|
||||
var params = {
|
||||
'sourceRecord' : self.parentRecordId,
|
||||
'relatedModule' :self.relatedModulename,
|
||||
'viewId' : cvId,
|
||||
'module' : app.getModuleName(),
|
||||
'action': "RelationAjax",
|
||||
'mode' : 'addRelationsFromRelatedModuleViewId'
|
||||
};
|
||||
app.helper.showProgress();
|
||||
app.request.post({"data" : params}).then(
|
||||
function(responseData) {
|
||||
app.helper.hideProgress();
|
||||
if(responseData != null){
|
||||
app.helper.showErrorNotification({"message": app.vtranslate('JS_NO_RECORDS_RELATED_TO_THIS_FILTER')});
|
||||
} else {
|
||||
self.loadRelatedList().then(function() {
|
||||
self.triggerRelationAdditionalActions();
|
||||
});
|
||||
}
|
||||
},
|
||||
function(textStatus, errorThrown){}
|
||||
);
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
registerEventToEditRelatedStatus : function() {
|
||||
var self = this;
|
||||
var statusElement = self.relatedContentContainer.find('.currentStatus');
|
||||
statusElement.on('click',function(e) {
|
||||
e.stopImmediatePropagation();
|
||||
var element = jQuery(e.currentTarget);
|
||||
element.addClass('open');
|
||||
});
|
||||
var statusDropdown = statusElement.find('.dropdown-menu');
|
||||
statusDropdown.on('click','a',function(e) {
|
||||
e.stopImmediatePropagation();
|
||||
var element = jQuery(e.currentTarget);
|
||||
var liContainer = element.closest('li');
|
||||
var currentStatus = element.closest('.currentStatus');
|
||||
var selectedStatusId = liContainer.attr('id');
|
||||
var selectedStatusValue = liContainer.data('status');
|
||||
var relatedRecordId = element.closest('tr').data('id');
|
||||
var params = {
|
||||
'relatedModule' : self.relatedModulename,
|
||||
'relatedRecord' : relatedRecordId,
|
||||
'status' : selectedStatusId,
|
||||
'module' : app.getModuleName(),
|
||||
'action' : 'RelationAjax',
|
||||
'sourceRecord' : self.parentRecordId,
|
||||
'mode' : 'updateStatus'
|
||||
}
|
||||
app.helper.showProgress();
|
||||
app.request.post({"data" : params}).then(function(error, responseData) {
|
||||
if(responseData) {
|
||||
app.helper.hideProgress();
|
||||
currentStatus.find('.statusValue').text(selectedStatusValue);
|
||||
currentStatus.removeClass('open');
|
||||
}
|
||||
},
|
||||
function(textStatus, errorThrown) {}
|
||||
);
|
||||
});
|
||||
},
|
||||
|
||||
writeSelectedIds : function(selectedIds) {
|
||||
var self = this;
|
||||
var element = self.relatedContentContainer.find('#selectedIds');
|
||||
element.data('selected-ids', selectedIds);
|
||||
self.selectedRecordIds = selectedIds;
|
||||
},
|
||||
|
||||
writeExcludedIds : function(excludedIds) {
|
||||
var self = this;
|
||||
var element = self.relatedContentContainer.find('#excludedIds');
|
||||
element.data('excluded-ids', excludedIds);
|
||||
self.excludedRecordIds = excludedIds;
|
||||
},
|
||||
|
||||
readSelectedIds : function(decode) {
|
||||
var self = this;
|
||||
var element = self.relatedContentContainer.find('#selectedIds');
|
||||
var selectedIds = element.data('selected-ids');
|
||||
if(selectedIds == "") {
|
||||
selectedIds = new Array();
|
||||
self.writeSelectedIds(selectedIds);
|
||||
}
|
||||
if(decode && typeof selectedIds == "object") {
|
||||
selectedIds = JSON.stringify(selectedIds);
|
||||
}
|
||||
return selectedIds;
|
||||
},
|
||||
|
||||
reladExcludedIds : function(decode) {
|
||||
var self = this;
|
||||
var element = self.relatedContentContainer.find('#excludedIds');
|
||||
var excludedIds = element.data('excluded-ids');
|
||||
if(excludedIds == "") {
|
||||
excludedIds = new Array();
|
||||
self.writeExcludedIds(excludedIds);
|
||||
}
|
||||
if(decode && typeof excludedIds == "object") {
|
||||
excludedIds = JSON.stringify(excludedIds);
|
||||
}
|
||||
return excludedIds;
|
||||
},
|
||||
registerPostSelectionRelatedListActions : function(){
|
||||
var selectedIds = this.readSelectedIds(false);
|
||||
var sendEmailButton = this.relatedContentContainer.find('.relatedHeader').find('.sendEmail');
|
||||
if(selectedIds.length > 0){
|
||||
sendEmailButton.removeAttr('disabled');
|
||||
}else if(selectedIds.length == 0){
|
||||
sendEmailButton.attr('disabled', "disabled");
|
||||
}
|
||||
},
|
||||
|
||||
markSelectedIdsCheckboxes: function (params) {
|
||||
var self = this;
|
||||
var selectedIds = params.selected;
|
||||
var excludedIds = params.excluded;
|
||||
var relatedListContainer = self.relatedContentContainer;
|
||||
relatedListContainer.find('#selectedIds').data('selected-ids', selectedIds);
|
||||
relatedListContainer.find('#excludedIds').data('excluded-ids', excludedIds);
|
||||
if ((selectedIds == '' && excludedIds == '')) {
|
||||
return;
|
||||
}
|
||||
relatedListContainer.find('.listViewEntriesCheckBox').each(function (i, ele) {
|
||||
var currentRow = jQuery(ele).closest('tr');
|
||||
var recordId = currentRow.data('id').toString();
|
||||
if (jQuery.inArray(recordId, excludedIds) == '-1' && (jQuery.inArray(recordId, selectedIds) != '-1' || selectedIds == 'all')) {
|
||||
jQuery(ele).prop('checked', true);
|
||||
currentRow.addClass('listviewhovercolor');
|
||||
}
|
||||
});
|
||||
self.selectMainCheck();
|
||||
},
|
||||
|
||||
selectMainCheck: function () {
|
||||
var self = this;
|
||||
var relatedListContainer = self.relatedContentContainer;
|
||||
var mainCheckBox = relatedListContainer.find('#listViewEntriesMainCheckBox');
|
||||
if (relatedListContainer.find('.listViewEntriesCheckBox').not(":checked").length == 0) {
|
||||
mainCheckBox.prop("checked", true);
|
||||
} else {
|
||||
mainCheckBox.prop("checked", false);
|
||||
}
|
||||
},
|
||||
|
||||
registerCheckboxClickEvent : function() {
|
||||
var self = this;
|
||||
self.relatedContentContainer.off('click','.listViewEntriesCheckBox').on('click','.listViewEntriesCheckBox',function(e) {
|
||||
var element = jQuery(e.currentTarget);
|
||||
var recordId = element.val();
|
||||
var selectedIds = self.readSelectedIds(false);
|
||||
var excludedIds = self.reladExcludedIds(false);
|
||||
if(element.is(":checked")) {
|
||||
if(selectedIds != "all") {
|
||||
selectedIds.push(recordId);
|
||||
} else {
|
||||
excludedIds.splice($.inArray(recordId, excludedIds), 1);
|
||||
}
|
||||
element.closest('tr').addClass('listviewhovercolor');
|
||||
self.registerPostSelectionRelatedListActions();
|
||||
} else {
|
||||
if(selectedIds != "all") {
|
||||
selectedIds.splice($.inArray(recordId, selectedIds), 1);
|
||||
} else {
|
||||
excludedIds.push(recordId);
|
||||
}
|
||||
element.closest('tr').removeClass('listviewhovercolor');
|
||||
self.registerPostSelectionRelatedListActions();
|
||||
}
|
||||
self.writeSelectedIds(selectedIds);
|
||||
self.writeExcludedIds(excludedIds);
|
||||
self.selectMainCheck();
|
||||
});
|
||||
},
|
||||
|
||||
registerMainCheckboxClickEvent : function() {
|
||||
var self = this;
|
||||
self.relatedContentContainer.off('click', '#listViewEntriesMainCheckBox').on('click', '#listViewEntriesMainCheckBox', function (e) {
|
||||
var element = jQuery(e.currentTarget);
|
||||
if(element.is(":checked")) {
|
||||
var selectedIds = self.readSelectedIds(false);
|
||||
var excludedIds = self.reladExcludedIds(false);
|
||||
self.relatedContentContainer.find('.listViewEntriesCheckBox').each(function(i, ele){
|
||||
var recordId = jQuery(ele).val();
|
||||
if(selectedIds != "all") {
|
||||
selectedIds.push(recordId);
|
||||
} else {
|
||||
excludedIds.splice($.inArray(recordId, excludedIds), 1);
|
||||
}
|
||||
jQuery(ele).prop('checked', true).closest('tr').addClass('listviewhovercolor');;
|
||||
});
|
||||
self.writeSelectedIds(selectedIds);
|
||||
self.writeExcludedIds(excludedIds);
|
||||
self.getRecordsCount().then(function(count){
|
||||
self.relatedContentContainer.find('#totalRecordsCount').text(count);
|
||||
self.relatedContentContainer.find('#selectAllMsgDiv').closest('div.messageContainer').removeClass('hide');
|
||||
});
|
||||
self.registerPostSelectionRelatedListActions();
|
||||
} else {
|
||||
var selectedIds = self.readSelectedIds(false);
|
||||
var excludedIds = self.reladExcludedIds(false);
|
||||
self.relatedContentContainer.find('.listViewEntriesCheckBox').each(function(i, ele){
|
||||
var recordId = jQuery(ele).val();
|
||||
if(selectedIds != "all") {
|
||||
selectedIds.splice($.inArray(recordId, selectedIds), 1);
|
||||
} else {
|
||||
excludedIds.push(recordId);
|
||||
}
|
||||
jQuery(ele).prop('checked', false).closest('tr').removeClass('listviewhovercolor');;
|
||||
});
|
||||
self.writeSelectedIds(selectedIds);
|
||||
self.writeExcludedIds(excludedIds);
|
||||
self.relatedContentContainer.find('#selectAllMsgDiv').closest('div.messageContainer').addClass('hide');
|
||||
self.registerPostSelectionRelatedListActions();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getRecordsCount : function() {
|
||||
var aDeferred = jQuery.Deferred();
|
||||
var self = this;
|
||||
var recordCountEle = self.relatedContentContainer.find('#recordsCount');
|
||||
var recordsCount = recordCountEle.val();
|
||||
if(recordsCount != "") {
|
||||
aDeferred.resolve(recordsCount);
|
||||
} else {
|
||||
var params = {
|
||||
'module' : app.getModuleName(),
|
||||
'action' : 'DetailAjax',
|
||||
'mode' : 'getRecordsCount',
|
||||
'relatedModule' : self.relatedModulename,
|
||||
'record' : self.parentRecordId,
|
||||
'tab_label' : self.relatedContentContainer.find('#tab_label').val()
|
||||
};
|
||||
app.helper.showProgress();
|
||||
app.request.post({"data" : params}).then(function(error, responseData) {
|
||||
app.helper.hideProgress();
|
||||
var count = responseData.count;
|
||||
recordCountEle.val(count);
|
||||
aDeferred.resolve(count);
|
||||
});
|
||||
}
|
||||
return aDeferred.promise();
|
||||
},
|
||||
|
||||
registerSelectAllClickEvent : function() {
|
||||
var self = this;
|
||||
var selectAllContainer = self.relatedContentContainer.find('#selectAllMsgDiv');
|
||||
selectAllContainer.click(function(){
|
||||
self.relatedContentContainer.find('.listViewEntriesCheckBox').each(function(i, ele){
|
||||
jQuery(ele).attr('checked', true);
|
||||
});
|
||||
self.relatedContentContainer.find('#listViewEntriesMainCheckBox').attr('checked', true);
|
||||
self.writeSelectedIds("all");
|
||||
selectAllContainer.closest('div.messageContainer').addClass('hide');
|
||||
self.relatedContentContainer.find('#deSelectAllMsgDiv').closest('div.messageContainer').removeClass('hide');
|
||||
});
|
||||
},
|
||||
|
||||
registerDeselectAllClickEvent : function() {
|
||||
var self = this;
|
||||
var deselectAllContainer = self.relatedContentContainer.find('#deSelectAllMsgDiv');
|
||||
deselectAllContainer.click(function(){
|
||||
self.relatedContentContainer.find('.listViewEntriesCheckBox').each(function(i, ele){
|
||||
jQuery(ele).attr('checked', false);
|
||||
});
|
||||
self.relatedContentContainer.find('#listViewEntriesMainCheckBox').attr('checked', false);
|
||||
self.writeSelectedIds('');
|
||||
self.writeExcludedIds('');
|
||||
deselectAllContainer.closest('div.messageContainer').addClass('hide');
|
||||
});
|
||||
},
|
||||
|
||||
postLoadRelatedListViewRecords : function(){
|
||||
var thisInstance = this;
|
||||
app.event.off('Vtiger.RelatedList.PostLoad.Event');
|
||||
app.event.on('Vtiger.RelatedList.PostLoad.Event', function(e) {
|
||||
var listParams = {
|
||||
"selected" : thisInstance.selectedRecordIds,
|
||||
"excluded" : thisInstance.excludedRecordIds
|
||||
};
|
||||
thisInstance.markSelectedIdsCheckboxes(listParams);
|
||||
});
|
||||
},
|
||||
|
||||
registerEvents : function() {
|
||||
this.changeCustomFilterElementView();
|
||||
this.registerEventToEditRelatedStatus();
|
||||
this.registerChangeCustomFilterEvent();
|
||||
this.registerCheckboxClickEvent();
|
||||
this.registerMainCheckboxClickEvent();
|
||||
this.registerSelectAllClickEvent();
|
||||
this.registerDeselectAllClickEvent();
|
||||
this.postLoadRelatedListViewRecords();
|
||||
if(typeof jQuery.fn.sadropdown === 'function') {
|
||||
jQuery('.currentStatus').find('.dropdown-toggle').sadropdown({
|
||||
relativeTo: '.listview-table'
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
init : function(parentId, parentModule, selectedRelatedTabElement, relatedModuleName) {
|
||||
this._super(parentId, parentModule, selectedRelatedTabElement, relatedModuleName);
|
||||
this.registerEvents();
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user