Browse Source

UI-1742: Can now select a callflow created in Advanced Callflows in Main Number

4.3
Joris Tirado 10 years ago
parent
commit
9e500a60d7
4 changed files with 140 additions and 79 deletions
  1. +4
    -1
      i18n/en-US.json
  2. +6
    -6
      submodules/strategy/strategy.css
  3. +33
    -4
      submodules/strategy/strategy.js
  4. +97
    -68
      views/strategy-callsTab.html

+ 4
- 1
i18n/en-US.json View File

@ -788,7 +788,10 @@
"voicemail": "Voicemail Boxes",
"__comment": "UI-1353: Add directory support for the virtual receptionist",
"__version": "v3.20_s4",
"directory": "Directory"
"directory": "Directory",
"__comment": "UI-1742: Can now select a callflow created in Advanced Callflows in Main Number",
"__version": "3.22",
"advancedCallflows": "Advanced Callflows"
},
"confirmMessages": {
"deleteHoliday": "This holiday will be permanently deleted. Continue?",


+ 6
- 6
submodules/strategy/strategy.css View File

@ -417,10 +417,6 @@
background: transparent;
}
#strategy_container .element-container.strategy-calls .callflow-tabs .callflow-tab-title {
margin-bottom: 10px;
}
#strategy_container .element-container.strategy-calls .callflow-tabs .call-option {
display: inline-block;
vertical-align: top;
@ -443,8 +439,12 @@
width: 160px;
}
#strategy_container .element-container.strategy-calls .callflow-tabs .call-option:not(:first-of-type) {
margin-left: 20px;
#strategy_container .element-container.strategy-calls .call-options-container .call-option {
margin: 14px 14px 0 0;
}
#strategy_container .element-container.strategy-calls .call-options-container .call-option:last-child {
margin-right: 0;
}
#strategy_container .element-container.strategy-calls .callflow-tabs .call-option > div:not(:first-of-type) {


+ 33
- 4
submodules/strategy/strategy.js View File

@ -582,6 +582,7 @@ define(function(require){
callOption: {
type: "default"
},
hideAdvancedCallflows: _.isEmpty(strategyData.callEntities.advancedCallflows),
callflow: callflowName,
callEntities: self.strategyGetCallEntitiesDropdownData(strategyData.callEntities, true, true),
voicemails: strategyData.voicemails,
@ -589,7 +590,10 @@ define(function(require){
};
if(strategyData.callflows[callflowName].flow.module === "voicemail") {
if (strategyData.callflows[callflowName].flow.hasOwnProperty("is_main_number_cf")) {
tabData.callOption.callEntityId = strategyData.callflows[callflowName].flow.data.id;
tabData.callOption.type = "advanced-callflow";
} else if(strategyData.callflows[callflowName].flow.module === "voicemail") {
tabData.callOption.callEntityId = 'none';
tabData.callOption.voicemailId = strategyData.callflows[callflowName].flow.data.id;
tabData.callOption.type = "user-voicemail";
@ -618,6 +622,7 @@ define(function(require){
});
template.find('.voicemail-select select').chosen({ search_contains: true, width: '160px' });
template.find('.advancedCallflows-select select').chosen({ search_contains: true, width: '160px' });
callback && callback();
break;
@ -1317,7 +1322,8 @@ define(function(require){
callOption = $this.find('.call-option.active'),
menu = callOption.find('.menu-div'),
callEntity = callOption.find('.user-select'),
voicemail = callOption.find('.voicemail-select')
voicemail = callOption.find('.voicemail-select'),
advancedCallflow = callOption.find('.advancedCallflows-select'),
flow = {};
if(callEntity.length) {
@ -1386,6 +1392,17 @@ define(function(require){
}
}
if (advancedCallflow.length) {
flow = {
children: {},
module: 'callflow',
data: {
id: advancedCallflow.find('option:selected').val()
},
is_main_number_cf: true
};
}
flows[callflowName] = flow;
});
@ -2367,7 +2384,14 @@ define(function(require){
_callback(null, data.data);
}
});
}
},
advancedCallflows: function(_callback) {
self.strategyGetCallflows(function (advancedCallflowsData) {
_callback(null, advancedCallflowsData);
}, {
'filter_ui_is_main_number_cf': true
});
},
},
function(err, results) {
var callEntities = {
@ -2380,7 +2404,8 @@ define(function(require){
val.name = group && group.name || val.name;
val.module = 'callflow';
return val;
})
}),
advancedCallflows: results.advancedCallflows
};
_.each(callEntities.device, function(device) {
@ -2409,6 +2434,10 @@ define(function(require){
callEntities.ring_group.push(group);
});
_.each(results.advancedCallflows, function(callflow) {
callflow.module = 'callflow';
});
callback(callEntities);
}
);


+ 97
- 68
views/strategy-callsTab.html View File

@ -1,79 +1,108 @@
<div class="callflow-tab-title">{{tabMessage}}</div>
<div class="call-option menu-call {{#compare callOption.type '===' 'default'}}active{{/compare}}">
<div class="radio-div">{{#monsterRadio "radio-large"}}<input type="radio" {{#compare callOption.type '===' 'default'}}checked{{/compare}} name="calls.{{callflow}}" value="menu">{{/monsterRadio}}</div>
<div class="title">{{i18n.strategy.calls.incomingCall}}</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="menu-div {{#if menu}}has-menu" data-callflow="{{menu}}{{/if}}">
<div class="link">
<a href="#">
<div class="menu-icon">
<i class="fa fa-user fa-3x"></i>
</div>
<div class="link-icon">
<i class="fa fa-cog icon-small"></i>
<span>{{i18n.strategy.calls.virtualReceptionist}}</span>
</div>
</a>
<div class="call-options-container">
<div class="call-option menu-call {{#compare callOption.type '===' 'default'}}active{{/compare}}">
<div class="radio-div">{{#monsterRadio "radio-large"}}<input type="radio" {{#compare callOption.type '===' 'default'}}checked{{/compare}} name="calls.{{callflow}}" value="menu">{{/monsterRadio}}</div>
<div class="title">{{i18n.strategy.calls.incomingCall}}</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="menu-div {{#if menu}}has-menu" data-callflow="{{menu}}{{/if}}">
<div class="link">
<a href="#">
<div class="menu-icon">
<i class="fa fa-user fa-3x"></i>
</div>
<div class="link-icon">
<i class="fa fa-cog icon-small"></i>
<span>{{i18n.strategy.calls.virtualReceptionist}}</span>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="call-option user-menu-call {{#compare callOption.type '===' 'user-menu'}}active{{/compare}}">
<div class="radio-div">{{#monsterRadio "radio-large"}}<input type="radio" {{#compare callOption.type '===' 'user-menu'}}checked{{/compare}} name="calls.{{callflow}}" value="user-menu">{{/monsterRadio}}</div>
<div class="title">{{i18n.strategy.calls.incomingCall}}</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="user-select">
<div class="title">N/A</div>
<select>
{{#each callEntities}}
<optgroup label="{{groupName}}">
{{#each entities}}
<option value="{{id}}" data-type="{{module}}" {{#compare ../../callOption.callEntityId '===' id}}selected{{/compare}}>{{name}}</option>
{{/each}}
</optgroup>
{{/each}}
</select>
<div class="call-option user-menu-call {{#compare callOption.type '===' 'user-menu'}}active{{/compare}}">
<div class="radio-div">{{#monsterRadio "radio-large"}}<input type="radio" {{#compare callOption.type '===' 'user-menu'}}checked{{/compare}} name="calls.{{callflow}}" value="user-menu">{{/monsterRadio}}</div>
<div class="title">{{i18n.strategy.calls.incomingCall}}</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="user-select">
<div class="title">N/A</div>
<select>
{{#each callEntities}}
<optgroup label="{{groupName}}">
{{#each entities}}
<option value="{{id}}" data-type="{{module}}" {{#compare ../../callOption.callEntityId '===' id}}selected{{/compare}}>{{name}}</option>
{{/each}}
</optgroup>
{{/each}}
</select>
</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="menu-div {{#if menu}}has-menu" data-callflow="{{menu}}{{/if}}">
<div class="link">
<a href="#">
<div class="menu-icon">
<i class="fa fa-user fa-3x"></i>
</div>
<div class="link-icon">
<i class="fa fa-cog icon-small"></i>
<span>{{i18n.strategy.calls.virtualReceptionist}}</span>
</div>
</a>
</div>
</div>
</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="menu-div {{#if menu}}has-menu" data-callflow="{{menu}}{{/if}}">
<div class="link">
<a href="#">
<div class="menu-icon">
<i class="fa fa-user fa-3x"></i>
</div>
<div class="link-icon">
<i class="fa fa-cog icon-small"></i>
<span>{{i18n.strategy.calls.virtualReceptionist}}</span>
</div>
</a>
<div class="call-option user-voicemail-call {{#compare callOption.type '===' 'user-voicemail'}}active{{/compare}}">
<div class="radio-div">{{#monsterRadio "radio-large"}}<input type="radio" {{#compare callOption.type '===' 'user-voicemail'}}checked{{/compare}} name="calls.{{callflow}}" value="user-voicemail">{{/monsterRadio}}</div>
<div class="title">{{i18n.strategy.calls.incomingCall}}</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="user-select">
<div class="title">N/A</div>
<select>
{{#each callEntities}}
<optgroup label="{{groupName}}">
{{#each entities}}
<option value="{{id}}" data-type="{{module}}" {{#compare ../../callOption.callEntityId '===' id}}selected{{/compare}}>{{name}}</option>
{{/each}}
</optgroup>
{{/each}}
<optgroup label="{{i18n.strategy.calls.groupOther}}">
<option value="none" data-type="none" {{#compare callOption.callEntityId '===' 'none'}}selected{{/compare}}>{{i18n.strategy.calls.optionNone}}</option>
</optgroup>
</select>
</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="voicemail-select">
<div class="title">{{i18n.strategy.calls.voicemail}}</div>
<select>
{{#each voicemails}}
<option value="{{id}}" {{#compare ../callOption.voicemailId '===' id}}selected{{/compare}}>{{name}}</option>
{{/each}}
</select>
</div>
</div>
</div>
<div class="call-option user-voicemail-call {{#compare callOption.type '===' 'user-voicemail'}}active{{/compare}}">
<div class="radio-div">{{#monsterRadio "radio-large"}}<input type="radio" {{#compare callOption.type '===' 'user-voicemail'}}checked{{/compare}} name="calls.{{callflow}}" value="user-voicemail">{{/monsterRadio}}</div>
<div class="title">{{i18n.strategy.calls.incomingCall}}</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="user-select">
<div class="title">N/A</div>
<select>
{{#unless hideAdvancedCallflows}}
<div class="call-option advanced-callflow-call{{#compare callOption.type '===' 'advanced-callflow'}} active{{/compare}}">
<div class="radio-div">
{{#monsterRadio "radio-large"}}
<input type="radio" {{#compare callOption.type '===' 'advanced-callflow'}}checked{{/compare}} name="calls.{{callflow}}" value="advanced-callflow">
{{/monsterRadio}}
</div>
<div class="title">
{{i18n.strategy.calls.incomingCall}}
</div>
<div class="arrow-icon">
<i class="fa fa-arrow-down fa-lg"></i>
</div>
<div class="advancedCallflows-select">
<div class="title">{{i18n.strategy.callEntities.advancedCallflows}}</div>
<select>
{{#each callEntities}}
<optgroup label="{{groupName}}">
{{#compare groupType '===' 'advancedCallflows'}}
{{#each entities}}
<option value="{{id}}" data-type="{{module}}" {{#compare ../../callOption.callEntityId '===' id}}selected{{/compare}}>{{name}}</option>
<option value="{{id}}" data-type="{{module}}"{{#compare ../../../callOption.callEntityId '===' id}} selected{{/compare}}>{{name}}</option>
{{/each}}
</optgroup>
{{/compare}}
{{/each}}
<optgroup label="{{i18n.strategy.calls.groupOther}}">
<option value="none" data-type="none" {{#compare callOption.callEntityId '===' 'none'}}selected{{/compare}}>{{i18n.strategy.calls.optionNone}}</option>
</optgroup>
</select>
</div>
<div class="arrow-icon"><i class="fa fa-arrow-down fa-lg"></i></div>
<div class="voicemail-select">
<div class="title">{{i18n.strategy.calls.voicemail}}</div>
<select>
{{#each voicemails}}
<option value="{{id}}" {{#compare ../callOption.voicemailId '===' id}}selected{{/compare}}>{{name}}</option>
{{/each}}
</select>
</select>
</div>
</div>
</div>
{{/unless}}
</div>

Loading…
Cancel
Save