Commit ef15bbbb5e99d68e9cf7248fb00bfac4f6c70a97
add profile update modal popup
Showing
22 changed files
with
693 additions
and
287 deletions
400-SOURCECODE/AIAHTML5.ADMIN.API/Models/LicenseModel.cs
... | ... | @@ -168,7 +168,7 @@ namespace AIAHTML5.ADMIN.API.Models |
168 | 168 | LicenseObj.TotalRenewals = result[0].TotalRenewals; |
169 | 169 | LicenseObj.SubscriptionStartDate = (result[0].SubscriptionStartDate == null ? DateTime.MinValue : result[0].SubscriptionStartDate.Value); |
170 | 170 | LicenseObj.SubscriptionEndDate = (result[0].SubscriptionEndDate == null ? DateTime.MinValue : result[0].SubscriptionEndDate.Value); |
171 | - LicenseObj.RenewDate = (result[0].RenewalDate == null ? DateTime.MinValue : result[0].RenewalDate.Value); | |
171 | + LicenseObj.RenewDate = DateTime.Now.Date;// (result[0].RenewalDate == null ? DateTime.Now.Date : result[0].RenewalDate.Value); | |
172 | 172 | } |
173 | 173 | } |
174 | 174 | catch (Exception ex) { } | ... | ... |
400-SOURCECODE/AIAHTML5.Web/app/controllers/HomeController.js
... | ... | @@ -754,11 +754,23 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data |
754 | 754 | |
755 | 755 | //6. reset the isCommingSoonModel to false in local storage so that upcomming module pop up would not show again to the user after firts time |
756 | 756 | localStorage.setItem('isCommingSoonModel', false); |
757 | + | |
758 | + // for reseller type user first need to update profile | |
759 | + // only instructor ,not student | |
760 | + if (result.UserTypeId == 7 && result.EditionId == 1 && (result.FirstName == "" || result.EmailId == "" || result.LastName == "")) { | |
757 | 761 | |
758 | - $location.path('/'); | |
762 | + $('#updateprofile').html(LoginMessageConstants.USER_UPDATE_PROFILE); | |
763 | + | |
764 | + $("#profileUpdateModal").modal('show'); | |
765 | + | |
766 | + $(".modal-backdrop").css("opacity", ".5"); | |
767 | + | |
768 | + } | |
769 | + else { | |
770 | + $location.path('/'); | |
771 | + } | |
759 | 772 | } |
760 | - else | |
761 | - { | |
773 | + else { | |
762 | 774 | if ($('#dvTerms').length > 0) { |
763 | 775 | $('#dvTerms').html(result.TermsAndConditionsText); |
764 | 776 | } |
... | ... | @@ -1145,6 +1157,20 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data |
1145 | 1157 | $rootScope.userData = userInfo; |
1146 | 1158 | $rootScope.userModules = userInfo.Modules; |
1147 | 1159 | // ShowAssignedModulesPopup(userInfo.Modules);; |
1160 | + // for reseller type user first need to update profile | |
1161 | + // allow popup for instructor ,not for student. | |
1162 | + if (userInfo.UserTypeId == 7 && userInfo.EditionId == 1 && (userInfo.FirstName == "" || userInfo.EmailId == "" || userInfo.LastName == "")) { | |
1163 | + | |
1164 | + $('#updateprofile').html(LoginMessageConstants.USER_UPDATE_PROFILE); | |
1165 | + | |
1166 | + $("#profileUpdateModal").modal('show'); | |
1167 | + | |
1168 | + $(".modal-backdrop").css("opacity", ".5"); | |
1169 | + | |
1170 | + } | |
1171 | + else { | |
1172 | + $location.path('/'); | |
1173 | + } | |
1148 | 1174 | } |
1149 | 1175 | } |
1150 | 1176 | } |
... | ... | @@ -6866,7 +6892,11 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data |
6866 | 6892 | } |
6867 | 6893 | |
6868 | 6894 | $rootScope.reDirectURLToAdmin = function () { |
6869 | - window.location.href = "Admin"; | |
6895 | + $("#profileUpdateModal").modal('hide'); | |
6896 | + $timeout(function () { | |
6897 | + window.location.href = "Admin"; | |
6898 | + }, 300) | |
6899 | + | |
6870 | 6900 | }; |
6871 | 6901 | |
6872 | 6902 | $rootScope.SendAdminAccessRequestMail = function (userInfo) { | ... | ... |
400-SOURCECODE/AIAHTML5.Web/app/main/AIA.js
... | ... | @@ -388,6 +388,7 @@ AIA.constant("LoginConstants", { |
388 | 388 | }); |
389 | 389 | |
390 | 390 | AIA.constant("LoginMessageConstants", { |
391 | + "USER_UPDATE_PROFILE":"Please update your profile first", | |
391 | 392 | "USER_OR_PASSWORD_INCORRECT": "UserId or Password is incorrect.", |
392 | 393 | "RESET_PASSWORD": "Please check you email and reset your password.", |
393 | 394 | "USERID_SENT_IN_EMAIL": "We have sent you userId in email.", | ... | ... |
400-SOURCECODE/AIAHTML5.Web/index.aspx
... | ... | @@ -1081,6 +1081,30 @@ |
1081 | 1081 | |
1082 | 1082 | </div> |
1083 | 1083 | |
1084 | + <!--Profile not updated modal--> | |
1085 | + <div class=" fade ui-draggable in" data-keyboard="false" data-backdrop="static" id="profileUpdateModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" style="padding-left: 17px; display: none; z-index: 1200002; position: fixed; top: 0; overflow-x: hidden; overflow-y: auto; width:100% ;height:100%"> | |
1086 | + <div class="modal-dialog" role="document" style="width:400px"> | |
1087 | + <div class="modal-content"> | |
1088 | + <div class="modal-header ui-draggable-handle " style="background-color: #0095da; border-color: #007ab3;cursor:default; padding:5px"> | |
1089 | + <h4 style="color:#fff; text-align:left;">Alert</h4> | |
1090 | + </div> | |
1091 | + | |
1092 | + <div class="modal-body" style="width: 300px; height: 100px; overflow-x: auto;"> | |
1093 | + <div class="panel-body"> | |
1094 | + <div id="updateprofile" style="font-size: 15px;"></div> | |
1095 | + </div> | |
1096 | + </div> | |
1097 | + <div class="modal-footer ui-draggable-handle " style="color: #ffffff; cursor:default;"> | |
1098 | + | |
1099 | + <form class="form-horizontal"> | |
1100 | + | |
1101 | + <div style="float: right;"><button type="button" class="btn btn-primary btn-sm" data-toggle="modal" ng-click="reDirectURLToAdmin()">OK</button></div> | |
1102 | + </form> | |
1103 | + </div> | |
1104 | + </div> | |
1105 | + </div> | |
1106 | + </div> | |
1107 | + | |
1084 | 1108 | <!--Export Image Modal--> |
1085 | 1109 | <div class="modal fade export-image ui-draggable in" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" |
1086 | 1110 | style="z-index: 1200002;"> | ... | ... |
400-SOURCECODE/Admin/src/app/app.component.html
... | ... | @@ -33,7 +33,7 @@ |
33 | 33 | <a href="#" *ngIf="item.HeaderMenuStatus=='True'" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{item.HeaderMenuName}}<span class="caret"></span></a> |
34 | 34 | <ul class="dropdown-menu"> |
35 | 35 | <li *ngFor="let item1 of item.SubMenu"> |
36 | - <a *ngIf="item1.SubMenuStatus=='True'" [routerLink]="item1.SubMenuUrl">{{item1.SubMenuName}}</a> | |
36 | + <a *ngIf="item1.SubMenuStatus=='True'" [routerLink]="item1.SubMenuUrl" [id]="item1.SubMenuId">{{item1.SubMenuName}}</a> | |
37 | 37 | </li> |
38 | 38 | </ul> |
39 | 39 | </li> | ... | ... |
400-SOURCECODE/Admin/src/app/components/LicenseEntity/addlicense.component.html
... | ... | @@ -104,7 +104,7 @@ |
104 | 104 | </div> |
105 | 105 | <div class="checkbox" *ngIf="license.LicenseId > 0"> |
106 | 106 | <label> |
107 | - <input formControlName="renew" type="checkbox" /> <span style="font-weight: bold">Renew</span> | |
107 | + <input formControlName="renew" type="checkbox" (change)="reNewChange($event.target.checked)" /> <span style="font-weight: bold">Renew</span> | |
108 | 108 | </label> |
109 | 109 | </div> |
110 | 110 | </div> |
... | ... | @@ -276,7 +276,7 @@ |
276 | 276 | <div class="form-group marginTop5"> |
277 | 277 | <label for="Phone" class="col-sm-12 col-lg-6 control-label text-right-lg paddTop7 padd-left0" title="">Phone <span class="red">*</span> : </label> |
278 | 278 | <div class="col-sm-12 col-lg-6 padd-left0 padd-right0"> |
279 | - <input type="text" class="form-control input-sm" id="Phone" formControlName="phone" maxlength="30"> | |
279 | + <input type="text" class="form-control input-sm" id="Phone" formControlName="phone" maxlength="30" (keyup)="onKeyUp($event)"> | |
280 | 280 | <span class="help-block">(xxx-xxx-xxxx)</span> |
281 | 281 | <div *ngIf="insertUpdateLicenseFrm.controls.phone.hasError('required') && insertUpdateLicenseFrm.controls.phone.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Phone is required</div> |
282 | 282 | <div *ngIf="insertUpdateLicenseFrm.controls.phone.hasError('pattern') && (insertUpdateLicenseFrm.controls.phone.dirty || license.LicenseId > 0)" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Phone is invalid</div> |
... | ... | @@ -292,9 +292,9 @@ |
292 | 292 | <div class="form-group marginTop5"> |
293 | 293 | <label for="Email" class="col-sm-12 col-lg-6 control-label text-right-lg paddTop7 padd-left0" title="">Email ID <span class="red">*</span> : </label> |
294 | 294 | <div class="col-sm-12 col-lg-6 padd-left0 padd-right0"> |
295 | - <input type="email" class="form-control input-sm" id="Email" formControlName="emailId" maxlength="50"> | |
296 | - <div *ngIf="insertUpdateLicenseFrm.controls.emailId.hasError('required') && insertUpdateLicenseFrm.controls.emailId.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is required</div> | |
297 | - <div *ngIf="insertUpdateLicenseFrm.controls.emailId.hasError('email') && insertUpdateLicenseFrm.controls.emailId.value != '' && insertUpdateLicenseFrm.controls.emailId.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is invalid</div> | |
295 | + <input type="text" class="form-control input-sm" id="Email" formControlName="emailId" maxlength="50" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,3}$"> | |
296 | + <div *ngIf="insertUpdateLicenseFrm.controls.emailId.hasError('required') && !insertUpdateLicenseFrm.controls.emailId.value && insertUpdateLicenseFrm.controls.emailId.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is required</div> | |
297 | + <div *ngIf="insertUpdateLicenseFrm.controls.emailId.invalid && insertUpdateLicenseFrm.controls.emailId.value" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is invalid</div> | |
298 | 298 | </div> |
299 | 299 | </div> |
300 | 300 | </div> | ... | ... |
400-SOURCECODE/Admin/src/app/components/LicenseEntity/addlicense.component.ts
... | ... | @@ -35,15 +35,15 @@ export class AddLicense implements OnInit { |
35 | 35 | divClass: string = ''; |
36 | 36 | topPos: string = '2000px'; |
37 | 37 | datePipe: DatePipe = new DatePipe('en-US'); |
38 | - bsValue1: Date = null;//new Date(); | |
38 | + bsValue1: Date =new Date(); | |
39 | 39 | bsValue2: Date = null;//new Date(); |
40 | 40 | bsValue3: Date = null;//new Date(); |
41 | 41 | modalRef: BsModalRef; |
42 | 42 | editionLoginsText: string; |
43 | 43 | rowIndex: number = 0; |
44 | 44 | ParamsObj: any; |
45 | - // minDate = new Date(1110, 11, 1); | |
46 | 45 | minDate = new Date(); |
46 | + startDate= new Date(); | |
47 | 47 | maxDate = new Date(9999, 11, 31); |
48 | 48 | bsConfig: Partial<BsDatepickerConfig>; |
49 | 49 | dateStartInvalid: boolean = false; |
... | ... | @@ -63,39 +63,40 @@ export class AddLicense implements OnInit { |
63 | 63 | this.editionLoginsText = ''; |
64 | 64 | this.insertUpdateLicenseFrm = this.fb.group({ |
65 | 65 | licenseId: [0], |
66 | - accountNumber: ['', Validators.required], | |
66 | + accountNumber: ['', [Validators.required,this.noWhitespaceValidator]], | |
67 | 67 | accountTypeId: [0, Validators.min(1)], |
68 | 68 | productId: [''], |
69 | - licenseeFirstName: ['', Validators.required], | |
70 | - licenseeLastName: ['', Validators.required], | |
69 | + licenseeFirstName: ['', [Validators.required,this.noWhitespaceValidator]], | |
70 | + licenseeLastName: ['', [Validators.required,this.noWhitespaceValidator]], | |
71 | 71 | licenseTypeId: [1], |
72 | - institutionName: ['', Validators.required], | |
73 | - address1: ['', Validators.required], | |
72 | + institutionName: ['', [Validators.required,this.noWhitespaceValidator]], | |
73 | + address1: ['', [Validators.required,this.noWhitespaceValidator]], | |
74 | 74 | address2: [''], |
75 | - city: ['', Validators.required], | |
75 | + city: ['', [Validators.required,this.noWhitespaceValidator]], | |
76 | 76 | stateId: [0, Validators.min(1)], |
77 | 77 | countryId: [0, Validators.min(1)], |
78 | - zip: ['', Validators.required], | |
79 | - emailId: ['', [Validators.email, Validators.required]], | |
80 | - phone: ['', [Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$')]], | |
78 | + zip: ['', [Validators.required,this.noWhitespaceValidator]], | |
79 | + emailId: ['', [Validators.required,this.noWhitespaceValidator]], | |
80 | + phone: ['', [Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$'),this.noWhitespaceValidator]], | |
81 | 81 | editionLoginArr: this.fb.array([]), |
82 | 82 | editionLogins: [''], |
83 | 83 | totalLogins: [0], |
84 | - subscriptionPrice: ['', [Validators.required, Validators.pattern('[0-9.]*')]], | |
85 | - subscriptionStartDate: ['', Validators.required], | |
84 | + subscriptionPrice: [0, [Validators.required, Validators.pattern('[0-9.]*'),this.noWhitespaceValidator]], | |
85 | + subscriptionStartDate: [this.startDate, Validators.required], | |
86 | 86 | subscriptionEndDate: ['', Validators.required], |
87 | - noOfImages: [0, [Validators.required, Validators.pattern('[0-9]*')]], | |
88 | - masterSiteUrl: ['a', Validators.required], | |
87 | + noOfImages: ['', [Validators.required, Validators.pattern('[0-9]*'),this.noWhitespaceValidator]], | |
88 | + masterSiteUrl: ['a', [Validators.required,this.noWhitespaceValidator]], | |
89 | 89 | siteUrlFrom: [''], |
90 | 90 | siteUrlTo: [''], |
91 | - login: ['a', [Validators.required, Validators.minLength(8)]], | |
92 | - password: ['a', [Validators.required, Validators.minLength(8)]], | |
91 | + login: ['a', [Validators.required, Validators.minLength(8),this.noWhitespaceValidator]], | |
92 | + password: ['a', [Validators.required, Validators.minLength(8),this.noWhitespaceValidator]], | |
93 | 93 | securityQuestionId: [0, Validators.min(1)], |
94 | - answer: ['a', Validators.required], | |
94 | + answer: ['a', [Validators.required,this.noWhitespaceValidator]], | |
95 | 95 | testLicenseEditionId: [1], |
96 | 96 | creatorId: [this.globalService.loggedInUser.Id], |
97 | 97 | renew: [false], |
98 | 98 | renewDate: [''], |
99 | + //renewDate: ['', Validators.required], | |
99 | 100 | totalRenewals: [0], |
100 | 101 | isActive: ['false'] |
101 | 102 | }); |
... | ... | @@ -133,7 +134,76 @@ export class AddLicense implements OnInit { |
133 | 134 | }); |
134 | 135 | }, error => this.error = <any>error); |
135 | 136 | } |
137 | + public noWhitespaceValidator(control: FormControl) { | |
138 | + // new validation for intial whaite space | |
139 | + //****Birendra *****/ | |
140 | + var isValid=false; | |
141 | + if(control.value!=null) | |
142 | + { | |
143 | + var controlLen=control.value.length; | |
144 | + if(controlLen==undefined)//undefined for integer value | |
145 | + { | |
146 | + isValid=true; | |
147 | + } | |
148 | + else if(controlLen!=0) | |
149 | + { | |
150 | + const isWhitespace = (control.value || '').trim().length === 0; | |
151 | + isValid = !isWhitespace; | |
152 | + if(!isValid) | |
153 | + { | |
154 | + control.setValue(''); | |
155 | + | |
156 | + } | |
157 | + } | |
158 | + } | |
159 | + // can use also on page of input control | |
160 | + // | |
161 | + return isValid ? null: { 'whitespace': true }; | |
162 | + | |
163 | + } | |
164 | + | |
165 | + onKeyUp(event: any) { | |
166 | + var mobno = event.target.value; | |
167 | + var newnum=mobno; | |
168 | + if(mobno!="" && event.key!="Backspace") | |
169 | + { | |
170 | + var tempArr = mobno.split('-'); | |
171 | + | |
172 | + if(tempArr.length==1) | |
173 | + { | |
174 | + var countdigit=tempArr[0].length; | |
175 | + newnum=tempArr[0]; | |
176 | + if(countdigit==3) | |
177 | + { | |
178 | + newnum=tempArr[0]+"-"; | |
179 | + } | |
180 | + else if(countdigit>3) | |
181 | + { | |
182 | + newnum=tempArr[0].substr(0,3)+"-"+tempArr[0].substr(3,1); | |
183 | + } | |
184 | + | |
185 | + } | |
186 | + else if(tempArr.length==2) | |
187 | + { | |
188 | + newnum=tempArr[0]+"-"+tempArr[1]; | |
189 | + var countdigit=tempArr[1].length; | |
190 | + if(countdigit==3) | |
191 | + { | |
192 | + newnum=tempArr[0]+"-"+tempArr[1]+"-"; | |
193 | + } | |
194 | + else if(countdigit>3) | |
195 | + { | |
196 | + newnum= tempArr[0]+"-"+tempArr[1].substr(0,3)+"-"+tempArr[1].substr(3,1); | |
197 | + } | |
198 | + } | |
199 | + else | |
200 | + { | |
201 | + newnum=tempArr[0]+"-"+tempArr[1]+"-"+tempArr[2]; | |
202 | + } | |
136 | 203 | |
204 | + } | |
205 | + this.insertUpdateLicenseFrm.controls['phone'].setValue(newnum); | |
206 | +}; | |
137 | 207 | |
138 | 208 | openModal(template: TemplateRef<any>) { |
139 | 209 | this.modalRef = this.modalService.show(template); |
... | ... | @@ -157,6 +227,46 @@ export class AddLicense implements OnInit { |
157 | 227 | this.OnLoginBlur(); |
158 | 228 | } |
159 | 229 | |
230 | + // clear alert on check/uncheck renew checkbox | |
231 | + reNewChange(isChecked: boolean) | |
232 | + { | |
233 | + this.alerts = ''; | |
234 | + this.NumberOfRows=0; | |
235 | + //renew date | |
236 | + if(isChecked) | |
237 | + { | |
238 | + this.insertUpdateLicenseFrm.controls['renewDate'].clearValidators(); | |
239 | + this.insertUpdateLicenseFrm.controls['renewDate'].setValidators(Validators.required); | |
240 | + } | |
241 | + else | |
242 | + { | |
243 | + this.insertUpdateLicenseFrm.controls['renewDate'].clearValidators(); | |
244 | + } | |
245 | + this.insertUpdateLicenseFrm.controls['renewDate'].updateValueAndValidity(); | |
246 | + | |
247 | + if (this.insertUpdateLicenseFrm.controls['licenseTypeId'].value == 2) { | |
248 | + this.insertUpdateLicenseFrm.controls['editionLoginArr'].value.forEach(element => { | |
249 | + if(this.NumberOfRows >1) | |
250 | + { | |
251 | + this.alerts = "<span>Please select one edition only.</span>"; | |
252 | + } | |
253 | + else{ | |
254 | + if (element.Checked == 1 && element.Login > 0) { | |
255 | + this.NumberOfRows+=1 | |
256 | + } | |
257 | + else if (element.Checked == 1) | |
258 | + { | |
259 | + this.NumberOfRows+=1 | |
260 | + } | |
261 | + | |
262 | + } | |
263 | + }); | |
264 | + if(this.totalLogins>1) | |
265 | + { | |
266 | + this.alerts += "<br><span>For single license total login can not be more than one.</span>"; | |
267 | + } | |
268 | + } | |
269 | + } | |
160 | 270 | DateChange(dateValue: any) { |
161 | 271 | this.alerts = ''; |
162 | 272 | this.NumberOfRows=0; |
... | ... | @@ -232,11 +342,7 @@ export class AddLicense implements OnInit { |
232 | 342 | if (Date.parse(this.insertUpdateLicenseFrm.controls['subscriptionStartDate'].value) > |
233 | 343 | Date.parse(this.insertUpdateLicenseFrm.controls['subscriptionEndDate'].value)) { |
234 | 344 | this.alerts += '<span>Subscription start date must be less than the subscription end date</span><br/>'; |
235 | - } | |
236 | - // if (Date.parse(this.insertUpdateLicenseFrm.controls['subscriptionStartDate'].value) > | |
237 | - // Date.parse(this.insertUpdateLicenseFrm.controls['renewDate'].value)) { | |
238 | - // this.alerts += '<span>Subscription start date must be less than the subscription renew date</span><br/>'; | |
239 | - //} | |
345 | + } | |
240 | 346 | } |
241 | 347 | } |
242 | 348 | } |
... | ... | @@ -289,7 +395,7 @@ export class AddLicense implements OnInit { |
289 | 395 | if (this.license.SiteUrlTo == null) { |
290 | 396 | this.license.SiteUrlTo = ''; |
291 | 397 | } |
292 | - this.LicenseTypeChanged(this.license.LicenseTypeId); | |
398 | + this.LicenseTypeChanged(this.license.LicenseTypeId,this.license.SubscriptionStartDate); | |
293 | 399 | this.insertUpdateLicenseFrm.controls['licenseId'].setValue(this.license.LicenseId); |
294 | 400 | this.insertUpdateLicenseFrm.controls['licenseTypeId'].setValue(this.license.LicenseTypeId); |
295 | 401 | this.insertUpdateLicenseFrm.controls['accountNumber'].setValue(this.license.AccountNumber); |
... | ... | @@ -300,7 +406,7 @@ export class AddLicense implements OnInit { |
300 | 406 | this.insertUpdateLicenseFrm.controls['institutionName'].setValue(this.license.InstitutionName); |
301 | 407 | this.insertUpdateLicenseFrm.controls['address1'].setValue(this.license.Address1); |
302 | 408 | this.insertUpdateLicenseFrm.controls['address2'].setValue(this.license.Address2); |
303 | - this.insertUpdateLicenseFrm.controls['city'].setValue(this.license.City); | |
409 | + this.insertUpdateLicenseFrm.controls['city'].setValue(this.license.City); | |
304 | 410 | this.insertUpdateLicenseFrm.controls['stateId'].setValue(this.license.StateId); |
305 | 411 | this.insertUpdateLicenseFrm.controls['countryId'].setValue(this.license.CountryId); |
306 | 412 | this.insertUpdateLicenseFrm.controls['zip'].setValue(this.license.Zip); |
... | ... | @@ -310,7 +416,7 @@ export class AddLicense implements OnInit { |
310 | 416 | this.insertUpdateLicenseFrm.controls['subscriptionPrice'].setValue(this.license.Price); |
311 | 417 | this.insertUpdateLicenseFrm.controls['subscriptionStartDate'].setValue(this.datePipe.transform(this.license.SubscriptionStartDate, 'MM/dd/yyyy')); |
312 | 418 | this.insertUpdateLicenseFrm.controls['subscriptionEndDate'].setValue(this.datePipe.transform(this.license.SubscriptionEndDate, 'MM/dd/yyyy')); |
313 | - this.insertUpdateLicenseFrm.controls['renewDate'].setValue(this.datePipe.transform(this.license.Renewdate, 'MM/dd/yyyy')); | |
419 | + this.insertUpdateLicenseFrm.controls['renewDate'].setValue(this.datePipe.transform(this.license.RenewDate, 'MM/dd/yyyy')); | |
314 | 420 | this.insertUpdateLicenseFrm.controls['noOfImages'].setValue(this.license.NoOfImages); |
315 | 421 | this.insertUpdateLicenseFrm.controls['masterSiteUrl'].setValue(this.license.MasterSiteUrl); |
316 | 422 | this.insertUpdateLicenseFrm.controls['siteUrlFrom'].setValue(this.license.SiteUrlFrom); |
... | ... | @@ -329,14 +435,14 @@ export class AddLicense implements OnInit { |
329 | 435 | this.insertUpdateLicenseFrm.controls['isActive'].setValue('false'); |
330 | 436 | } |
331 | 437 | |
332 | - this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
333 | - if (this.lstCountry.find(C => C.Id == this.license.CountryId).CountryName != "United States") { | |
334 | - this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required]); | |
335 | - } | |
336 | - else { | |
337 | - this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$')]); | |
338 | - } | |
339 | - this.insertUpdateLicenseFrm.controls['phone'].updateValueAndValidity(); | |
438 | + // this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
439 | + // if (this.lstCountry.find(C => C.Id == this.license.CountryId).CountryName != "United States") { | |
440 | + // this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required,this.noWhitespaceValidator]); | |
441 | + // } | |
442 | + // else { | |
443 | + // this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$'),this.noWhitespaceValidator]); | |
444 | + // } | |
445 | + // this.insertUpdateLicenseFrm.controls['phone'].updateValueAndValidity(); | |
340 | 446 | this.insertUpdateLicenseFrm.controls['phone'].setValue(this.license.Phone); |
341 | 447 | |
342 | 448 | if (this.license.EditionLogins == null) return; |
... | ... | @@ -390,9 +496,7 @@ export class AddLicense implements OnInit { |
390 | 496 | else{ |
391 | 497 | this._confirmService.activate("License saved successfully.", "alertMsg"); |
392 | 498 | } |
393 | - | |
394 | - //this.modalAlerts = "<p>License saved successfully.</p>"; | |
395 | - // this.modalRef = this.modalService.show(template); | |
499 | + | |
396 | 500 | } |
397 | 501 | } |
398 | 502 | |
... | ... | @@ -401,8 +505,7 @@ export class AddLicense implements OnInit { |
401 | 505 | this.alerts = "<span>License update unsuccessfull.</span>"; |
402 | 506 | } else { |
403 | 507 | this._confirmService.activate("License updated successfully.", "alertMsg"); |
404 | - // this.modalAlerts = "<p>License updated successfully.</p>"; | |
405 | - //this.modalRef = this.modalService.show(template); | |
508 | + | |
406 | 509 | } |
407 | 510 | } |
408 | 511 | |
... | ... | @@ -471,7 +574,15 @@ export class AddLicense implements OnInit { |
471 | 574 | } |
472 | 575 | } |
473 | 576 | |
474 | - LicenseTypeChanged(LicenseTypeId: number) { | |
577 | + LicenseTypeChanged(LicenseTypeId: number,startDate: Date) { | |
578 | + | |
579 | + var currentDate = new Date(); | |
580 | + | |
581 | + if(startDate==undefined) | |
582 | + { | |
583 | + this.insertUpdateLicenseFrm.controls['subscriptionStartDate'].setValue(currentDate); | |
584 | + | |
585 | + } | |
475 | 586 | this.totalLogins = 0; |
476 | 587 | this.editionLoginsText = ''; |
477 | 588 | this.license.TotalLogins = this.totalLogins; |
... | ... | @@ -483,6 +594,7 @@ export class AddLicense implements OnInit { |
483 | 594 | this.insertUpdateLicenseFrm.controls['subscriptionPrice'].setValue(''); |
484 | 595 | this.insertUpdateLicenseFrm.controls['masterSiteUrl'].setValue(''); |
485 | 596 | this.insertUpdateLicenseFrm.controls['accountNumber'].setValue(''); |
597 | + | |
486 | 598 | this.lstEditionLogins = new Array(); |
487 | 599 | this.lstEdition.forEach(element => { |
488 | 600 | this.lstEditionLogins.push({ Id: element.Id, Title: element.Title, Login: 0 }); |
... | ... | @@ -542,7 +654,7 @@ export class AddLicense implements OnInit { |
542 | 654 | if (this.insertUpdateLicenseFrm.controls['renew'].value == true){ |
543 | 655 | if (Date.parse(this.insertUpdateLicenseFrm.controls['subscriptionStartDate'].value) < |
544 | 656 | Date.parse(this.license.SubscriptionEndDate.toString())) { |
545 | - this.alerts += '<span>The new subscription start date should be greater than the previous subscription end date</span>'; | |
657 | + this.alerts += '<span>The new subscription start date should be greater than the previous subscription end date('+this.datePipe.transform(this.license.SubscriptionEndDate, 'MM/dd/yyyy')+')</span>'; | |
546 | 658 | } |
547 | 659 | } |
548 | 660 | this.editionLoginsText = ''; |
... | ... | @@ -552,8 +664,7 @@ export class AddLicense implements OnInit { |
552 | 664 | this.editionLoginsText += element.Id.toString() + '-' + element.Login + '|'; |
553 | 665 | } |
554 | 666 | }); |
555 | - } | |
556 | - | |
667 | + } | |
557 | 668 | else { |
558 | 669 | this.insertUpdateLicenseFrm.controls['editionLoginArr'].value.forEach(element => { |
559 | 670 | if (element.Login > 0) { |
... | ... | @@ -612,16 +723,16 @@ export class AddLicense implements OnInit { |
612 | 723 | if (this.lstCountry.find(C => C.Id == this.license.CountryId).CountryName != "United States") { |
613 | 724 | this.license.StateId = this.lstState.find(C => C.StateName == "Other").Id; |
614 | 725 | this.insertUpdateLicenseFrm.controls['stateId'].setValue(this.license.StateId); |
615 | - this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
616 | - this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required]); | |
726 | + // this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
727 | + // this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required,this.noWhitespaceValidator]); | |
617 | 728 | } |
618 | 729 | else { |
619 | 730 | this.license.StateId = 0; |
620 | 731 | this.insertUpdateLicenseFrm.controls['stateId'].setValue(this.license.StateId); |
621 | - this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
622 | - this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$')]); | |
732 | + // this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
733 | + // this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$'),this.noWhitespaceValidator]); | |
623 | 734 | } |
624 | - this.insertUpdateLicenseFrm.controls['phone'].updateValueAndValidity(); | |
735 | + //this.insertUpdateLicenseFrm.controls['phone'].updateValueAndValidity(); | |
625 | 736 | } |
626 | 737 | |
627 | 738 | OnStateChange(element: any) { |
... | ... | @@ -629,16 +740,16 @@ export class AddLicense implements OnInit { |
629 | 740 | if (this.lstState.find(C => C.Id == this.license.StateId).StateName != "Other") { |
630 | 741 | this.license.CountryId = this.lstCountry.find(C => C.CountryName == "United States").Id; |
631 | 742 | this.insertUpdateLicenseFrm.controls['countryId'].setValue(this.license.CountryId); |
632 | - this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
633 | - this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$')]); | |
743 | + // this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
744 | + // this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$'),this.noWhitespaceValidator]); | |
634 | 745 | } |
635 | 746 | else { |
636 | 747 | this.license.CountryId = 0; |
637 | 748 | this.insertUpdateLicenseFrm.controls['countryId'].setValue(this.license.CountryId); |
638 | - this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
639 | - this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required]); | |
749 | + // this.insertUpdateLicenseFrm.controls['phone'].clearValidators(); | |
750 | + // this.insertUpdateLicenseFrm.controls['phone'].setValidators([Validators.required,this.noWhitespaceValidator]); | |
640 | 751 | } |
641 | - this.insertUpdateLicenseFrm.controls['phone'].updateValueAndValidity(); | |
752 | + // this.insertUpdateLicenseFrm.controls['phone'].updateValueAndValidity(); | |
642 | 753 | } |
643 | 754 | |
644 | 755 | SubscriptionPriceBlur() { | ... | ... |
400-SOURCECODE/Admin/src/app/components/LicenseEntity/editlicensebasicsettings.component.html
... | ... | @@ -97,9 +97,9 @@ |
97 | 97 | <div class="form-group"> |
98 | 98 | <label for="inputEmail3" class="col-sm-4 control-label">Email ID <span class="red">*</span> :</label> |
99 | 99 | <div class="col-sm-7"> |
100 | - <input type="email" class="form-control input-sm" id="Email" formControlName="emailId" maxlength="50"> | |
101 | - <div *ngIf="updateLicenseBasicSettingsFrm.controls.emailId.hasError('required') && updateLicenseBasicSettingsFrm.controls.emailId.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is required</div> | |
102 | - <div *ngIf="updateLicenseBasicSettingsFrm.controls.emailId.hasError('email') && updateLicenseBasicSettingsFrm.controls.emailId.value != '' && updateLicenseBasicSettingsFrm.controls.emailId.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is invalid</div> | |
100 | + <input type="text" class="form-control input-sm" id="Email" formControlName="emailId" maxlength="50" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,3}$"> | |
101 | + <div *ngIf="updateLicenseBasicSettingsFrm.controls.emailId.hasError('required') && !updateLicenseBasicSettingsFrm.controls.emailId.value && updateLicenseBasicSettingsFrm.controls.emailId.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is required</div> | |
102 | + <div *ngIf="updateLicenseBasicSettingsFrm.controls.emailId.invalid && updateLicenseBasicSettingsFrm.controls.emailId.value" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is invalid</div> | |
103 | 103 | </div> |
104 | 104 | </div> |
105 | 105 | |
... | ... | @@ -161,7 +161,7 @@ |
161 | 161 | <div class="form-group"> |
162 | 162 | <label for="inputEmail3" class="col-sm-4 control-label">Phone <span class="red">*</span> :</label> |
163 | 163 | <div class="col-sm-7"> |
164 | - <input type="text" class="form-control input-sm" id="Phone" formControlName="phone" maxlength="30"> | |
164 | + <input type="text" class="form-control input-sm" id="Phone" formControlName="phone" maxlength="30" (keyup)="onKeyUp($event)"> | |
165 | 165 | <span class="help-block">(xxx-xxx-xxxx)</span> |
166 | 166 | <div *ngIf="updateLicenseBasicSettingsFrm.controls.phone.hasError('required') && updateLicenseBasicSettingsFrm.controls.phone.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Phone is required</div> |
167 | 167 | <div *ngIf="updateLicenseBasicSettingsFrm.controls.phone.hasError('pattern') && updateLicenseBasicSettingsFrm.controls.phone.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Phone is invalid</div> | ... | ... |
400-SOURCECODE/Admin/src/app/components/LicenseEntity/editlicensebasicsettings.component.ts
... | ... | @@ -48,23 +48,93 @@ export class EditLicenseBasicSettings implements OnInit { |
48 | 48 | this.lastScrollPos = 0; |
49 | 49 | this.updateLicenseBasicSettingsFrm = this.fb.group({ |
50 | 50 | licenseId: [0], |
51 | - accountNumber: ['', Validators.required], | |
52 | - licenseeFirstName: ['', Validators.required], | |
53 | - licenseeLastName: ['', Validators.required], | |
54 | - institutionName: ['', Validators.required], | |
55 | - address1: ['', Validators.required], | |
51 | + accountNumber: ['', [Validators.required,this.noWhitespaceValidator]], | |
52 | + licenseeFirstName: ['', [Validators.required,this.noWhitespaceValidator]], | |
53 | + licenseeLastName: ['', [Validators.required,this.noWhitespaceValidator]], | |
54 | + institutionName: ['', [Validators.required,this.noWhitespaceValidator]], | |
55 | + address1: ['', [Validators.required,this.noWhitespaceValidator]], | |
56 | 56 | address2: [''], |
57 | - city: ['', Validators.required], | |
57 | + city: ['', [Validators.required,this.noWhitespaceValidator]], | |
58 | 58 | stateId: [0], |
59 | 59 | countryId: [0], |
60 | - zip: ['', Validators.required], | |
61 | - emailId: ['', [Validators.required, Validators.email]], | |
62 | - phone: ['', [Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$')]], | |
60 | + zip: ['', [Validators.required,this.noWhitespaceValidator]], | |
61 | + emailId: ['', [Validators.required,this.noWhitespaceValidator]], | |
62 | + phone: ['', [Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$'),this.noWhitespaceValidator]], | |
63 | 63 | }); |
64 | 64 | this.GetCountry(); |
65 | 65 | this.GetState(); |
66 | 66 | this.GetLicenseAccounts(); |
67 | 67 | } |
68 | + public noWhitespaceValidator(control: FormControl) { | |
69 | + // new validation for intial whaite space | |
70 | + //****Birendra *****/ | |
71 | + var isValid=false; | |
72 | + if(control.value!=null) | |
73 | + { | |
74 | + var controlLen=control.value.length; | |
75 | + if(controlLen==undefined)//undefined for integer value | |
76 | + { | |
77 | + isValid=true; | |
78 | + } | |
79 | + else if(controlLen!=0) | |
80 | + { | |
81 | + const isWhitespace = (control.value || '').trim().length === 0; | |
82 | + isValid = !isWhitespace; | |
83 | + if(!isValid) | |
84 | + { | |
85 | + control.setValue(''); | |
86 | + | |
87 | + } | |
88 | + } | |
89 | + } | |
90 | + // can use also on page of input control | |
91 | + // | |
92 | + return isValid ? null: { 'whitespace': true }; | |
93 | + | |
94 | + } | |
95 | + onKeyUp(event: any) { | |
96 | + var mobno = event.target.value; | |
97 | + var newnum=mobno; | |
98 | + if(mobno!="" && event.key!="Backspace") | |
99 | + { | |
100 | + var tempArr = mobno.split('-'); | |
101 | + | |
102 | + if(tempArr.length==1) | |
103 | + { | |
104 | + var countdigit=tempArr[0].length; | |
105 | + newnum=tempArr[0]; | |
106 | + if(countdigit==3) | |
107 | + { | |
108 | + newnum=tempArr[0]+"-"; | |
109 | + } | |
110 | + else if(countdigit>3) | |
111 | + { | |
112 | + newnum=tempArr[0].substr(0,3)+"-"+tempArr[0].substr(3,1); | |
113 | + } | |
114 | + | |
115 | + } | |
116 | + else if(tempArr.length==2) | |
117 | + { | |
118 | + newnum=tempArr[0]+"-"+tempArr[1]; | |
119 | + var countdigit=tempArr[1].length; | |
120 | + if(countdigit==3) | |
121 | + { | |
122 | + newnum=tempArr[0]+"-"+tempArr[1]+"-"; | |
123 | + } | |
124 | + else if(countdigit>3) | |
125 | + { | |
126 | + newnum= tempArr[0]+"-"+tempArr[1].substr(0,3)+"-"+tempArr[1].substr(3,1); | |
127 | + } | |
128 | + } | |
129 | + else | |
130 | + { | |
131 | + newnum=tempArr[0]+"-"+tempArr[1]+"-"+tempArr[2]; | |
132 | + } | |
133 | + | |
134 | + } | |
135 | + this.updateLicenseBasicSettingsFrm.controls['phone'].setValue(newnum); | |
136 | + | |
137 | +}; | |
68 | 138 | |
69 | 139 | openModal(template: TemplateRef<any>) { |
70 | 140 | this.modalRef = this.modalService.show(template); | ... | ... |
400-SOURCECODE/Admin/src/app/components/LicenseEntity/searchlicense.component.ts
... | ... | @@ -177,7 +177,7 @@ export class SearchLicense implements OnInit, AfterViewChecked { |
177 | 177 | this.license = this.licenses[0]; |
178 | 178 | this.searchLicenseFrm.setControl('licenses', this.fb.array(this.licenses)); |
179 | 179 | if(this.selectedId > -1){ |
180 | - this.license = this.searchLicenseFrm.controls['licenses'].value.find(C => C.LicenseId = this.selectedId); | |
180 | + this.license = this.searchLicenseFrm.controls['licenses'].value.find(C => C.LicenseId == this.selectedId); | |
181 | 181 | } |
182 | 182 | if (this.licenses.length > 0) { |
183 | 183 | this.NoRecord = ''; | ... | ... |
400-SOURCECODE/Admin/src/app/components/LicenseEntity/sitelicenseaccount.component.html
... | ... | @@ -336,7 +336,7 @@ |
336 | 336 | <label for="Phone" class="col-sm-12 col-lg-6 control-label text-right-lg paddTop7 padd-left0">Phone <span class="red">*</span> :</label> |
337 | 337 | </div> |
338 | 338 | <div class="col-sm-12 col-lg-6 padd-left0 padd-right0"> |
339 | - <input type="phone" class="form-control input-sm" id="Phone" formControlName="phone" maxlength="30"> | |
339 | + <input type="phone" class="form-control input-sm" id="Phone" formControlName="phone" maxlength="30" (keyup)="onKeyUp($event)"> | |
340 | 340 | <!--<div *ngIf="insertUpdateSiteLicenseFrm.controls.phone.hasError('required') && insertUpdateSiteLicenseFrm.controls.phone.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Phone is required</div>--> |
341 | 341 | <span class="help-block">(xxx-xxx-xxxx)</span> |
342 | 342 | <div *ngIf="insertUpdateSiteLicenseFrm.controls.phone.hasError('required') && insertUpdateSiteLicenseFrm.controls.phone.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Phone is required</div> |
... | ... | @@ -362,7 +362,7 @@ |
362 | 362 | <div class="form-group marginTop5"> |
363 | 363 | <label for="ClientAdminEmail" class="col-sm-12 col-lg-6 control-label text-right-lg paddTop7 padd-left0">Client Admin Email ID :</label> |
364 | 364 | <div class="col-sm-12 col-lg-6 padd-left0 padd-right0"> |
365 | - <input type="email" class="form-control input-sm" id="ClientAdminEmail" formControlName="clientAdminEmail" maxlength="50"> | |
365 | + <input type="text" class="form-control input-sm" id="ClientAdminEmail" formControlName="clientAdminEmail" maxlength="50" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,3}$"> | |
366 | 366 | </div> |
367 | 367 | </div> |
368 | 368 | </div> | ... | ... |
400-SOURCECODE/Admin/src/app/components/LicenseEntity/sitelicenseaccount.component.ts
... | ... | @@ -63,22 +63,22 @@ export class SiteLicenseAccount implements OnInit { |
63 | 63 | licenseId: [0], |
64 | 64 | accountNumber: [{value: '', disabled: true}], |
65 | 65 | siteId: [0], |
66 | - siteUrl: ['', Validators.required], | |
66 | + siteUrl: ['', [Validators.required,this.noWhitespaceValidator]], | |
67 | 67 | siteUrlTo: [''], |
68 | 68 | siteMasterUrlTo: [''], |
69 | 69 | buildAccName: [''], |
70 | - institutionName: ['', Validators.required], | |
70 | + institutionName: ['', [Validators.required,this.noWhitespaceValidator]], | |
71 | 71 | departmentName: [''], |
72 | - address1: ['', Validators.required], | |
72 | + address1: ['', [Validators.required,this.noWhitespaceValidator]], | |
73 | 73 | address2: [''], |
74 | - city: ['', Validators.required], | |
74 | + city: ['', [Validators.required,this.noWhitespaceValidator]], | |
75 | 75 | countryId: [0, Validators.min(1)], |
76 | 76 | stateId: [0, Validators.min(1)], |
77 | - zip: ['', Validators.required], | |
78 | - phone: ['', [Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$')]], | |
77 | + zip: ['', [Validators.required,this.noWhitespaceValidator]], | |
78 | + phone: ['', [Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$'),this.noWhitespaceValidator]], | |
79 | 79 | //phone: ['', Validators.required], |
80 | 80 | clientAdminId: [0, Validators.min(1)], |
81 | - clientAdminEmail: [{value: '', disabled: true}, Validators.email], | |
81 | + clientAdminEmail: [{value: '', disabled: true}, this.noWhitespaceValidator], | |
82 | 82 | isActive: [0], |
83 | 83 | isMaster: [0], |
84 | 84 | creationDate: [''], |
... | ... | @@ -123,6 +123,75 @@ export class SiteLicenseAccount implements OnInit { |
123 | 123 | document.body.appendChild(testScript); |
124 | 124 | } |
125 | 125 | } |
126 | + public noWhitespaceValidator(control: FormControl) { | |
127 | + // new validation for intial whaite space | |
128 | + //****Birendra *****/ | |
129 | + var isValid=false; | |
130 | + if(control.value!=null) | |
131 | + { | |
132 | + var controlLen=control.value.length; | |
133 | + if(controlLen==undefined)//undefined for integer value | |
134 | + { | |
135 | + isValid=true; | |
136 | + } | |
137 | + else if(controlLen!=0) | |
138 | + { | |
139 | + const isWhitespace = (control.value || '').trim().length === 0; | |
140 | + isValid = !isWhitespace; | |
141 | + if(!isValid) | |
142 | + { | |
143 | + control.setValue(''); | |
144 | + | |
145 | + } | |
146 | + } | |
147 | + } | |
148 | + // can use also on page of input control | |
149 | + // | |
150 | + return isValid ? null: { 'whitespace': true }; | |
151 | + | |
152 | + } | |
153 | + onKeyUp(event: any) { | |
154 | + var mobno = event.target.value; | |
155 | + var newnum=mobno; | |
156 | + if(mobno!="" && event.key!="Backspace") | |
157 | + { | |
158 | + var tempArr = mobno.split('-'); | |
159 | + | |
160 | + if(tempArr.length==1) | |
161 | + { | |
162 | + var countdigit=tempArr[0].length; | |
163 | + newnum=tempArr[0]; | |
164 | + if(countdigit==3) | |
165 | + { | |
166 | + newnum=tempArr[0]+"-"; | |
167 | + } | |
168 | + else if(countdigit>3) | |
169 | + { | |
170 | + newnum=tempArr[0].substr(0,3)+"-"+tempArr[0].substr(3,1); | |
171 | + } | |
172 | + | |
173 | + } | |
174 | + else if(tempArr.length==2) | |
175 | + { | |
176 | + newnum=tempArr[0]+"-"+tempArr[1]; | |
177 | + var countdigit=tempArr[1].length; | |
178 | + if(countdigit==3) | |
179 | + { | |
180 | + newnum=tempArr[0]+"-"+tempArr[1]+"-"; | |
181 | + } | |
182 | + else if(countdigit>3) | |
183 | + { | |
184 | + newnum= tempArr[0]+"-"+tempArr[1].substr(0,3)+"-"+tempArr[1].substr(3,1); | |
185 | + } | |
186 | + } | |
187 | + else | |
188 | + { | |
189 | + newnum=tempArr[0]+"-"+tempArr[1]+"-"+tempArr[2]; | |
190 | + } | |
191 | + | |
192 | + } | |
193 | + this.insertUpdateSiteLicenseFrm.controls['phone'].setValue(newnum); | |
194 | + }; | |
126 | 195 | |
127 | 196 | openModal(template: TemplateRef<any>) { |
128 | 197 | this.modalRef = this.modalService.show(template); |
... | ... | @@ -428,46 +497,38 @@ export class SiteLicenseAccount implements OnInit { |
428 | 497 | this.insertUpdateSiteLicenseFrm.controls['clientAdminEmail'].setValue(''); |
429 | 498 | } |
430 | 499 | OnCountryChange(element: any) { |
431 | - if (element.innerText != '') { | |
432 | - | |
433 | - } | |
434 | - else { | |
435 | 500 | this.license.CountryId = parseInt(element.value); |
436 | 501 | if (this.lstCountry.find(C => C.Id == this.license.CountryId).CountryName != "United States") { |
437 | 502 | this.license.StateId = this.lstState.find(C => C.StateName == "Other").Id; |
438 | 503 | this.insertUpdateSiteLicenseFrm.controls['stateId'].setValue(this.license.StateId); |
439 | - this.insertUpdateSiteLicenseFrm.controls['phone'].clearValidators(); | |
440 | - this.insertUpdateSiteLicenseFrm.controls['phone'].setValidators([Validators.required]); | |
504 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].clearValidators(); | |
505 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].setValidators([Validators.required,this.noWhitespaceValidator]); | |
441 | 506 | } |
442 | 507 | else { |
443 | 508 | this.license.StateId = 0; |
444 | 509 | this.insertUpdateSiteLicenseFrm.controls['stateId'].setValue(this.license.StateId); |
445 | - this.insertUpdateSiteLicenseFrm.controls['phone'].clearValidators(); | |
446 | - this.insertUpdateSiteLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$')]); | |
510 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].clearValidators(); | |
511 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$'),this.noWhitespaceValidator]); | |
447 | 512 | } |
448 | - this.insertUpdateSiteLicenseFrm.controls['phone'].updateValueAndValidity(); | |
449 | - } | |
513 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].updateValueAndValidity(); | |
514 | + | |
450 | 515 | } |
451 | 516 | OnStateChange(element: any) { |
452 | - if (element.innerText != '') { | |
453 | - | |
454 | - } | |
455 | - else { | |
456 | 517 | this.license.StateId = parseInt(element.value); |
457 | 518 | if (this.lstState.find(C => C.Id == this.license.StateId).StateName != "Other") { |
458 | 519 | this.license.CountryId = this.lstCountry.find(C => C.CountryName == "United States").Id; |
459 | 520 | this.insertUpdateSiteLicenseFrm.controls['countryId'].setValue(this.license.CountryId); |
460 | - this.insertUpdateSiteLicenseFrm.controls['phone'].clearValidators(); | |
461 | - this.insertUpdateSiteLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$')]); | |
521 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].clearValidators(); | |
522 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].setValidators([Validators.required, Validators.pattern('^([0-9]{3})-([0-9]{3})-([0-9]{4})$'),this.noWhitespaceValidator]); | |
462 | 523 | } |
463 | 524 | else { |
464 | 525 | this.license.CountryId = 0; |
465 | 526 | this.insertUpdateSiteLicenseFrm.controls['countryId'].setValue(this.license.CountryId); |
466 | - this.insertUpdateSiteLicenseFrm.controls['phone'].clearValidators(); | |
467 | - this.insertUpdateSiteLicenseFrm.controls['phone'].setValidators([Validators.required]); | |
527 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].clearValidators(); | |
528 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].setValidators([Validators.required,this.noWhitespaceValidator]); | |
468 | 529 | } |
469 | - this.insertUpdateSiteLicenseFrm.controls['phone'].updateValueAndValidity(); | |
470 | - } | |
530 | + // this.insertUpdateSiteLicenseFrm.controls['phone'].updateValueAndValidity(); | |
531 | + | |
471 | 532 | } |
472 | 533 | |
473 | 534 | EditLicenseSite(){ | ... | ... |
400-SOURCECODE/Admin/src/app/components/SubscriptionPrice/subscriptionprice.component.ts
... | ... | @@ -55,9 +55,9 @@ RecordDeleted: number[]; |
55 | 55 | }); |
56 | 56 | this.insertSubscriptionPriceFrm = this.fb.group({ |
57 | 57 | subscriptionPriceId: [''], |
58 | - title: ['', Validators.required], | |
59 | - price: ['', [Validators.required, Validators.pattern('[0-9.]*')]], | |
60 | - duration: ['', [Validators.required, Validators.pattern('[0-9]*')]], | |
58 | + title: ['', [Validators.required,this.noWhitespaceValidator]], | |
59 | + price: ['', [Validators.required, Validators.pattern('[0-9.]*'),this.noWhitespaceValidator]], | |
60 | + duration: ['', [Validators.required, Validators.pattern('[0-9]*'),this.noWhitespaceValidator]], | |
61 | 61 | editionId: [''], |
62 | 62 | isActive: ['false'] |
63 | 63 | }); |
... | ... | @@ -91,6 +91,33 @@ RecordDeleted: number[]; |
91 | 91 | document.body.appendChild(testScript); |
92 | 92 | } |
93 | 93 | } |
94 | + public noWhitespaceValidator(control: FormControl) { | |
95 | + // new validation for intial whaite space | |
96 | + //****Birendra *****/ | |
97 | + var isValid=false; | |
98 | + if(control.value!=null) | |
99 | + { | |
100 | + var controlLen=control.value.length; | |
101 | + if(controlLen==undefined)//undefined for integer value | |
102 | + { | |
103 | + isValid=true; | |
104 | + } | |
105 | + else if(controlLen!=0) | |
106 | + { | |
107 | + const isWhitespace = (control.value || '').trim().length === 0; | |
108 | + isValid = !isWhitespace; | |
109 | + if(!isValid) | |
110 | + { | |
111 | + control.setValue(''); | |
112 | + | |
113 | + } | |
114 | + } | |
115 | + } | |
116 | + // can use also on page of input control | |
117 | + // | |
118 | + return isValid ? null: { 'whitespace': true }; | |
119 | + | |
120 | + } | |
94 | 121 | |
95 | 122 | public SearchSubscriptionPrices(evt: any) { |
96 | 123 | if (this.global.ValidationMsg != '') { | ... | ... |
400-SOURCECODE/Admin/src/app/components/UserEntity/adduser.component.html
... | ... | @@ -71,6 +71,7 @@ |
71 | 71 | <div *ngIf="!adduserFrm.controls.LastName.valid && adduserFrm.controls.LastName.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Last Name is required</div> |
72 | 72 | </div> |
73 | 73 | </div> |
74 | + <div *ngIf="this.router.url == '/adduser'"> | |
74 | 75 | <div class="form-group" #accountNo *ngIf="this.commonService.UserType == 1 || this.commonService.UserType == 2"> |
75 | 76 | <label for="inputEmail3" class="col-sm-4 control-label">Account Number <span class="red">*</span> :</label> |
76 | 77 | <div class="col-sm-7" dropdown (isOpenChange)="onOpenChange($event)" (keyup)="onKeyPress($event)" [dropup]="isDropup"> |
... | ... | @@ -89,6 +90,7 @@ |
89 | 90 | </ul> |
90 | 91 | </div> |
91 | 92 | </div> |
93 | + | |
92 | 94 | <div class="form-group" #accountNo *ngIf="this.commonService.UserType > 2"> |
93 | 95 | <label for="inputEmail3" class="col-sm-4 control-label">Account Number <span class="red">*</span> :</label> |
94 | 96 | <div class="col-sm-7" dropdown (isOpenChange)="onOpenChange($event)" (keyup)="onKeyPress($event)" [dropup]="isDropup"> |
... | ... | @@ -116,6 +118,7 @@ |
116 | 118 | </select> |
117 | 119 | </div> |
118 | 120 | </div> |
121 | + </div> | |
119 | 122 | <div class="row"> |
120 | 123 | <div class="col-sm-12 marginTop20 text-center"> |
121 | 124 | <button type="button" class="btn btn-primary btn-sm" data-toggle="modal" (click)="AddUser()"><i class="fa fa-plus-circle"></i> Add</button> | ... | ... |
400-SOURCECODE/Admin/src/app/components/UserEntity/adduser.component.ts
... | ... | @@ -60,29 +60,65 @@ export class AddUser implements OnInit, AfterViewInit { |
60 | 60 | //this.userservice.GetUserById(this.UserId); |
61 | 61 | this.adduserFrm = this.fb.group({ |
62 | 62 | id: [''], |
63 | - UserName: ['', [Validators.required, Validators.minLength(8)]], | |
64 | - Password: ['', [Validators.required, Validators.minLength(8)]], | |
65 | - ConfirmPassword: ['', Validators.required], | |
66 | - FirstName: ['', Validators.required], | |
67 | - LastName: ['', Validators.required], | |
68 | - EmailId: ['', Validators.required], | |
63 | + UserName: ['', [Validators.required, Validators.minLength(8),this.noWhitespaceValidator]], | |
64 | + Password: ['', [Validators.required, Validators.minLength(8),this.noWhitespaceValidator]], | |
65 | + ConfirmPassword: ['', [Validators.required,this.noWhitespaceValidator]], | |
66 | + FirstName: ['', [Validators.required,this.noWhitespaceValidator]], | |
67 | + LastName: ['', [Validators.required,this.noWhitespaceValidator]], | |
68 | + EmailId: ['', [Validators.required,this.noWhitespaceValidator]], | |
69 | 69 | AccountNumberId: ['', Validators.required], |
70 | 70 | UserTypeId: ['', Validators.required], |
71 | 71 | ProductEditionId: ['', Validators.required] |
72 | 72 | }); |
73 | 73 | |
74 | 74 | this._loadingService.ShowLoading("global-loading"); |
75 | - this.bindUsers(); | |
76 | - this.GetAccountNumber(); | |
77 | - //this.GetUserTypeByLicenseId(); | |
78 | - | |
75 | + this.bindUsers(0); | |
76 | + if(this.router.url === '/adduser') | |
77 | + { | |
78 | + this.GetAccountNumber(); | |
79 | + } | |
80 | + else{ | |
81 | + this._loadingService.HideLoading("global-loading"); | |
82 | + } | |
83 | + | |
79 | 84 | } |
80 | 85 | ngAfterViewInit() { |
81 | - this.CheckDropDownOrUp(this.accountNodiv.nativeElement); | |
86 | + if(this.router.url === '/adduser') | |
87 | + { | |
88 | + this.CheckDropDownOrUp(this.accountNodiv.nativeElement); | |
89 | + } | |
90 | + | |
82 | 91 | } |
83 | 92 | redirect() { |
84 | 93 | this.router.navigate(['/']); |
85 | 94 | } |
95 | + public noWhitespaceValidator(control: FormControl) { | |
96 | + // new validation for intial whaite space | |
97 | + //****Birendra *****/ | |
98 | + var isValid=false; | |
99 | + if(control.value!=null) | |
100 | + { | |
101 | + var controlLen=control.value.length; | |
102 | + if(controlLen==undefined)//undefined for integer value | |
103 | + { | |
104 | + isValid=true; | |
105 | + } | |
106 | + else if(controlLen!=0) | |
107 | + { | |
108 | + const isWhitespace = (control.value || '').trim().length === 0; | |
109 | + isValid = !isWhitespace; | |
110 | + if(!isValid) | |
111 | + { | |
112 | + control.setValue(''); | |
113 | + | |
114 | + } | |
115 | + } | |
116 | + } | |
117 | + // can use also on page of input control | |
118 | + // | |
119 | + return isValid ? null: { 'whitespace': true }; | |
120 | + | |
121 | + } | |
86 | 122 | GetUserTypeByLicenseId() { |
87 | 123 | var Accountnumber = this.adduserFrm.controls['AccountNumberId'].value; |
88 | 124 | if (Accountnumber == "") { Accountnumber = 0 } |
... | ... | @@ -222,16 +258,19 @@ export class AddUser implements OnInit, AfterViewInit { |
222 | 258 | this.alerts += '</br><span>Last Name is required.</span>'; |
223 | 259 | } |
224 | 260 | |
225 | - | |
226 | - if (this.adduserFrm.value.AccountNumberId == '0') { | |
227 | - this.alerts += '</br><span>Please select account number</span>'; | |
228 | - } | |
229 | - if (this.adduserFrm.value.UserTypeId == '0') { | |
230 | - this.alerts += '</br><span>Please select user type</span>'; | |
231 | - } | |
232 | - if (this.adduserFrm.value.ProductEditionId == '0') { | |
233 | - this.alerts += '</br><span>Please select product edition</span>'; | |
234 | - } | |
261 | + if(this.router.url === '/adduser') | |
262 | + { | |
263 | + if (this.adduserFrm.value.AccountNumberId == '0') { | |
264 | + this.alerts += '</br><span>Please select account number</span>'; | |
265 | + } | |
266 | + if (this.adduserFrm.value.UserTypeId == '0') { | |
267 | + this.alerts += '</br><span>Please select user type</span>'; | |
268 | + } | |
269 | + if (this.adduserFrm.value.ProductEditionId == '0') { | |
270 | + this.alerts += '</br><span>Please select product edition</span>'; | |
271 | + } | |
272 | + } | |
273 | + | |
235 | 274 | if (this.alerts == '') { |
236 | 275 | var AddUserEntity = this.adduserFrm.value; |
237 | 276 | return this.userservice.InsertUser(AddUserEntity) |
... | ... | @@ -253,22 +292,23 @@ export class AddUser implements OnInit, AfterViewInit { |
253 | 292 | |
254 | 293 | } |
255 | 294 | ResetForm() { |
256 | - this._buildForm(); | |
295 | + var lcid= this.adduserFrm.controls['AccountNumberId'].value; | |
296 | + this._buildForm(lcid); | |
257 | 297 | } |
258 | - _buildForm() { | |
298 | + _buildForm(lcid) { | |
259 | 299 | this.adduserFrm = this.fb.group({ |
260 | 300 | id: [''], |
261 | - UserName: [""], | |
262 | - Password: [""], | |
263 | - ConfirmPassword: [""], | |
264 | - FirstName: [""], | |
265 | - LastName: [""], | |
266 | - EmailId: [""], | |
267 | - AccountNumberId: ["0"], | |
268 | - UserTypeId: ["0"], | |
269 | - ProductEditionId: ["0"] | |
270 | - | |
301 | + UserName: ['', [Validators.required, Validators.minLength(8),this.noWhitespaceValidator]], | |
302 | + Password: ['', [Validators.required, Validators.minLength(8),this.noWhitespaceValidator]], | |
303 | + ConfirmPassword: ['', [Validators.required,this.noWhitespaceValidator]], | |
304 | + FirstName: ['', [Validators.required,this.noWhitespaceValidator]], | |
305 | + LastName: ['', [Validators.required,this.noWhitespaceValidator]], | |
306 | + EmailId: ['', [Validators.required,this.noWhitespaceValidator]], | |
307 | + AccountNumberId: ['', Validators.required], | |
308 | + UserTypeId: ['', Validators.required], | |
309 | + ProductEditionId: ['', Validators.required] | |
271 | 310 | }); |
311 | + this.bindUsers(lcid); | |
272 | 312 | } |
273 | 313 | CheckDropDownOrUp(elm: any) { |
274 | 314 | var dropDownTop = elm.children[0].offsetTop; |
... | ... | @@ -283,23 +323,31 @@ export class AddUser implements OnInit, AfterViewInit { |
283 | 323 | } |
284 | 324 | @HostListener('window:scroll', ['$event']) |
285 | 325 | onWindowScroll(event) { |
286 | - // console.debug("Scroll Event", document.body.scrollTop); | |
287 | - // see Andr๏ฟฝs Szepesh๏ฟฝzi's comment below | |
288 | - //console.debug("Scroll Event", window.pageYOffset ); | |
289 | - this.CheckDropDownOrUp(this.accountNodiv.nativeElement); | |
326 | + if(this.router.url === '/adduser') | |
327 | + { | |
328 | + this.CheckDropDownOrUp(this.accountNodiv.nativeElement); | |
329 | + } | |
290 | 330 | } |
291 | 331 | |
292 | 332 | @HostListener('window:resize', ['$event']) |
293 | 333 | onWindowResize(event) { |
294 | - this.CheckDropDownOrUp(this.accountNodiv.nativeElement); | |
334 | + if(this.router.url === '/adduser') | |
335 | + { | |
336 | + this.CheckDropDownOrUp(this.accountNodiv.nativeElement); | |
337 | + } | |
295 | 338 | } |
296 | - bindUsers() { | |
297 | - | |
298 | - //console.log(data); | |
299 | - //alert(JSON.stringify(data)); | |
300 | - //this.user = data[0]; | |
301 | - | |
302 | - | |
339 | + bindUsers(lcid) { | |
340 | + this.alerts = ''; | |
341 | + if (this.commonService.UserTypeName == "Client Admin" || this.commonService.UserTypeName == "District Admin" ) | |
342 | + { | |
343 | + this.adduserFrm.controls['AccountNumberId'].setValue(lcid) | |
344 | + } | |
345 | + else | |
346 | + { | |
347 | + this.accountDropDownText = 'Select'; | |
348 | + this.adduserFrm.controls['AccountNumberId'].setValue(0) | |
349 | + } | |
350 | + | |
303 | 351 | this.adduserFrm.controls['id'].setValue(0) |
304 | 352 | this.adduserFrm.controls['FirstName'].setValue('') |
305 | 353 | this.adduserFrm.controls['LastName'].setValue('') |
... | ... | @@ -307,8 +355,17 @@ export class AddUser implements OnInit, AfterViewInit { |
307 | 355 | this.adduserFrm.controls['UserName'].setValue('') |
308 | 356 | this.adduserFrm.controls['Password'].setValue('') |
309 | 357 | this.adduserFrm.controls['ConfirmPassword'].setValue('') |
310 | - this.adduserFrm.controls['AccountNumberId'].setValue(0) | |
311 | - this.adduserFrm.controls['UserTypeId'].setValue(0) | |
358 | + | |
359 | + if(this.router.url === '/adduser') | |
360 | + { | |
361 | + this.adduserFrm.controls['UserTypeId'].setValue(0) | |
362 | + } | |
363 | + else | |
364 | + { | |
365 | + // for genral admin | |
366 | + this.adduserFrm.controls['UserTypeId'].setValue(2) | |
367 | + } | |
368 | + | |
312 | 369 | this.adduserFrm.controls['ProductEditionId'].setValue(0) |
313 | 370 | |
314 | 371 | } | ... | ... |
400-SOURCECODE/Admin/src/app/components/UserEntity/datamodel.ts
400-SOURCECODE/Admin/src/app/components/UserEntity/unblockuser.component.ts
... | ... | @@ -109,15 +109,23 @@ export class UnblockUser implements OnInit { |
109 | 109 | |
110 | 110 | GetBlockUserList(this) |
111 | 111 | { |
112 | - if (this.commonService.UserTypeName == 'District Admin') { | |
113 | - this.licId = this.commonService.AccLicId; | |
114 | - } | |
115 | - else if (this.commonService.UserTypeName == 'Client Admin') { | |
116 | - this.licId = this.commonService.AccLicId; | |
112 | + if (this.commonService.UserTypeName == "Client Admin" || this.commonService.UserTypeName == "District Admin") | |
113 | + { | |
114 | + if(this.commonService.AccountNumber !=undefined && this.commonService.AccountNumber !="") | |
115 | + { | |
116 | + this.licId = this.commonService.AccLicId; | |
117 | + } | |
118 | + else | |
119 | + { | |
120 | + this.licId =0 | |
121 | + } | |
122 | + | |
117 | 123 | } |
118 | - else { | |
124 | + else | |
125 | + { | |
119 | 126 | this.licId =0 |
120 | 127 | } |
128 | + | |
121 | 129 | var UserFilterControl = this.UnBlockedUserFrm.value; |
122 | 130 | this.userservice.GetBlockUserList( |
123 | 131 | { | ... | ... |
400-SOURCECODE/Admin/src/app/components/UserEntity/updateuserprofile.component.html
... | ... | @@ -21,25 +21,26 @@ |
21 | 21 | </div> |
22 | 22 | <div class="form-group"> |
23 | 23 | |
24 | - <label for="inputEmail3" class="col-sm-4 control-label">First Name <span class="red">*</span> :</label> | |
24 | + <label for="firstName" class="col-sm-4 control-label">First Name <span class="red">*</span> :</label> | |
25 | 25 | <div class="col-sm-7"> |
26 | - <input type="text" formControlName="firstName" class="form-control" id="inputEmail3"> | |
27 | - <div *ngIf="!userFrm.controls.firstName.valid && userFrm.controls.firstName.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">First Name is required</div> | |
26 | + <input type="text" formControlName="firstName" class="form-control" id="firstName"> | |
27 | + <div *ngIf="(userFrm.controls.firstName.invalid && userFrm.controls.firstName.dirty)" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">First Name is required</div> | |
28 | 28 | </div> |
29 | 29 | </div> |
30 | 30 | <div class="form-group"> |
31 | - <label for="inputPassword3" class="col-sm-4 control-label">Last Name <span class="red">*</span> :</label> | |
31 | + <label for="lastName" class="col-sm-4 control-label">Last Name <span class="red">*</span> :</label> | |
32 | 32 | <div class="col-sm-7"> |
33 | - <input type="text" class="form-control" id="inputPassword3" formControlName="lastName"> | |
34 | - <div *ngIf="!userFrm.controls.lastName.valid && userFrm.controls.lastName.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Last Name is required</div> | |
33 | + <input type="text" class="form-control" id="lastName" formControlName="lastName"> | |
34 | + <div *ngIf="(!userFrm.controls.lastName.valid && userFrm.controls.lastName.dirty)" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Last Name is required</div> | |
35 | 35 | </div> |
36 | 36 | </div> |
37 | 37 | <div class="form-group"> |
38 | - <label for="inputPassword3" class="col-sm-4 control-label">Email Id <span class="red">*</span> :</label> | |
38 | + <label for="emailId" class="col-sm-4 control-label">Email Id <span class="red">*</span> :</label> | |
39 | 39 | <div class="col-sm-7"> |
40 | - <input type="text" class="form-control" id="inputPassword3" formControlName="emailId"> | |
41 | - <div *ngIf="userFrm.controls.emailId.hasError('required') && userFrm.controls.emailId.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is required</div> | |
42 | - <div *ngIf="userFrm.controls.emailId.hasError('email') && userFrm.controls.emailId.dirty && !userFrm.controls.emailId.hasError('required')" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email is invalid</div> | |
40 | + <input type="text" class="form-control" id="emailId" formControlName="emailId" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,3}$"> | |
41 | + <div *ngIf="userFrm.controls.emailId.invalid && !userFrm.controls.emailId.value && userFrm.controls.emailId.dirty" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;">Email Id is required</div> | |
42 | + | |
43 | + <div *ngIf="userFrm.controls.emailId.invalid && userFrm.controls.emailId.value" class="alert alert-danger" style="padding: 2px; margin-bottom: 2px;"> Email is Invalid. </div> | |
43 | 44 | </div> |
44 | 45 | </div> |
45 | 46 | <div class="form-group"> | ... | ... |
400-SOURCECODE/Admin/src/app/components/UserEntity/updateuserprofile.component.ts
... | ... | @@ -44,17 +44,14 @@ export class UpdateUserProfile implements OnInit { |
44 | 44 | ngOnInit(): void { |
45 | 45 | this.user = new User(); |
46 | 46 | this.alerts = ''; |
47 | - //this.userservice.GetUserById(this.UserId); | |
48 | 47 | this.userFrm = this.fb.group({ |
49 | 48 | id: [''], |
50 | - firstName: ['', Validators.required], | |
51 | - lastName: ['', Validators.required], | |
52 | - emailId: ['', [Validators.required, Validators.email]] | |
53 | - // LastName: [''], | |
54 | - // Gender: ['', Validators.required], | |
55 | - // Email: [''] | |
49 | + firstName: ['', [Validators.required,this.noWhitespaceValidator]], | |
50 | + lastName: ['', [Validators.required,this.noWhitespaceValidator]], | |
51 | + emailId: ['', [Validators.required,this.noWhitespaceValidator]] | |
56 | 52 | |
57 | 53 | }); |
54 | + | |
58 | 55 | this._loadingService.ShowLoading("global-loading"); |
59 | 56 | this.GetUserById(); |
60 | 57 | |
... | ... | @@ -62,21 +59,34 @@ export class UpdateUserProfile implements OnInit { |
62 | 59 | redirect() { |
63 | 60 | this.router.navigate(['/']); |
64 | 61 | } |
65 | - //ngAfterviewint() { | |
66 | - // this.LoadUsers(); | |
67 | - //} | |
68 | - | |
69 | - | |
70 | - //getCustomerById(UserId) { | |
71 | - // return this.userservice.GetUserById(UserId) | |
72 | - // .map((response: Response) => response.json()) | |
73 | - // .catch(this._errorHandler) | |
74 | - //} | |
75 | - //formErrors = { | |
76 | - // 'firstName': '', | |
77 | - // 'lastName': '', | |
78 | - // 'email': '' | |
79 | - //}; | |
62 | + public noWhitespaceValidator(control: FormControl) { | |
63 | + // new validation for intial whaite space | |
64 | + //****Birendra *****/ | |
65 | + var isValid=false; | |
66 | + if(control.value!=null) | |
67 | + { | |
68 | + var controlLen=control.value.length; | |
69 | + if(controlLen==undefined)//undefined for integer value | |
70 | + { | |
71 | + isValid=true; | |
72 | + } | |
73 | + else if(controlLen!=0) | |
74 | + { | |
75 | + const isWhitespace = (control.value || '').trim().length === 0; | |
76 | + isValid = !isWhitespace; | |
77 | + if(!isValid) | |
78 | + { | |
79 | + control.setValue(''); | |
80 | + | |
81 | + } | |
82 | + } | |
83 | + } | |
84 | + // can use also on page of input control | |
85 | + // | |
86 | + return isValid ? null: { 'whitespace': true }; | |
87 | + | |
88 | +} | |
89 | + | |
80 | 90 | GetUserById() { |
81 | 91 | |
82 | 92 | this.userservice.GetUserById() |
... | ... | @@ -84,24 +94,35 @@ export class UpdateUserProfile implements OnInit { |
84 | 94 | this._loadingService.HideLoading("global-loading"); |
85 | 95 | } |
86 | 96 | UpdateUserProfile() { |
87 | - // debugger; | |
88 | - this.user = this.userFrm.value; | |
89 | - //if(this.user.) | |
90 | - //console.log(this.user); | |
91 | - var obj = this.user | |
92 | - if (this.userFrm.valid) { | |
93 | - return this.userservice.UpdateUserProfileById(obj) | |
97 | + this.alerts = ''; | |
98 | + if (this.userFrm.value.firstName == null ||((this.userFrm.value.firstName).trim() == '')) | |
99 | + { | |
100 | + this.alerts += '<span>First name is required.</span></br>'; | |
101 | + } | |
102 | + if (this.userFrm.value.lastName == null ||((this.userFrm.value.lastName).trim() == '')) | |
103 | + { | |
104 | + this.alerts += '<span>Last name is required.</span></br>'; | |
105 | + } | |
106 | + if (this.userFrm.value.emailId == null ||((this.userFrm.value.emailId).trim() == '')) { | |
107 | + this.alerts += '<span>Email Id is required.</span>'; | |
108 | + } | |
109 | + else if((!this.userFrm.controls.emailId.valid)) | |
110 | + { | |
111 | + this.alerts += '<span>Enter Valid Email Id.</span>'; | |
112 | + } | |
113 | + | |
114 | + | |
115 | + if (this.userFrm.valid && this.alerts == '') { | |
116 | + var obj = this.userFrm.value; | |
117 | + | |
118 | + return this.userservice.UpdateUserProfileById(obj) | |
94 | 119 | .subscribe( |
95 | 120 | n => (this.AfterInsertData(n)), |
96 | 121 | error => this.error = <any>error); |
97 | 122 | } |
98 | 123 | } |
99 | 124 | AfterInsertData(data) { |
100 | - debugger; | |
101 | - if (data.Status == "False") { | |
102 | - // this._confirmService.activate(data.ResponseMessage, "alertMsg"); | |
103 | - //setTimeout(() => this.amCode.nativeElement.focus(), 0); | |
104 | - // this.closeflag = false; | |
125 | + if (data.Status == "False") { | |
105 | 126 | return false; |
106 | 127 | } else { |
107 | 128 | this.status = true; |
... | ... | @@ -112,34 +133,9 @@ export class UpdateUserProfile implements OnInit { |
112 | 133 | localStorage.setItem("loggedInUserDetails", JSON.stringify(loggedInUser)); |
113 | 134 | this.global.DisplayName = loggedInUser.FirstName + " " + loggedInUser.LastName; |
114 | 135 | this._confirmService.activate("User Profile Updated Successfully.", "alertMsg"); |
115 | - // window.location.href = this.global.LiveURL; | |
116 | - | |
117 | - | |
118 | - //this.profileModal.open(); | |
119 | - // this.submitted = false; | |
120 | - // this.GetAllAcctMgr(); | |
121 | - // this.DisableAllControls(); | |
122 | - // this.AccountManagerID.enable(); | |
123 | - // let accountManagerID: string = data.Id == null ? "" : data.Id.toString(); | |
124 | - // console.log(accountManagerID); | |
125 | - | |
126 | - // this.GetAcctMgr(Number(accountManagerID)); | |
127 | - //this.GetAccountManagerListOptions(false); | |
128 | - // this.defautValue = data.id; | |
129 | - // this.BtnReset = true; | |
130 | - // this.BtnSave = true; | |
131 | - // this.BtnEdit = false; | |
132 | - // this.BtnNew = false; | |
133 | - // this.BtnDelete = false; | |
134 | - // this.Abbrevtion = this.Abbrev.value; | |
135 | - // setTimeout(() => this.AMform.controls["AccountManagerID"].setValue(accountManagerID.toString()), 1000); | |
136 | - // setTimeout(() => this.AMform.markAsPristine(), 2000); | |
136 | + | |
137 | 137 | } |
138 | - //if (this.closeflag) { | |
139 | - // this.close.emit(null); | |
140 | - //} | |
141 | - //else { | |
142 | - //} | |
138 | + | |
143 | 139 | } |
144 | 140 | bindUsers(data) { |
145 | 141 | |
... | ... | @@ -152,23 +148,8 @@ export class UpdateUserProfile implements OnInit { |
152 | 148 | this.userFrm.controls['firstName'].setValue(this.user.FirstName) |
153 | 149 | this.userFrm.controls['lastName'].setValue(this.user.LastName) |
154 | 150 | this.userFrm.controls['emailId'].setValue(this.user.EmailId) |
155 | - // this.GetClientListOptions(false); | |
156 | - // this.GetCrossRefClientListOptions(false); | |
157 | 151 | } |
158 | - //extractData(res: Response) { | |
159 | - // //debugger; | |
160 | - // let body = res.json(); | |
161 | - // return body; | |
162 | - //} | |
163 | - //handleError(error: any) { | |
164 | - | |
165 | - // // In a real world app, we might use a remote logging infrastructure | |
166 | - // // We'd also dig deeper into the error to get a better message | |
167 | - // let errMsg = (error.message) ? error.message : | |
168 | - // error.status ? `${error.status} - ${error.statusText}` : 'Server error'; | |
169 | - // console.error(errMsg); // log to console instead | |
170 | - // return Observable.throw(errMsg); | |
171 | - //} | |
152 | + | |
172 | 153 | validationMessages = { |
173 | 154 | 'firstName': { |
174 | 155 | 'required': 'First name is required.' | ... | ... |
400-SOURCECODE/Admin/src/app/components/UserEntity/users.component.html
... | ... | @@ -168,7 +168,7 @@ |
168 | 168 | </div> |
169 | 169 | </form> |
170 | 170 | |
171 | - <div style="position: absolute; z-index: 100; width: 80%" [style.top]="topPos" [style.display]="(Mode=='Add' || Mode=='Edit') ? 'block' : 'none'" | |
171 | + <div style="position: absolute; z-index: 100; width: 100%" [style.top]="topPos" [style.display]="(Mode=='Add' || Mode=='Edit') ? 'block' : 'none'" | |
172 | 172 | class="well"> |
173 | 173 | <div class="row"> |
174 | 174 | <div class="col-sm-12"> | ... | ... |
400-SOURCECODE/Admin/src/app/components/UserEntity/users.component.ts
... | ... | @@ -88,12 +88,12 @@ export class UsersList implements OnInit, AfterViewChecked { |
88 | 88 | }); |
89 | 89 | this.adduserFrm = this.fb.group({ |
90 | 90 | id: [''], |
91 | - UserName: ['', [Validators.required, Validators.minLength(8)]], | |
92 | - Password: ['', [Validators.required, Validators.minLength(8)]], | |
93 | - ConfirmPassword: ['', Validators.required], | |
94 | - FirstName: ['', Validators.required], | |
95 | - LastName: ['', Validators.required], | |
96 | - EmailId: ['', Validators.required], | |
91 | + UserName: ['', [Validators.required, Validators.minLength(8),this.noWhitespaceValidator]], | |
92 | + Password: ['', [Validators.required, Validators.minLength(8),this.noWhitespaceValidator]], | |
93 | + ConfirmPassword: ['', [Validators.required,this.noWhitespaceValidator]], | |
94 | + FirstName: ['', [Validators.required,this.noWhitespaceValidator]], | |
95 | + LastName: ['', [Validators.required,this.noWhitespaceValidator]], | |
96 | + EmailId: ['', [Validators.required,this.noWhitespaceValidator]], | |
97 | 97 | AccountNumber: [''], |
98 | 98 | UserTypeTitle: [''], |
99 | 99 | AccountTypeTitle: [''], |
... | ... | @@ -114,9 +114,14 @@ export class UsersList implements OnInit, AfterViewChecked { |
114 | 114 | |
115 | 115 | }); |
116 | 116 | |
117 | - if (this.global.UserTypeName == "Client Admin" || this.global.UserTypeName == "District Admin") { | |
118 | - this.Users.controls['AccountNumber'].setValue(this.global.AccountNumber) | |
119 | - this.DisableAccountNumberControl = true; | |
117 | + if (this.global.UserTypeName == "Client Admin" || this.global.UserTypeName == "District Admin" ) | |
118 | + { | |
119 | + if(this.global.AccountNumber !=undefined && this.global.AccountNumber !="") | |
120 | + { | |
121 | + this.Users.controls['AccountNumber'].setValue(this.global.AccountNumber) | |
122 | + this.DisableAccountNumberControl = true; | |
123 | + } | |
124 | + | |
120 | 125 | } |
121 | 126 | this._loadingService.ShowLoading("global-loading"); |
122 | 127 | this.GetUserType(); |
... | ... | @@ -167,6 +172,33 @@ export class UsersList implements OnInit, AfterViewChecked { |
167 | 172 | |
168 | 173 | //this.GetUserList(); |
169 | 174 | } |
175 | + public noWhitespaceValidator(control: FormControl) { | |
176 | + // new validation for intial whaite space | |
177 | + //****Birendra *****/ | |
178 | + var isValid=false; | |
179 | + if(control.value!=null) | |
180 | + { | |
181 | + var controlLen=control.value.length; | |
182 | + if(controlLen==undefined)//undefined for integer value | |
183 | + { | |
184 | + isValid=true; | |
185 | + } | |
186 | + else if(controlLen!=0) | |
187 | + { | |
188 | + const isWhitespace = (control.value || '').trim().length === 0; | |
189 | + isValid = !isWhitespace; | |
190 | + if(!isValid) | |
191 | + { | |
192 | + control.setValue(''); | |
193 | + | |
194 | + } | |
195 | + } | |
196 | + } | |
197 | + // can use also on page of input control | |
198 | + // | |
199 | + return isValid ? null: { 'whitespace': true }; | |
200 | + | |
201 | + } | |
170 | 202 | handleChange(evt) { |
171 | 203 | var target = evt.target; |
172 | 204 | if (target.value == 'true') { | ... | ... |
400-SOURCECODE/Admin/src/assets/data/Menu.json
... | ... | @@ -85,7 +85,7 @@ |
85 | 85 | "SubMenuName": "Add User", |
86 | 86 | "SubMenuUrl": "adduser", |
87 | 87 | "SubMenuStatus": "True" |
88 | - }, | |
88 | + }, | |
89 | 89 | { |
90 | 90 | "SubMenuId": "209", |
91 | 91 | "SubMenuName": "Unblock User", |
... | ... | @@ -292,7 +292,7 @@ |
292 | 292 | "SubMenuName": "Add User", |
293 | 293 | "SubMenuUrl": "adduser", |
294 | 294 | "SubMenuStatus": "True" |
295 | - }, | |
295 | + }, | |
296 | 296 | { |
297 | 297 | "SubMenuId": "209", |
298 | 298 | "SubMenuName": "Unblock User", |
... | ... | @@ -1275,19 +1275,19 @@ |
1275 | 1275 | { |
1276 | 1276 | "HeaderMenuId": "101", |
1277 | 1277 | "HeaderMenuName": "Licenses", |
1278 | - "HeaderMenuStatus": "True", | |
1278 | + "HeaderMenuStatus": "False", | |
1279 | 1279 | "SubMenu": [ |
1280 | 1280 | { |
1281 | 1281 | "SubMenuId": "203", |
1282 | 1282 | "SubMenuName": "Search License", |
1283 | 1283 | "SubMenuUrl": "searchlicense", |
1284 | - "SubMenuStatus": "True" | |
1284 | + "SubMenuStatus": "False" | |
1285 | 1285 | }, |
1286 | 1286 | { |
1287 | 1287 | "SubMenuId": "204", |
1288 | 1288 | "SubMenuName": "Add New License", |
1289 | 1289 | "SubMenuUrl": "addlicense", |
1290 | - "SubMenuStatus": "True" | |
1290 | + "SubMenuStatus": "False" | |
1291 | 1291 | } |
1292 | 1292 | |
1293 | 1293 | ] |
... | ... | @@ -1295,19 +1295,19 @@ |
1295 | 1295 | { |
1296 | 1296 | "HeaderMenuId": "102", |
1297 | 1297 | "HeaderMenuName": "Product Features", |
1298 | - "HeaderMenuStatus": "True", | |
1298 | + "HeaderMenuStatus": "False", | |
1299 | 1299 | "SubMenu": [ |
1300 | 1300 | { |
1301 | 1301 | "SubMenuId": "205", |
1302 | 1302 | "SubMenuName": "Manage Discount Code", |
1303 | 1303 | "SubMenuUrl": "managediscountcode", |
1304 | - "SubMenuStatus": "True" | |
1304 | + "SubMenuStatus": "False" | |
1305 | 1305 | }, |
1306 | 1306 | { |
1307 | 1307 | "SubMenuId": "206", |
1308 | 1308 | "SubMenuName": "Subscription Price", |
1309 | 1309 | "SubMenuUrl": "subscriptionprice", |
1310 | - "SubMenuStatus": "True" | |
1310 | + "SubMenuStatus": "False" | |
1311 | 1311 | } |
1312 | 1312 | |
1313 | 1313 | ] |
... | ... | @@ -1315,31 +1315,31 @@ |
1315 | 1315 | { |
1316 | 1316 | "HeaderMenuId": "103", |
1317 | 1317 | "HeaderMenuName": "Users", |
1318 | - "HeaderMenuStatus": "True", | |
1318 | + "HeaderMenuStatus": "False", | |
1319 | 1319 | "SubMenu": [ |
1320 | 1320 | { |
1321 | 1321 | "SubMenuId": "207", |
1322 | 1322 | "SubMenuName": "List User", |
1323 | 1323 | "SubMenuUrl": "users", |
1324 | - "SubMenuStatus": "True" | |
1324 | + "SubMenuStatus": "False" | |
1325 | 1325 | }, |
1326 | 1326 | { |
1327 | 1327 | "SubMenuId": "208", |
1328 | 1328 | "SubMenuName": "Add User", |
1329 | 1329 | "SubMenuUrl": "adduser", |
1330 | - "SubMenuStatus": "True" | |
1330 | + "SubMenuStatus": "False" | |
1331 | 1331 | }, |
1332 | 1332 | { |
1333 | 1333 | "SubMenuId": "209", |
1334 | 1334 | "SubMenuName": "Unblock User", |
1335 | 1335 | "SubMenuUrl": "unblockuser", |
1336 | - "SubMenuStatus": "True" | |
1336 | + "SubMenuStatus": "False" | |
1337 | 1337 | }, |
1338 | 1338 | { |
1339 | 1339 | "SubMenuId": "210", |
1340 | 1340 | "SubMenuName": "User Group", |
1341 | 1341 | "SubMenuUrl": "usergroup", |
1342 | - "SubMenuStatus": "True" | |
1342 | + "SubMenuStatus": "False" | |
1343 | 1343 | } |
1344 | 1344 | |
1345 | 1345 | ] |
... | ... | @@ -1347,49 +1347,49 @@ |
1347 | 1347 | { |
1348 | 1348 | "HeaderMenuId": "104", |
1349 | 1349 | "HeaderMenuName": "Reports", |
1350 | - "HeaderMenuStatus": "True", | |
1350 | + "HeaderMenuStatus": "False", | |
1351 | 1351 | "SubMenu": [ |
1352 | 1352 | { |
1353 | 1353 | "SubMenuId": "211", |
1354 | 1354 | "SubMenuName": "Usage Report", |
1355 | 1355 | "SubMenuUrl": "usagereport", |
1356 | - "SubMenuStatus": "True" | |
1356 | + "SubMenuStatus": "False" | |
1357 | 1357 | }, |
1358 | 1358 | { |
1359 | 1359 | "SubMenuId": "212", |
1360 | 1360 | "SubMenuName": "Customer Summary Report", |
1361 | 1361 | "SubMenuUrl": "customersummaryreport", |
1362 | - "SubMenuStatus": "True" | |
1362 | + "SubMenuStatus": "False" | |
1363 | 1363 | }, |
1364 | 1364 | { |
1365 | 1365 | "SubMenuId": "213", |
1366 | 1366 | "SubMenuName": "Expiring Subscription Report", |
1367 | 1367 | "SubMenuUrl": "expiringsubscriptionreport", |
1368 | - "SubMenuStatus": "True" | |
1368 | + "SubMenuStatus": "False" | |
1369 | 1369 | }, |
1370 | 1370 | { |
1371 | 1371 | "SubMenuId": "214", |
1372 | 1372 | "SubMenuName": "New Subscription Report", |
1373 | 1373 | "SubMenuUrl": "subscriptionreport", |
1374 | - "SubMenuStatus": "True" | |
1374 | + "SubMenuStatus": "False" | |
1375 | 1375 | }, |
1376 | 1376 | { |
1377 | 1377 | "SubMenuId": "215", |
1378 | 1378 | "SubMenuName": "Subscription Cancellation Report", |
1379 | 1379 | "SubMenuUrl": "subscriptioncancellationreport", |
1380 | - "SubMenuStatus": "True" | |
1380 | + "SubMenuStatus": "False" | |
1381 | 1381 | }, |
1382 | 1382 | { |
1383 | 1383 | "SubMenuId": "216", |
1384 | 1384 | "SubMenuName": "Net AD Subscription Report", |
1385 | 1385 | "SubMenuUrl": "netadsubscriptionreport", |
1386 | - "SubMenuStatus": "True" | |
1386 | + "SubMenuStatus": "False" | |
1387 | 1387 | }, |
1388 | 1388 | { |
1389 | 1389 | "SubMenuId": "217", |
1390 | 1390 | "SubMenuName": "Site License Usage Report", |
1391 | 1391 | "SubMenuUrl": "sitelicenseusagereport", |
1392 | - "SubMenuStatus": "True" | |
1392 | + "SubMenuStatus": "False" | |
1393 | 1393 | }, |
1394 | 1394 | { |
1395 | 1395 | "SubMenuId": "218", |
... | ... | @@ -1409,13 +1409,13 @@ |
1409 | 1409 | { |
1410 | 1410 | "HeaderMenuId": "105", |
1411 | 1411 | "HeaderMenuName": "Site Account", |
1412 | - "HeaderMenuStatus": "True", | |
1412 | + "HeaderMenuStatus": "False", | |
1413 | 1413 | "SubMenu": [ |
1414 | 1414 | { |
1415 | 1415 | "SubMenuId": "220", |
1416 | 1416 | "SubMenuName": "Add Building Level Account", |
1417 | 1417 | "SubMenuUrl": "sitelicenseaccount", |
1418 | - "SubMenuStatus": "True" | |
1418 | + "SubMenuStatus": "False" | |
1419 | 1419 | } |
1420 | 1420 | |
1421 | 1421 | ] |
... | ... | @@ -1423,19 +1423,19 @@ |
1423 | 1423 | { |
1424 | 1424 | "HeaderMenuId": "106", |
1425 | 1425 | "HeaderMenuName": "Settings", |
1426 | - "HeaderMenuStatus": "True", | |
1426 | + "HeaderMenuStatus": "False", | |
1427 | 1427 | "SubMenu": [ |
1428 | 1428 | { |
1429 | 1429 | "SubMenuId": "221", |
1430 | 1430 | "SubMenuName": "View-Update Profile", |
1431 | 1431 | "SubMenuUrl": "editlicensebasicsettings", |
1432 | - "SubMenuStatus": "True" | |
1432 | + "SubMenuStatus": "False" | |
1433 | 1433 | }, |
1434 | 1434 | { |
1435 | 1435 | "SubMenuId": "222", |
1436 | 1436 | "SubMenuName": "Manage Modesty Settings", |
1437 | 1437 | "SubMenuUrl": "licensemodestysettings", |
1438 | - "SubMenuStatus": "True" | |
1438 | + "SubMenuStatus": "False" | |
1439 | 1439 | }, |
1440 | 1440 | { |
1441 | 1441 | "SubMenuId": "223", | ... | ... |