Merge branch 'master' of bitbucket.org:venbainformationtechnology/appointments_frontend

This commit is contained in:
bitbucket 2023-05-15 10:01:24 +05:30
commit 08a9fe2bce
33 changed files with 229 additions and 118 deletions

View File

@ -7,10 +7,10 @@
</mat-form-field>
<mat-form-field appearance="outline" style="width:20%;margin-left: 5%;" *ngIf="user_role == 'FRONTDESK'">
<mat-label>Practitioner</mat-label>
<mat-select placeholder="Select Business" [(ngModel)]="selectPractitioner" required>
<mat-select placeholder="Select Practitioner" [(ngModel)]="selectPractitioner" required>
<mat-option value="All" (click)="allPractitioner()">All</mat-option>
<mat-option *ngFor="let details of consultants" (click)="getPractitioner(details)" [value]="details.id">
Dr. {{details.userName}}
{{details.userName}}
</mat-option>
</mat-select>
</mat-form-field>

View File

@ -6,13 +6,13 @@
<mat-form-field appearance="outline" class="card-mat-pane">
<mat-label>Name</mat-label>
<input placeholder=" Name" formControlName="name" matInput>
<input placeholder="Name" formControlName="name" matInput>
<!-- <mat-error *ngIf="myError('cusName', 'required')">Name is required</mat-error>
<mat-error *ngIf="myError('cusName', 'maxlength')">Limit exceed</mat-error> -->
</mat-form-field>
<mat-form-field appearance="outline" class="card-mat-pane">
<mat-label>Email</mat-label>
<input type="email" placeholder=" Email" formControlName="email" matInput >
<input type="email" placeholder="Email" formControlName="email" matInput >
<!-- <mat-error *ngIf="!form.get('email')?.errors?.required && (form.get('email')?.errors?.pattern)">
Please enter a valid email address
</mat-error>
@ -23,7 +23,7 @@
</mat-form-field>
<mat-form-field appearance="outline" class="card-mat-pane">
<mat-label>Phone</mat-label>
<input placeholder=" Phone" type="text" appMobileNumberPattern maxlength="10" minlength="10" matInput formControlName="phoneNo">
<input placeholder="Mobile No" type="text" appMobileNumberPattern maxlength="10" minlength="10" matInput formControlName="phoneNo">
<mat-error *ngIf="myError('phoneNo', 'required')">Contact No is required</mat-error>
<mat-error *ngIf="myError('phoneNo', 'pattern')">Invalid Contact No </mat-error>
<mat-error *ngIf="myError('phoneNo', 'minlength')"> Contact No must be at least 10 characters</mat-error>

View File

@ -19,8 +19,7 @@
<mat-form-field appearance="outline" class="mat-pane">
<mat-label>Business</mat-label>
<input matInput placeholder="Business" name="Business" formControlName="busname" readonly>
<input matInput placeholder="Business" name="Business" formControlName="busname" readonly>
</mat-form-field>
<mat-form-field appearance="outline" class="mat-pane" *ngIf="user_role != 'FRONTDESK'">
<mat-label>Practitioner</mat-label>
@ -28,9 +27,9 @@
</mat-form-field>
<mat-form-field appearance="outline" class="mat-pane" *ngIf="user_role == 'FRONTDESK'">
<mat-label>Practitioner</mat-label>
<mat-select placeholder="Select Business" formControlName="practitioner" required>
<mat-select placeholder="Select practitioner" formControlName="practitioner" required>
<mat-option *ngFor="let details of consultants" (click)="getConsultServices(details)" [value]="details.id">
Dr. {{details.userName}}
{{details.userName}}
</mat-option>
</mat-select>
</mat-form-field>
@ -39,8 +38,7 @@
<mat-label>Service</mat-label>
<mat-select placeholder="Select Service" formControlName="service" required>
<mat-option>--</mat-option>
<mat-option *ngFor="let business of servicesList_array" (click)="serviceData(business)" [value]="business.serviceId
">
<mat-option *ngFor="let business of servicesList_array" (click)="serviceData(business)" [value]="business.serviceId">
{{business.servicesName}}
</mat-option>
</mat-select>

View File

@ -712,12 +712,10 @@ export class DialogBoxComponent implements OnInit {
})
}
getCustomerDetails(){
this._cus.getCustomersListDetails().subscribe(res => {
if (res.status == 200) {
this.customersList = res.data;
let param = {"busId": localStorage.getItem('busId')}
this._cus.getCustomersListDetails(param).subscribe(res => {
if (res.status == 200) {
this.customersList = res.data;
console.log(this.customersList,this.appoinmentsIds)
let user_role = localStorage.getItem('user_role');
if(user_role == 'PRACTITIONER'){

View File

@ -9,15 +9,15 @@
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<mat-label>Name</mat-label>
<input placeholder=" Name" matInput formControlName="busName">
<mat-label>Business Name</mat-label>
<input placeholder="Business Name" matInput formControlName="busName">
<mat-error *ngIf="myError('busName', 'required')">Name is required</mat-error>
<mat-error *ngIf="myError('busName', 'maxlength')">Limit exceed</mat-error>
</mat-form-field>
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<mat-label>Email</mat-label>
<input type="email" placeholder=" Email" matInput [(ngModel)]="local_data.email" formControlName="email">
<input type="email" placeholder="Email" matInput [(ngModel)]="local_data.email" formControlName="email">
<mat-error *ngIf="!form.get('email')?.errors?.required && (form.get('email')?.errors?.pattern)">
Please enter a valid email address
</mat-error>
@ -25,10 +25,13 @@
<mat-error *ngIf="form.get('email')?.invalid && (form.get('email')?.dirty || form.get('email')?.touched) && form.get('email')?.errors?.required">
Email is required
</mat-error>
<mat-error *ngIf="form.get('email').errors?.usernameTaken && form.get('email').dirty">
Email already exists...
</mat-error>
</mat-form-field>
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<mat-label>Phone No</mat-label>
<input type="text" appMobileNumberPattern maxlength="10" minlength="10" placeholder="Phone No" matInput [(ngModel)]="local_data.contactNo" formControlName="contactNo">
<mat-label>Mobile No</mat-label>
<input type="text" appMobileNumberPattern maxlength="10" minlength="10" placeholder="Mobile No" matInput [(ngModel)]="local_data.contactNo" formControlName="contactNo">
<mat-error *ngIf="myError('contactNo', 'required')">Contact No is required</mat-error>
<mat-error *ngIf="myError('contactNo', 'pattern')">Invalid Contact No </mat-error>
<mat-error *ngIf="myError('contactNo', 'minlength')"> Contact No must be at least 10 characters</mat-error>
@ -36,13 +39,13 @@
</mat-form-field>
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<mat-label>Address</mat-label>
<input placeholder=" Address" matInput [(ngModel)]="local_data.address" formControlName="address">
<input placeholder="Address" matInput [(ngModel)]="local_data.address" formControlName="address">
<mat-error *ngIf="myError('address', 'required')">Address is required</mat-error>
<mat-error *ngIf="myError('address', 'maxlength')">Limit exceed</mat-error>
</mat-form-field>
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<mat-label>State</mat-label>
<input placeholder=" State" matInput [(ngModel)]="local_data.state" formControlName="state">
<input placeholder="State" matInput [(ngModel)]="local_data.state" formControlName="state">
<mat-error *ngIf="myError('state', 'required')">State is required</mat-error>
<mat-error *ngIf="myError('state', 'maxlength')">Limit exceed</mat-error>
</mat-form-field>
@ -54,7 +57,7 @@
</mat-form-field>
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<mat-label>Type Of Currency</mat-label>
<input placeholder=" City" matInput [(ngModel)]="local_data.currency" formControlName="currency">
<input placeholder="Type Of Currency" matInput [(ngModel)]="local_data.currency" formControlName="currency">
<mat-error *ngIf="myError('currency', 'required')">City is required</mat-error>
<!-- <mat-error *ngIf="myError('currency', 'maxlength')">Limit exceed</mat-error> -->
</mat-form-field>

View File

@ -1,3 +1,4 @@
import { HttpClient } from '@angular/common/http';
import { Component, Inject, OnInit, Optional } from '@angular/core';
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
import { MatCheckboxChange } from '@angular/material/checkbox';
@ -5,6 +6,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { Router } from '@angular/router';
import { NotifierService } from 'angular-notifier';
import { environment } from 'environments/environment';
import { map } from 'rxjs/internal/operators/map';
export interface UsersData {
name: string;
id: number;
@ -28,7 +30,7 @@ export class AddBusinessComponent implements OnInit {
selectedFiles: any;
currentFileUpload: any;
private apiUrl = environment.apiEndpoint;
constructor(private notifierService: NotifierService,private router: Router,private formBuilder: FormBuilder,
constructor(private http: HttpClient,private notifierService: NotifierService,private router: Router,private formBuilder: FormBuilder,
public dialogRef: MatDialogRef<AddBusinessComponent>,
@Optional() @Inject(MAT_DIALOG_DATA) public data: UsersData) {
console.log(data);
@ -97,7 +99,7 @@ export class AddBusinessComponent implements OnInit {
state: new FormControl('', [Validators.required]),
email: new FormControl('', [Validators.required, Validators.email,Validators.pattern(
'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,63}$',
),]),
),],[this.validateUsernameAvailability.bind(this)]),
contactNo: new FormControl('', [Validators.required, Validators.minLength(10),Validators.maxLength(10)]),
createdBy:new FormControl(userrole,[Validators.required]),
});
@ -109,6 +111,25 @@ export class AddBusinessComponent implements OnInit {
return this.form.controls[controlName].hasError(errorName);
}
validateUsernameAvailability(control: FormControl) {
return this.http.get<any[]>(this.apiUrl + "businessDetailList")
.pipe(
map((response:any) => {
console.log(response)
let tmp=[];
response.data.forEach(element => {
tmp.push(element.email)
});
console.log(tmp,`${control.value}`);
return !tmp.includes(`${control.value}`) ? null : { usernameTaken: true };
})
);
}
submit(){
let tmp = this.form.value
tmp.id = this.local_data.id

View File

@ -10,7 +10,7 @@
<div fxFlex.xs="50" fxFlex.sm="50" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="m-gap p-gap" fxLayoutAlign="end center">
<mat-form-field class="form-field">
<mat-label>Search practitioner</mat-label>
<input type="text" [(ngModel)]="filterdata" matInput placeholder="Search Service">
<input type="text" [(ngModel)]="filterdata" matInput placeholder="Search practitioner">
<mat-icon matSuffix>search</mat-icon>
</mat-form-field>
</div>
@ -34,7 +34,7 @@
</div>
</div>
<div class="consultant-profile text-center">
<h5 class="text-primary">Dr.{{consultant.userName}}</h5>
<h5 class="text-primary">{{consultant.userName}}</h5>
<!-- <span class="silk-block mb-1 consultant-qualification">{{consultant.practitionerInfos[0].qualification || null}}</span><br> -->
<!-- <span class="silk-block consultant-span">{{consultant.practitionerInfos[0].designtion
|| "ENT" }}</span><br>
@ -114,15 +114,16 @@
</ng-template>
<div class="staff">
<span class="staff-title">
Profile
Profile <span *ngIf="userRole == 'FRONTDESK'">- ({{usersList.userName}})</span>
</span>
<button mat-icon-button matTooltip="Edit" style="padding: 4px 20px !;" *ngIf="isEditable == false" (click)="edit_table(isEditable)" fileName="customers"><mat-icon >edit</mat-icon></button>
<!-- <button mat-icon-button *ngIf="table[0].statement == statement_item && table[0].statement != 'Cash Flow Statement'" color="accent" matTooltip="Edit" matTooltipPosition="right" (click)="editandcancel(true,table[0].section)" ><mat-icon>edit</mat-icon></button> -->
<button mat-icon-button color="accent" *ngIf="isEditable == true" (click)="edit_table(isEditable)" matTooltip="Cancel" matTooltipPosition="right" ><mat-icon>cancel_presentation</mat-icon></button>
<button mat-icon-button color="accent" *ngIf="isEditable == true" (click)="save()" matTooltip="Submit" matTooltipPosition="right" ><mat-icon>done</mat-icon></button>
</div>
<ng-scrollbar class="scrollHV">
<div mat-dialog-content class="my-table" style="margin: 5%;" >
<div mat-dialog-content class="my-table" style="margin-top: 15px;">
<ng-scrollbar class="scrollHVtab1">
<!-- <form [formGroup]="registerForm" (ngSubmit)="onSubmit()"> -->
<div class="form-group label-container">
<label>Name <span class="line">-</span></label>
@ -286,8 +287,9 @@
<button class="btn btn-primary">Register</button>
</div> -->
<!-- </form> -->
</ng-scrollbar>
</div>
</ng-scrollbar>
</mat-tab>
<mat-tab *ngIf="userRole != 'BADMIN'">
@ -297,12 +299,12 @@
</ng-template>
<div class="staff">
<span class="staff-title">
Working Hours
Working Hours <span *ngIf="userRole == 'FRONTDESK'">- ({{usersList.userName}})</span>
</span>
<button mat-button (click)="openDialog('Add',{})" class="button">Edit</button>
</div>
<div class="working-hours">
<ng-scrollbar class="scrollHV">
<ng-scrollbar class="scrollHVtab2">
<!-- <input id="color-toggle" type="checkbox" >
<label for="color-toggle" class="toggle">Customize working hours.</label> -->
<div class="booking-url">
@ -511,11 +513,11 @@
</ng-template>
<div class="staff assignService" >
<span class="staff-title">
Define Your Services
Define Your Services <span *ngIf="userRole == 'FRONTDESK'">- ({{usersList.userName}})</span>
</span>
<mat-form-field appearance="outline" style="width: 45%;" class="mat-pane">
<mat-label>Assign Service</mat-label>
<mat-select placeholder="Select Role" [(ngModel)]="assignService" multiple required>
<mat-select placeholder="Assign Service" [(ngModel)]="assignService" multiple required>
<!-- <ng-scrollbar class="scrollHV"> -->
<mat-option (onSelectionChange)="getValues($event,details)" *ngFor="let details of servicesList" [value]="details.servicesName">
<div class="card-comment-widget">
@ -537,7 +539,7 @@
</mat-form-field>
</div>
<div *ngIf="servicesList_array.length != 0">
<ng-scrollbar class="scrollHV">
<ng-scrollbar class="scrollHVtab3">
<mat-card class="p-1" *ngFor="let details of servicesList_array;let i = index">
<div fxLayout="row" class="flexCard">
<div fxFlex.xs="10" fxFlex.sm="10" fxFlex.md="10" fxFlex.lg="10" fxFlex.xl="10">
@ -571,16 +573,16 @@
<mat-tab>
<ng-template mat-tab-label>
<i class="material-icons icons">&#xe85d;</i> Staff Booking URL
<i class="material-icons icons">&#xe85d;</i> Appointment Booking Link
</ng-template>
<div class="staff">
<span class="staff-title">
Share Booking Page
Share Appointment Booking Link <span *ngIf="userRole == 'FRONTDESK'">- ({{usersList.userName}})</span>
</span>
</div>
<div class="booking-url">
<p class="booking-para">Here's your personal booking page. Edit and share this link with customers so they can book your Services directly.</p>
<span class="underline-title full-width">Default booking domain</span>
<span class="underline-title full-width">Appoinment booking domain</span>
</div>
<div class="boxmiddle fl boxsize mt20">
<div class="booking-urls">

View File

@ -28,8 +28,8 @@ h5{
display: flex !important;
}
.scrollHV {
height: calc(100vh - 105px);
.scrollHVtab1 {
height: calc(100vh - 200px);
}
.consultant-list-card {
border-radius: 10px;
@ -338,8 +338,8 @@ margin: 30px 25px 30px 30px;
margin-top: 4px;
margin-left: 10px;
}
.scrollHV {
height: calc(100vh - 190px);
.scrollHVtab2 {
height: calc(100vh - 205px);
}
.add-button{
border: 1px solid #50497F;
@ -354,10 +354,7 @@ margin: 30px 25px 30px 30px;
.dis-font{
font-size: 15px;
}
.mat-tab-body-content {
height: 100%;
overflow: hidden!important;
}
.margin{
margin-bottom: 10rem;
}
@ -382,11 +379,9 @@ margin: 30px 25px 30px 30px;
// }
//mat-tab3start
.assignService{
.scrollHV {
height: calc(100vh - 461px) !important;
}
}
.p-1{
padding: 1rem !important;
.flexCard{
@ -584,9 +579,7 @@ padding-top: 13px;
box-sizing: border-box;
line-height: 15px;
}
.scrollHV {
height: calc(100vh - 240px);
}
::ng-deep .mat-form-field-infix {
height: 50px!important;
}
@ -640,4 +633,13 @@ content: "\20B9";
.scrollHV2{
height: calc(100vh - 305px);
}
::ng-deep .mat-tab-body-content {
height: 100%;
overflow:hidden !important;
}
.scrollHVtab3 {
height: calc(100vh - 190px) !important;
}

View File

@ -268,9 +268,9 @@ unavailability(action,obj) {
this._con.getPractitionerInfo.next( this.usersList['practitionerInfos']);
console.log(this.practitionerdetails)
if(this.userRole == 'PRACTITIONER'){
if(this.userRole == 'PRACTITIONER' || this.userRole == 'FRONTDESK'){
this.endUserURL = this.end_User_Url+'practitioner/'+this.usersList.randStr+"/details"
} else if (this.userRole == 'BADMIN' || this.userRole == 'FRONTDESK' ){
} else if (this.userRole == 'BADMIN'){
this.endUserURL = this.end_User_Url+'business/'+this.usersList['BusinessDetails'][0].randStr
}

View File

@ -12,6 +12,24 @@ import { ConsultantService } from "../consultant-service/consultant.service";
})
export class EditWorkingHoursComponent implements OnInit {
startTimes:any = [
"12:00 am",
"12:30 am",
"01:00 am",
"01:30 am",
"02:00 am",
"02:30 am",
"03:00 am",
"03:30 am",
"04:00 am",
"04:30 am",
"05:00 am",
"05:30 am",
"06:00 am",
"06:30 am",
"07:00 am",
"07:30 am",
"08:00 am",
"08:30 am",
"09:00 am",
"09:30 am",
"10:00 am",
@ -37,8 +55,31 @@ export class EditWorkingHoursComponent implements OnInit {
"08:00 pm",
"08:30 pm",
"09:00 pm",
"09:30 pm",
"10:00 pm",
"10:30 pm",
"11:00 pm",
"11:30 pm",
];
endTimes = [
"12:00 am",
"12:30 am",
"01:00 am",
"01:30 am",
"02:00 am",
"02:30 am",
"03:00 am",
"03:30 am",
"04:00 am",
"04:30 am",
"05:00 am",
"05:30 am",
"06:00 am",
"06:30 am",
"07:00 am",
"07:30 am",
"08:00 am",
"08:30 am",
"09:00 am",
"09:30 am",
"10:00 am",
@ -46,8 +87,8 @@ export class EditWorkingHoursComponent implements OnInit {
"11:00 am",
"11:30 am",
"12:00 pm",
"12:30 pm",
"01:00 pm",
"12:30 pm",
"01:00 pm",
"01:30 pm",
"02:00 pm",
"02:30 pm",
@ -64,6 +105,11 @@ export class EditWorkingHoursComponent implements OnInit {
"08:00 pm",
"08:30 pm",
"09:00 pm",
"09:30 pm",
"10:00 pm",
"10:30 pm",
"11:00 pm",
"11:30 pm",
];
days = [
"Sunday",

View File

@ -23,7 +23,7 @@
</mat-error>
</mat-form-field>
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<input placeholder=" Phone" type="text" appMobileNumberPattern maxlength="10" minlength="10" matInput [(ngModel)]="local_data.phoneNo" formControlName="phoneNo">
<input placeholder=" Mobile No" type="text" appMobileNumberPattern maxlength="10" minlength="10" matInput [(ngModel)]="local_data.phoneNo" formControlName="phoneNo">
<mat-error *ngIf="myError('phoneNo', 'required')">Contact No is required</mat-error>
<mat-error *ngIf="myError('phoneNo', 'pattern')">Invalid Contact No </mat-error>
<mat-error *ngIf="myError('phoneNo', 'minlength')"> Contact No must be at least 10 characters</mat-error>

View File

@ -8,6 +8,7 @@ import { AppointmentsService } from 'app/appoinment/appoinments/appointments-ser
import Swal from 'sweetalert2';
import { AddCustomersComponent } from '../add-customers/add-customers.component';
import { CustomersService } from '../customers-service/customers.service';
import { local } from 'd3';
export interface UsersData {
@ -111,8 +112,8 @@ export class CustomersListComponent implements OnInit {
}
getCustomerDetails(){
this._cus.getCustomersListDetails().subscribe(res => {
let param = {"busId": localStorage.getItem('busId')}
this._cus.getCustomersListDetails(param).subscribe(res => {
if (res.status == 200) {
this.isLoading = false
this.customersList = res.data;
@ -123,7 +124,6 @@ export class CustomersListComponent implements OnInit {
const activeIds = this.appoinmentsIds
const serviceList = this.customersList
console.log(activeIds,serviceList)
const result = serviceList.filter(({id}) => activeIds.includes(id));
console.log(result)
this.customersList = result
@ -132,8 +132,7 @@ export class CustomersListComponent implements OnInit {
return b.id - a.id;
});
this.customersList.forEach((element, index) => {
element.index = index
element.index = index
});
this.customersListSource['data'] = this.customersList;
@ -145,8 +144,6 @@ export class CustomersListComponent implements OnInit {
});
this.customersList.forEach((element, index) => {
element.index = index
});
this.customersListSource['data'] = this.customersList;
console.log(this.customersListSource)

View File

@ -12,14 +12,15 @@ export class CustomersService {
private apiUrl = environment.apiEndpoint;
constructor(private _http: HttpClient) { }
getCustomersListDetails(): Observable<any> {
console.log('IN')
return this._http.get<any[]>(this.apiUrl + "getCustomersDetails")
getCustomersListDetails(param): Observable<any> {
return this._http.post<any[]>(this.apiUrl + "getCustomersDetails",param)
// .pipe(
// catchError(this.handleError('role', []))
// )
}
addFormDetails(addParams): Observable<any> {
return this._http.post(this.apiUrl + 'CreateCustomers', addParams)
// .pipe(

View File

@ -9,7 +9,7 @@
<div fxFlex.xs="50" fxFlex.sm="50" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="m-gap p-gap" fxLayoutAlign="end center">
<mat-form-field class="form-field">
<mat-label>Search practitioner</mat-label>
<input type="text" [(ngModel)]="filterdata" matInput placeholder="Search Service">
<input type="text" [(ngModel)]="filterdata" matInput placeholder="Search practitioner">
<mat-icon matSuffix>search</mat-icon>
</mat-form-field>
</div>
@ -30,7 +30,7 @@
</div>
</div>
<div class="consultant-profile text-center">
<h5 class="text-primary">Dr.{{consultant.userName}}</h5>
<h5 class="text-primary">{{consultant.userName}}</h5>
<!-- <span class="silk-block mb-1 consultant-qualification">{{consultant.practitionerInfos[0].qualification || null}}</span><br> -->
<!-- <span class="silk-block consultant-span">{{consultant.practitionerInfos[0].designtion
|| "ENT" }}</span><br>

View File

@ -5,13 +5,13 @@
<div mat-dialog-content class="my-table">
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<mat-label>ServiceName</mat-label>
<input placeholder="servicesName" matInput formControlName="servicesName">
<input placeholder="Service Name" matInput formControlName="servicesName">
<mat-error *ngIf="myError('servicesName', 'required')">ServiceName is required</mat-error>
<mat-error *ngIf="myError('servicesName', 'maxlength')">Limit exceed</mat-error>
</mat-form-field>
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<mat-label>Duration</mat-label>
<mat-select placeholder="Select Role" formControlName="duration" required>
<mat-select placeholder="Select Duration" formControlName="duration" required>
<mat-option>--</mat-option>
<mat-option *ngFor="let data of durationTime" [value]="data.time">
{{data.time}} Mins

View File

@ -17,7 +17,7 @@ export class AddServiceComponent implements OnInit {
form: FormGroup;
local_data:any;
action:string;
public durationTime = [{'time':'10'},{'time':'15'},{'time':'20'},{'time':'25'},{'time':'30'},{'time':'35'},{'time':'45'},{'time':'50'},{'time':'55'},{'time':'60'}]
public durationTime = [{'time':'15'},{'time':'30'},{'time':'45'},{'time':'60'},{'time':'75'},{'time':'90'},{'time':'105'},{'time':'120'},{'time':'135'},{'time':'150'},{'time':'165'},{'time':'180'}]
constructor(private router: Router,private formBuilder: FormBuilder,
public dialogRef: MatDialogRef<AddServiceComponent>,
@Optional() @Inject(MAT_DIALOG_DATA) public data: UsersData) {

View File

@ -5,10 +5,10 @@
</mat-form-field>
<mat-form-field appearance="outline" style="width:20%;margin-left: 5%;" *ngIf="user_role == 'FRONTDESK'">
<mat-label>Practitioner</mat-label>
<mat-select placeholder="Select Business" [(ngModel)]="selectPractitioner" required>
<mat-select placeholder="Select Practitioner" [(ngModel)]="selectPractitioner" required>
<mat-option value="All" (click)="allPractitioner()">All</mat-option>
<mat-option *ngFor="let details of consultants" (click)="getPractitioner(details)" [value]="details.id">
Dr. {{details.userName}}
{{details.userName}}
</mat-option>
</mat-select>
</mat-form-field>

View File

@ -116,6 +116,7 @@ export class ServiceListComponent implements OnInit {
);
this.servicesList = result
this.servicesListSource['data'] = this.servicesList;
this.servicesListLength = this.servicesList.length
console.log(this.servicesListSource)
this.recordStatus=false;
}

View File

@ -59,10 +59,13 @@
<mat-error *ngIf="form.get('email')?.invalid && (form.get('email')?.dirty || form.get('email')?.touched) && form.get('email')?.errors?.required">
Email is required
</mat-error>
<mat-error *ngIf="form.get('email').errors?.usernameTaken && form.get('email').dirty">
Email already exists...
</mat-error>
</mat-form-field>
<mat-form-field appearance="outline" *ngIf="action != 'Delete'; else elseTemplate" class="mat-pane">
<mat-label>Phone No</mat-label>
<input matInput type="text" appMobileNumberPattern maxlength="10" minlength="10" placeholder="Enter Phone No" formControlName="contactNo" id="contactNo">
<mat-label>Mobile No</mat-label>
<input matInput type="text" appMobileNumberPattern maxlength="10" minlength="10" placeholder="Mobile No" formControlName="contactNo" id="contactNo">
<mat-error *ngIf="myError('contactNo', 'required')">Contact No is required</mat-error>
<mat-error *ngIf="myError('contactNo', 'pattern')">Invalid Contact No </mat-error>
<mat-error *ngIf="myError('contactNo', 'minlength')"> Contact No must be at least 10 characters</mat-error>

View File

@ -1,3 +1,4 @@
import { HttpClient } from '@angular/common/http';
import { Component, Inject, OnInit, Optional } from '@angular/core';
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
@ -6,6 +7,7 @@ import { NotifierService } from 'angular-notifier';
import { BusinessService } from 'app/appoinment/business/business-service/business.service';
import { ApiServiceService } from 'app/appoinment/service-list-details/service-api-services/api-service.service';
import { environment } from 'environments/environment';
import { map } from 'rxjs/internal/operators/map';
export interface UsersData {
userName: string;
@ -37,11 +39,15 @@ export class AddUserComponent implements OnInit {
servicesList: any = [];
serviceCheckedData: any = [];
assignedServiceValue: any = [];
constructor(private notifierService: NotifierService,private router: Router,private formBuilder: FormBuilder,
userList: any = [];
constructor(private http: HttpClient,private notifierService: NotifierService,private router: Router,private formBuilder: FormBuilder,
public dialogRef: MatDialogRef<AddUserComponent>,
@Optional() @Inject(MAT_DIALOG_DATA) public data: UsersData,public _bus:BusinessService,public _ser:ApiServiceService) {
console.log(data);
this.local_data = {...data};
let details:any = data
this.userList = details.userList
this.local_data = details.obj;
console.log(this.local_data)
// this.local_data.busId = localStorage.getItem('busNameID')
this.action = this.local_data.action;
@ -63,7 +69,7 @@ export class AddUserComponent implements OnInit {
// lastName: new FormControl('', [Validators.required, Validators.maxLength(20)]),
email: new FormControl('', [Validators.required, Validators.email,Validators.pattern(
'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,63}$',
),]),
),],[this.validateUsernameAvailability.bind(this)]),
// password: new FormControl('', [Validators.required, Validators.minLength(6)]),
password: new FormControl('', [Validators.required,Validators.pattern(
'^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*_=+-]).{8,12}$'
@ -84,6 +90,9 @@ export class AddUserComponent implements OnInit {
public myError = (controlName: string, errorName: string) =>{
return this.form.controls[controlName].hasError(errorName);
}
// doAction(){
// let tmp = this.form.value
// tmp.id = this.local_data.id
@ -107,6 +116,32 @@ export class AddUserComponent implements OnInit {
// console.log(this.action,this.local_data)
// }
validateUsernameAvailability(control: FormControl) {
let userRole = localStorage.getItem('user_role')
let param;
if(userRole == 'BADMIN'){
param ={"busId": localStorage.getItem('busId')}
}else {
param = {}
}
return this.http.post<any[]>(this.apiUrl + "getusers",param)
.pipe(
map((response:any) => {
console.log(response)
let tmp=[];
response.data.forEach(element => {
tmp.push(element.email)
});
console.log(tmp,`${control.value}`);
return !tmp.includes(`${control.value}`) ? null : { usernameTaken: true };
})
);
}
getBusinessList() {
//this._pd.getTabStatusPdDetails(this.tabStatus)
this._bus.getBusinessListDetails().subscribe(res => {

View File

@ -1,10 +1,10 @@
<h5 mat-dialog-title> <strong>Assign Service to Dr. {{pracititionerName}}</strong>
<h5 mat-dialog-title> <strong>Assign Service to {{pracititionerName}}</strong>
<button mat-icon-button type="button" matTooltip="Close" class="button" matTooltipPosition="above" (click)="close()"
><mat-icon>close</mat-icon></button></h5>
<mat-form-field appearance="outline" class="mat-pane" >
<mat-label>Assign Service</mat-label>
<mat-select placeholder="Select Role" [(ngModel)]="assignService" multiple required>
<mat-select placeholder="Assign Service" [(ngModel)]="assignService" multiple required>
<mat-option *ngFor="let details of servicesList" (onSelectionChange)="getValues($event,details)" [value]="details.servicesName">
{{details.servicesName}}
</mat-option>

View File

@ -216,7 +216,7 @@ export class UserListComponent implements OnInit {
height: '100%',
// maxWidth: '38vw',
position: { right: '0' },
data:obj
data:{obj,userList:this.usersList['data']}
});
dialogRef.afterClosed().subscribe(result => {
localStorage.setItem('go_admin','1')

View File

@ -84,7 +84,7 @@
<span class="head">Practitioner</span>
</div>
<div fxFlex.xs="75" fxFlex.sm="75" fxFlex.md="75" fxFlex.lg="75" fxFlex.xl="75">
<span>: Dr.{{serviceMapDetails.user[0].userName}}</span>
<span>: {{serviceMapDetails.user[0].userName}}</span>
</div>
</div>
<div fxLayout="row wrap" style="margin-bottom: 20px;">
@ -120,7 +120,7 @@
<span class="head">Booked On</span>
</div>
<div fxFlex.xs="75" fxFlex.sm="75" fxFlex.md="75" fxFlex.lg="75" fxFlex.xl="75">
<span>: {{bookingSummary.createdAt | date:'fullDate'}}</span>
<span>: {{bookingSummary.createdAt | date:'MM/dd/yyyy'}}</span>
</div>
</div>
</mat-card-content>

View File

@ -136,7 +136,7 @@ image_view(image){
let companyName = this.busName
let brandUrl = this.serviceMapDetails.service[0].servicesName
let cusMail = this.customerBookingDetails.email
let practitioner = 'Appointment-with-Dr.'+this.serviceMapDetails.user[0].userName
let practitioner = 'Appointment-with-'+this.serviceMapDetails.user[0].userName
let addEvent = calendarUrl+practitioner+'&'+'&dates='+this.dateConvertFormat(appoiDateStart)+'/'+this.dateConvertFormat(appoiDateEnd)+'&location='+companyName+'&details='+brandUrl+'&add='+cusMail

View File

@ -4,8 +4,8 @@
</div>
<div fxFlex.xs="50" fxFlex.sm="50" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="p-gap" fxLayoutAlign="end center">
<mat-form-field appearance="fill">
<mat-label>Search consultant</mat-label>
<input type="text" [(ngModel)]="filterdata" matInput placeholder="Search Service">
<mat-label>Search Consultant</mat-label>
<input type="text" [(ngModel)]="filterdata" matInput placeholder="Search Consultant">
<mat-icon matSuffix>search</mat-icon>
</mat-form-field>
</div>

View File

@ -24,7 +24,7 @@
<div fxFlex.xs="50" fxFlex.sm="50" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="m-gap p-gap" fxLayoutAlign="end center">
<mat-form-field class="form-field">
<mat-label>Search practitioner</mat-label>
<input type="text" [(ngModel)]="filterdata" matInput placeholder="Search Service">
<input type="text" [(ngModel)]="filterdata" matInput placeholder="Search practitioner">
<mat-icon matSuffix>search</mat-icon>
</mat-form-field>
</div>
@ -47,7 +47,7 @@
</div>
</div>
<div class="consultant-profile text-center">
<h5 class="text-primary">Dr.{{consultant.userName}}</h5>
<h5 class="text-primary">{{consultant.userName}}</h5>
<span class="silk-block mb-1 consultant-qualification">{{consultant.practitionerInfos[0].qualification || null}}</span><br>
<!-- <span class="silk-block consultant-span">{{consultant.practitionerInfos[0].designtion
|| "ENT" }}</span><br>

View File

@ -41,24 +41,25 @@
</mat-error>
</mat-form-field>
</div>
<div fxFlex.xs="50" fxFlex.sm="50" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="p-gap" fxLayoutAlign="center center">
<div fxFlex.xs="50" fxFlex.sm="50" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="p-gap">
<div [ngSwitch]="otpData">
<div fxLayout="row">
<div fxFlex.xs="80" fxFlex.sm="80" fxFlex.md="80" fxFlex.lg="80" fxFlex.xl="80">
<mat-form-field style="width: 100%">
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="70" fxFlex.lg="70" fxFlex.xl="70" fxLayoutAlign="center center">
<mat-form-field style="width: 70%">
<input matInput type="text" appMobileNumberPattern maxlength="10" minlength="10" placeholder="Phone No" name="phone" formControlName="phoneNo" [readonly]="noChangeNo == '1'" required>
<mat-error *ngIf="myError('phoneNo', 'required')">Contact No is required</mat-error>
<mat-error *ngIf="myError('phoneNo', 'pattern')">Invalid Contact No </mat-error>
<mat-error *ngIf="myError('phoneNo', 'minlength')"> Contact No must be at least 10 characters</mat-error>
<mat-error *ngIf="myError('phoneNo', 'maxlength')">Limit exceed</mat-error>
</mat-form-field>
<div id="sign-in-button"></div>
<div *ngIf="verifyOTP != '1'" fxFlex.xs="20" fxFlex.sm="20" fxFlex.md="20" fxFlex.lg="20" fxFlex.xl="20">
<button mat-raised-button type="button" (click)="getOTP(1)" [disabled]="myError('phoneNo', 'minlength') || myError('phoneNo', 'required')" color="primary" class="mr-1 mb-1">Get OTP</button>
</div>
<span *ngIf="verifyOTP == '1'"><mat-icon style="color: #4CAF50;">verified</mat-icon></span>
</div>
</div>
<div fxFlex.xs="30" fxFlex.sm="30" fxFlex.md="30" fxFlex.lg="30" fxFlex.xl="30" fxLayoutAlign="center center">
<div *ngIf="verifyOTP != '1'">
<button mat-raised-button type="button" (click)="getOTP(1)" [disabled]="myError('phoneNo', 'minlength') || myError('phoneNo', 'required')" color="primary" class="mr-1 mb-1">Get OTP</button>
</div>
<span *ngIf="verifyOTP == '1'"><mat-icon style="color: #4CAF50;">verified</mat-icon></span>
</div>
<div id="sign-in-button"></div>
</div>
<!-- <div *ngSwitchCase="1">
@ -115,7 +116,7 @@
<!-- <p class="param"><img src="assets/images/Location.svg" alt="Avatar" class="img">Business </p>
<span class="span-text">{{busName}}</span> -->
<p class="param"><img src="assets/images/person.svg" alt="Avatar" class="img">Practitioner </p>
<span class="span-text">Dr. {{bookedDetails.doctor}}</span>
<span class="span-text">{{bookedDetails.doctor}}</span>
<p class="param"><img src="assets/images/information.svg" alt="Avatar" class="img"> Service </p>
<span class="span-text"> {{bookedDetails.service}} ({{bookedDetails.duration}}Mins)</span>
<p class="param"><img src="assets/images/Languages.svg" alt="Avatar" class="img">Date </p>

View File

@ -10,6 +10,7 @@ import { OptVerifyComponent } from './opt-verify/opt-verify.component';
import { event } from 'jquery';
import { environment } from 'environments/environment';
import {Location} from '@angular/common';
import { local } from 'd3';
var config = {
apiKey: "AIzaSyBVPQ6C7cg5l8I-o7WSmmXdioMa4C0ZKNM",
@ -80,7 +81,9 @@ export class CustomerInfoComponent implements OnInit {
if(this.verifyOTP == 1){
let row_obj = this.form.value
console.log(row_obj)
let addFormData = {
let busId = localStorage.getItem('busId')
let addFormData = {
busId: busId,
cusName: row_obj.cusName,
email: row_obj.email,
address_1: row_obj.address_1,

View File

@ -7,7 +7,7 @@
</div>
<div class="media-prof">
<span class="bg-secondary p-1 px-4 rounded text-white">Pro</span>
<h5>Dr. Suganya</h5>
<h5>Suganya</h5>
<p class="years">ENT | 8 YRS</p>
<div class="header">
<div class="content">
@ -30,11 +30,11 @@
</div>
</div>
<div class="px-4 mt-1 line">
<h6 class="title-dr">About Dr. Suganya</h6>
<p class="fonts">Dr Suganya is a well-known surgeon and one of the best ENT specialists in Chennai. She is trained to treat medical and surgical conditions affecting the ear, nose and throat. ENT specialists are also called otolaryngologists. </p>
<h6 class="title-">About Suganya</h6>
<p class="fonts">Suganya is a well-known surgeon and one of the best ENT specialists in Chennai. She is trained to treat medical and surgical conditions affecting the ear, nose and throat. ENT specialists are also called otolaryngologists. </p>
</div>
<div class="px-4 mt-1">
<h6 class="title-dr"> Clinic Address</h6>
<h6 class="title-"> Clinic Address</h6>
<p class="fonts">No. 320, Padma Complex, Anna Salai,TeynampetChennai</p>
</div>
</div>
@ -66,7 +66,7 @@
<img src="{{dp}}" width="100" class="rounded-circle">
</div>
<div class="heading">
<h3>Dr.{{bookedAppointment.userName}}</h3>
<h3>{{bookedAppointment.userName}}</h3>
<a>{{bookedAppointment.practitionerInfos[0].designtion}}</a><br />
<button mat-raised-button (click)="goToSlotBooking()" style="background-color: #e7c953;">Book Appointment</button>
</div>
@ -130,7 +130,7 @@
<!-- <div class="elementor-container">
<h3 class="care">CARE COVERAGE</h3>
<p class="para">
The task forces early efforts had three lasting results: the formation of Dr.Changes caregiver center; the genesis of community social caregiver groups; and the beginnings of an evolutional movement to change the ideology of long-term health care and caregivers intended for the ill and elderly in our country.
The task forces early efforts had three lasting results: the formation of Changes caregiver center; the genesis of community social caregiver groups; and the beginnings of an evolutional movement to change the ideology of long-term health care and caregivers intended for the ill and elderly in our country.
</p>
</div> -->
<div class="elementor-container">

View File

@ -201,7 +201,7 @@
<!-- <p class="param"><img src="assets/images/Location.svg" alt="Avatar" class="img">Business </p>
<span class="span-text">{{busName}}</span> -->
<p class="param"><img src="assets/images/person.svg" alt="Avatar" class="img"> Practitioner </p>
<span class="span-text">Dr. {{doctor}}</span>
<span class="span-text">{{doctor}}</span>
<p class="param"><img src="assets/images/information.svg" alt="Avatar" class="img"> Service </p>
<span class="span-text" *ngIf="serviceMapdetails.length>0"> {{servicesName.servicesName}} ({{serviceMapdetails[0].duration.length>0 ? serviceMapdetails[0].duration[0].durationNew:serviceMapdetails[0].service[0].duration
}} Mins)</span>

View File

@ -10,10 +10,10 @@ export class RoleMenuItemsPipe implements PipeTransform {
// // this is for horizontal menu filter
// if(type=="1"){
switch(localStorage.getItem('user_role')){
case 'SADMIN': return value.filter(val=>val.state!="appoinments" && val.state!="customers" && val.state != "consultant-setting" && val.state!="consultants" && val.state!="services" && val.state!= "consultant-list");
case 'SADMIN': return value.filter(val=>val.state!="appoinments" && val.state!="customers" && val.state != "consultant-setting" && val.state!="consultants" && val.state!="services" && val.state!= "consultant-list" && val.state!= "mail-log");
case 'BADMIN': return value.filter(val=>val.state !="business" && val.state!="consultants" && val.state!="appoinments" && val.state!= "consultant-list");
case 'PRACTITIONER': return value.filter(val=>val.state !="business" && val.state!="consultants" && val.state!="users" && val.state!="services" && val.state!= "consultant-list");
case 'FRONTDESK': return value.filter(val=>val.state !="business" && val.state!="consultants" && val.state!="users" && val.state != "home" && val.state!="customers" && val.state!= "consultant-list");
case 'PRACTITIONER': return value.filter(val=>val.state !="business" && val.state!="consultants" && val.state!="users" && val.state!="services" && val.state!= "consultant-list" && val.state!= "mail-log");
case 'FRONTDESK': return value.filter(val=>val.state !="business" && val.state!="consultants" && val.state!="users" && val.state != "home" && val.state!="customers" && val.state!= "consultant-list" && val.state!= "mail-log");
// case 'PRACTITIONER':
// case '3': return value.filter(val=>val.state!="settings");
// case '4': return value.filter(val=>val.state!="settings" && val.state!="quality_check_discussion" && val.state!="reports" && val.state!="sales-pd-list");

View File

@ -31,7 +31,7 @@
<div fxLayout="row wrap">
<div fxFlex.xs="80" fxFlex.sm="80" fxFlex.md="80" fxFlex.lg="80" fxFlex.xl="80">
<mat-form-field style="width: 90%;">
<input matInput placeholder="Enter Phone No" appMobileNumberPattern maxlength="6">
<input matInput placeholder="Mobile No" appMobileNumberPattern maxlength="6">
</mat-form-field>
<span>OTP will be sent to this number by SMS and whatsapp.</span>
</div>

View File

@ -102,7 +102,7 @@
</mat-form-field> -->
<mat-form-field>
<input matInput type="text" placeholder="Enter Contact No" formControlName="contact_no" id="contact_no">
<input matInput type="text" placeholder="Mobile No" formControlName="contact_no" id="contact_no">
<!-- <mat-hint align="end">Not more then 10 characters long.</mat-hint> -->
<mat-error *ngIf="myError('contact_no', 'required')">Contact No is required</mat-error>
<mat-error *ngIf="myError('contact_no', 'maxlength')">Limit exceed</mat-error>