1 define([ 'app/cpeui/cpeui.module' ], function(cpeui) {
2 cpeui.register.controller('OpenTenantCtrl', function($scope, CpeuiSvc, CpeuiDialogs, $stateParams) {
4 $scope.curTenant = $stateParams.tenantid;
5 $scope.unisTables = {};
12 $scope.cesDisplayNames = {};
14 $scope.networkNames = {};
15 $scope.expandFlags = {
27 if ($stateParams.tenantTabName in tabIndexs) {
28 $scope.tab.tenantData = tabIndexs[$stateParams.tenantTabName];
30 $scope.tab.tenantData = tabIndexs.inventory;
33 CpeuiSvc.getTenantList(function(tenant_list) {
34 if (tenant_list.filter(t => t.name == $scope.curTenant).length == 0) {
35 window.location = "#/cpeui/admin/tenants";
40 $scope.updateUnis(function(unis){
41 CpeuiSvc.getCes(function(ces) {
42 $scope.ces = ces.filter(function(item) {
44 var filteredUnis = unis.filterByField('device', item["dev-id"]);
45 filteredUnis = filteredUnis.filterByField('prettyID', 'br-int', true);
46 filteredUnis = filteredUnis.filter(function(i){return !(i.prettyID && i.prettyID.startsWith('tun'));});
48 return (filteredUnis.length);
50 ces.forEach(function(ce){
51 $scope.cesDisplayNames[ce['dev-id']] = ce['device-name'] ? ce['device-name'] : ce['dev-id'];
53 $scope.updateEvcView();
57 CpeuiSvc.getNetworkNames(function(networks){
58 networks.forEach(function(net){
59 $scope.networkNames[net.uuid] = net.name;
63 CpeuiSvc.getProfiles(function(profiles) {
64 $scope.profiles = profiles;
68 $scope.updateUnis = function(callback) {
69 CpeuiSvc.getUnis(function(unis) {
70 unis.forEach(function(u) {
71 u.prettyID = u['uni-id'].split(":")[u['uni-id'].split(":").length - 1];
72 $scope.unisMap[u['uni-id']] = u;
74 $scope.unis = unis.filter(function(u){return u["tenant-id"] == $scope.curTenant;});
77 callback($scope.unis);
82 $scope.updateEvcView = function() {
83 CpeuiSvc.getServices($scope.curTenant, function(services) {
85 $scope.evcs = services.filter(function(svc){ return svc.evc != undefined;});
86 $scope.ipvcs = services.filter(function(svc){ return svc.ipvc != undefined;});
88 function mapUniToService(uni, service) {
89 var uniObj = $scope.unis.filterByField('uni-id',uni['uni-id'])[0];
90 if (uniObj === undefined) {
93 if (!uniObj.vlanToService) {
94 uniObj.vlanToService = [];
96 uniObj.hasService = true;
97 if (uni['evc-uni-ce-vlans'] && uni['evc-uni-ce-vlans']['evc-uni-ce-vlan']){
98 uni['evc-uni-ce-vlans']['evc-uni-ce-vlan'].forEach(function(v){
99 uniObj.vlanToService.push({"vlan":v.vid, "svc":service});
102 if (uni["ip-uni-id"]) {
103 var ipuni = $scope.unis.filterByField('uni-id',uni['uni-id'])[0];
104 ipuni["ip-unis"]["ip-uni"].forEach(function(ipu){
105 if (ipu['ip-uni-id'] == uni["ip-uni-id"]){
106 var vlan = ipu.vlan ? ipu.vlan : 0;
107 uniObj.vlanToService.push({"vlan":vlan, "svc":service});
111 uniObj.vlanToService.push({"vlan":0, "svc":service});
116 $scope.ipvcs.forEach(function(e){
117 if (e.ipvc.unis != undefined && e.ipvc.unis.uni != undefined){
118 e.ipvc.unis.uni.forEach(function(u){
119 u.device = u['uni-id'].split(":")[u['uni-id'].split(":").length-2];
120 u.prettyID = u['uni-id'].split(":")[u['uni-id'].split(":").length-1];
121 mapUniToService(u,e);
125 $scope.evcs.forEach(function(e){
126 e.isTree = (e.evc['evc-type'] == 'rooted-multipoint');
128 if (e.evc.unis != undefined && e.evc.unis.uni != undefined){
129 e.evc.unis.uni.forEach(function(u){
130 if (e.device2unis[$scope.unisMap[u['uni-id']].device] == undefined){
131 e.device2unis[$scope.unisMap[u['uni-id']].device] = [];
133 u.prettyID = u['uni-id'].split(":")[u['uni-id'].split(":").length - 1];
134 e.device2unis[$scope.unisMap[u['uni-id']].device].push(u);
135 mapUniToService(u,e);
140 CpeuiSvc.getAllIpUniSubnets(function(subnets){
141 $scope.subnets = subnets;
145 $scope.doesAllUniHasService = function(ceUnis) {
146 for (var i=0 ; i< ceUnis.length; ++i) {
147 if (!ceUnis[i].hasService) {
154 $scope.title = function(str) {
158 return str.split('-').map(function(s) {
159 return s[0].toUpperCase() + s.slice(1);
163 $scope.svcTypes = [ 'epl', 'evpl', 'eplan', 'evplan', 'eptree', 'evptree' ]
165 'epl' : 'point-to-point',
166 'evpl' : 'point-to-point',
167 'eplan' : 'multipoint-to-multipoint',
168 'evplan' : 'multipoint-to-multipoint',
169 'eptree' : 'rooted-multipoint',
170 'evptree' : 'rooted-multipoint'
173 var addEvcController = function($scope, $mdDialog) {
174 $scope.validate = function(form) {
175 form.svc_type.$setTouched(); // patch because angular bug http://stackoverflow.com/questions/36138442/error-not-showing-for-angular-material-md-select
181 $scope.evcDialog = new CpeuiDialogs.Dialog('AddEvc', {}, function(obj) {
182 CpeuiSvc.addEvc(obj, evcTypes[obj.svc_type], $scope.curTenant, function() {
183 $scope.updateEvcView();
185 }, addEvcController);
187 $scope.ipvcDialog = new CpeuiDialogs.Dialog('AddIpvc', {}, function(obj) {
188 CpeuiSvc.addIpvc(obj, $scope.curTenant, function() {
189 $scope.updateEvcView();
193 $scope.linkIpvcUniDialog = new CpeuiDialogs.Dialog('LinkIpvcUni', {},
195 CpeuiSvc.addIpvcUni(obj.svc_id, obj.uni['uni-id'], obj.ip_uni, obj.profile_name,
197 $scope.updateEvcView();
201 var ipUniDialogController = function($scope, $mdDialog) {
202 $scope.hasVlans = false;
203 if ($scope.params.uni['ip-unis'] && $scope.params.uni['ip-unis']['ip-uni']) {
204 var ipunis = $scope.params.uni['ip-unis']['ip-uni'];
205 for (i = 0; i < ipunis.length; i++) {
207 $scope.hasVlans = true;
213 $scope.ipUniDialog = new CpeuiDialogs.Dialog('AddIpUni', {}, function(obj) {
214 CpeuiSvc.addIpUni(obj['uni-id'], obj['ip-address'], obj.vlan, obj['segmentation-id'], function() {
217 }, ipUniDialogController);
219 $scope.openIpUniDialog = function(event,uni){
220 if (uni['ip-unis'] && (uni['ip-unis']['ip-uni'] != undefined)){
221 var ipunis = uni['ip-unis']['ip-uni'];
222 for (i = 0; i < ipunis.length; i++) {
223 if (!ipunis[i].vlan){
224 CpeuiDialogs.alert("Error","You Can't have more then one ip-uni with no vlan. please remove the non-vlan ip-uni before adding new.")
229 $scope.ipUniDialog.show(event,{'uniid':uni['uni-id'], uni:uni})
232 $scope.ipUniSubnetDialog = new CpeuiDialogs.Dialog('AddIpUniSubnet', {}, function(obj) {
233 CpeuiSvc.addIpUniSubnet(obj.uniid, obj.ipuniid, obj.subnet, obj.gateway, function() {
234 if ($scope.subnets[obj.uniid] == undefined){
235 $scope.subnets[obj.uniid] = {};
237 if ($scope.subnets[obj.uniid][obj.ipuniid] == undefined) {
238 $scope.subnets[obj.uniid][obj.ipuniid] = [];
240 $scope.subnets[obj.uniid][obj.ipuniid].push({
242 "ip-uni-id": obj.ipuniid,
243 "subnet": obj.subnet,
244 "gateway": obj.gateway
249 $scope.deleteIpUni = function(uniid, ipuni_id) {
250 CpeuiDialogs.confirm(function() {
251 CpeuiSvc.deleteIpUni(uniid, ipuni_id, function() {
252 $scope.updateEvcView(); // TODO update unis only
256 $scope.deleteIpvcUni = function(svc_id, uni_id, ipuni_id) {
257 CpeuiDialogs.confirm(function() {
258 CpeuiSvc.deleteIpvcUni(svc_id, uni_id, ipuni_id, function() {
259 $scope.updateEvcView();
263 $scope.getMefInterfaceIpvc = function(uni_id,ipuni_id){
264 var uni = $scope.unis.filterByField('uni-id',uni_id)[0];
265 if ((uni == undefined) || (uni['ip-unis'] == undefined) || (uni['ip-unis']['ip-uni'] == undefined)) {
268 return uni['ip-unis']['ip-uni'].filterByField('ip-uni-id',ipuni_id)[0];
271 $scope.deleteIpUniSubnet = function(uniid, ipuni_id, subnet) {
272 CpeuiDialogs.confirm(function() {
273 CpeuiSvc.deleteIpUniSubnet(uniid, ipuni_id, subnet, function() {
274 $scope.updateEvcView(); // TODO update unis only
279 $scope.deleteEvc = function(svcid) {
280 CpeuiDialogs.confirm(function() {
281 CpeuiSvc.removeEvc(svcid, function() {
282 $scope.updateEvcView();
287 $scope.deleteEvcUni = function(svc_id, uni_id) {
288 CpeuiDialogs.confirm(function() {
289 CpeuiSvc.deleteEvcUni(svc_id, uni_id, function() {
290 $scope.updateEvcView();
295 var linkEvcUniController = function($scope, $mdDialog, params) {
296 $scope.params = params;
300 $scope.deleteVlan = function(vlan) {
301 $scope.obj.vlans.splice($scope.obj.vlans.indexOf(vlan), 1);
303 $scope.addVlan = function(vlan) {
304 if ($scope.obj.vlans.indexOf(vlan) == -1) {
305 $scope.obj.vlans.push(vlan);
308 $('#vlan_input').val(undefined);
311 $scope.filterUsedUnis = function(evc){
313 if (u.prettyID == 'br-int') {
316 if (u.prettyID && u.prettyID.startsWith('tun')) {
319 if (evc.evc == undefined || evc.evc.unis.uni == undefined){
322 return evc.evc.unis.uni.filterByField('uni-id',u['uni-id']).length == 0;
327 $scope.linkEvcUniDialog = new CpeuiDialogs.Dialog('LinkEvcUni', {},
332 CpeuiSvc.addEvcUni(obj.svc_id, obj.uni_id, obj.role, obj.vlans, obj.profile_name,
334 $scope.updateEvcView();
336 }, linkEvcUniController);
338 var editVlanController = function($scope, $mdDialog, params) {
339 $scope.params = params;
341 $scope.deleteVlan = function(svc_id, uni_id, vlan, allvlans) {
342 CpeuiSvc.deleteVlan(svc_id, uni_id, vlan, function() {
343 allvlans.splice(allvlans.indexOf(vlan), 1)
346 $scope.addVlan = function(svc_id, uni_id, vlan, allvlans) {
347 if (allvlans == undefined) {
350 if (allvlans.indexOf(vlan) == -1) {
351 CpeuiSvc.addVlan(svc_id, uni_id, vlan, function() {
355 $('#vlan_input').val(undefined);
359 $scope.editVlanDialog = new CpeuiDialogs.Dialog('EditVlans', {}, undefined, editVlanController);
361 $scope.sortUni = function(uni) {
362 return uni['uni-id'];
365 $scope.isEmpty = function(obj){
366 return angular.equals({}, obj);