Added Doctor Module
This commit is contained in:
parent
8545975107
commit
2b5b7be681
@ -48,6 +48,10 @@ const routes: Routes = [
|
|||||||
path: 'departments',
|
path: 'departments',
|
||||||
loadChildren: () => import('./departments/departments.module').then(m => m.DepartmentsModule),
|
loadChildren: () => import('./departments/departments.module').then(m => m.DepartmentsModule),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'doctors',
|
||||||
|
loadChildren: () => import('./doctors/doctors.module').then(m => m.DoctorsModule),
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
|
@ -30,12 +30,10 @@ import { AccountLayoutModule } from '@abp/ng.theme.lepton-x/account';
|
|||||||
CoreModule,
|
CoreModule,
|
||||||
ThemeSharedModule,
|
ThemeSharedModule,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
InternetConnectionStatusComponent,
|
InternetConnectionStatusComponent,
|
||||||
ThemeLeptonXModule.forRoot(),
|
ThemeLeptonXModule.forRoot(),
|
||||||
SideMenuLayoutModule.forRoot(),
|
SideMenuLayoutModule.forRoot(),
|
||||||
AccountLayoutModule.forRoot(),
|
AccountLayoutModule.forRoot(),
|
||||||
],
|
],
|
||||||
declarations: [AppComponent],
|
declarations: [AppComponent],
|
||||||
providers: [
|
providers: [
|
||||||
|
@ -39,7 +39,6 @@ export class AppointmentCalendarComponent implements OnInit {
|
|||||||
search: event.globalFilter == null ? '' : event.globalFilter,
|
search: event.globalFilter == null ? '' : event.globalFilter,
|
||||||
};
|
};
|
||||||
this.appointmentService.getAppointmentList(this.params).subscribe(data => {
|
this.appointmentService.getAppointmentList(this.params).subscribe(data => {
|
||||||
debugger
|
|
||||||
this.appointments = data.items;
|
this.appointments = data.items;
|
||||||
this.updateCalendarEvents();
|
this.updateCalendarEvents();
|
||||||
});
|
});
|
||||||
@ -65,7 +64,6 @@ export class AppointmentCalendarComponent implements OnInit {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
combineDateTime(dateStr: string, timeStr: string): string {
|
combineDateTime(dateStr: string, timeStr: string): string {
|
||||||
debugger
|
|
||||||
if (!timeStr) return dateStr;
|
if (!timeStr) return dateStr;
|
||||||
const date = new Date(dateStr);
|
const date = new Date(dateStr);
|
||||||
const [hours, minutes] = timeStr.split(':');
|
const [hours, minutes] = timeStr.split(':');
|
||||||
@ -82,7 +80,6 @@ export class AppointmentCalendarComponent implements OnInit {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
closeDialog() {
|
closeDialog() {
|
||||||
debugger;
|
|
||||||
this.isModalVisible = false;
|
this.isModalVisible = false;
|
||||||
this.loadAppointments({
|
this.loadAppointments({
|
||||||
first: 0,
|
first: 0,
|
||||||
@ -93,7 +90,6 @@ export class AppointmentCalendarComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
handleDateClick(arg) {
|
handleDateClick(arg) {
|
||||||
debugger;
|
|
||||||
this.selectedDate = arg.dateStr;
|
this.selectedDate = arg.dateStr;
|
||||||
this.isModalVisible = true;
|
this.isModalVisible = true;
|
||||||
this.isEditMode = false;
|
this.isEditMode = false;
|
||||||
@ -107,7 +103,6 @@ export class AppointmentCalendarComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onEventClick(info: any) {
|
onEventClick(info: any) {
|
||||||
debugger;
|
|
||||||
this.appointmentIdToEdit = info.event.id;
|
this.appointmentIdToEdit = info.event.id;
|
||||||
this.isEditMode = true;
|
this.isEditMode = true;
|
||||||
this.isModalVisible = true;
|
this.isModalVisible = true;
|
||||||
|
@ -4,15 +4,15 @@
|
|||||||
role="dialog"
|
role="dialog"
|
||||||
style="background: rgba(0, 0, 0, 0.5)"
|
style="background: rgba(0, 0, 0, 0.5)"
|
||||||
*ngIf="visible"
|
*ngIf="visible"
|
||||||
aria-label="l('name')"
|
aria-label="l('Doctor')"
|
||||||
>
|
>
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header py-4">
|
<div class="modal-header py-4">
|
||||||
<h4 class="text-success mb-0 fs-3 fw-normal">
|
<h4 class="text-success mb-0 fs-3 fw-normal">
|
||||||
{{ isEditMode ? 'Edit ' : 'Create ' }}{{name}}
|
{{ isEditMode ? 'Edit ' : 'Create ' }} Doctor
|
||||||
</h4>
|
</h4>
|
||||||
<button
|
<button
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
type="button"
|
type="button"
|
||||||
(click)="onClose()"
|
(click)="onClose()"
|
||||||
@ -20,126 +20,57 @@
|
|||||||
aria-label="Close"
|
aria-label="Close"
|
||||||
></button>
|
></button>
|
||||||
</div>
|
</div>
|
||||||
<form #departmentForm="ngForm" (ngSubmit)="saveDepartment(departmentForm)">
|
<form #doctorForm="ngForm" (ngSubmit)="saveDoctor(doctorForm)">
|
||||||
<div class="p-fluid grid justify-content-center">
|
<div class="p-fluid grid justify-content-center">
|
||||||
<div class="field col-md-5">
|
<div class="field col-md-5" *ngFor="let field of ['firstName', 'lastName', 'mobile', 'email']; let i = index">
|
||||||
<label for="departmentNo">Department No <span class="text-danger">*</span></label>
|
<label [for]="field">{{ field | titlecase }} <span class="text-danger">*</span></label>
|
||||||
<span class="p-input-icon-left p-input-icon-right">
|
<span class="p-input-icon-left p-input-icon-right">
|
||||||
<i class="pi pi-hashtag"></i>
|
<i class="pi" [ngClass]="{'pi-user': i < 2, 'pi-phone': field === 'mobile', 'pi-envelope': field === 'email'}"></i>
|
||||||
<input
|
<input pInputText [id]="field" [name]="field" [(ngModel)]="doctor[field]" required #ctrl="ngModel"
|
||||||
pInputText
|
[ngClass]="{'is-valid': ctrl.valid && ctrl.touched, 'is-invalid': ctrl.invalid && ctrl.touched}" />
|
||||||
id="departmentNo"
|
<i *ngIf="ctrl.valid && ctrl.touched" class="pi pi-check text-success"></i>
|
||||||
name="departmentNo"
|
<i *ngIf="ctrl.invalid && ctrl.touched" class="pi pi-times text-danger"></i>
|
||||||
[(ngModel)]="department.departmentNo"
|
|
||||||
#departmentNoCtrl="ngModel"
|
|
||||||
required
|
|
||||||
[ngClass]="{ 'is-valid': departmentNoCtrl.valid && departmentNoCtrl.touched, 'is-invalid': departmentNoCtrl.invalid && departmentNoCtrl.touched }"
|
|
||||||
/>
|
|
||||||
<i *ngIf="departmentNoCtrl.valid && departmentNoCtrl.touched" class="pi pi-check text-success"></i>
|
|
||||||
<i *ngIf="departmentNoCtrl.invalid && departmentNoCtrl.touched" class="pi pi-times text-danger"></i>
|
|
||||||
</span>
|
|
||||||
<small class="text-danger" *ngIf="departmentNoCtrl.invalid && departmentNoCtrl.touched">
|
|
||||||
<span *ngIf="departmentNoCtrl.errors?.required">Department No is required.</span>
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
<div class="field col-md-1"></div>
|
|
||||||
|
|
||||||
<div class="field col-md-5">
|
|
||||||
<label for="departmentName">Department Name <span class="text-danger">*</span></label>
|
|
||||||
<span class="p-input-icon-left p-input-icon-right">
|
|
||||||
<i class="pi pi-building"></i>
|
|
||||||
<input
|
|
||||||
pInputText
|
|
||||||
id="departmentName"
|
|
||||||
name="departmentName"
|
|
||||||
[(ngModel)]="department.departmentName"
|
|
||||||
#departmentNameCtrl="ngModel"
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
</span>
|
|
||||||
<small class="text-danger" *ngIf="departmentNameCtrl.invalid && departmentNameCtrl.touched">
|
|
||||||
<span *ngIf="departmentNameCtrl.errors?.required">Department Name is required.</span>
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="field col-md-5">
|
|
||||||
<label for="departmentDate">Department Date</label>
|
|
||||||
<p-calendar
|
|
||||||
id="departmentDate"
|
|
||||||
name="departmentDate"
|
|
||||||
[(ngModel)]="Departmentdate"
|
|
||||||
[showIcon]="true">
|
|
||||||
</p-calendar>
|
|
||||||
</div>
|
|
||||||
<div class="field col-md-1"></div>
|
|
||||||
|
|
||||||
<div class="field col-md-5">
|
|
||||||
<label for="departmentHead">Department Head</label>
|
|
||||||
<span class="p-input-icon-left">
|
|
||||||
<i class="pi pi-user"></i>
|
|
||||||
<input
|
|
||||||
pInputText
|
|
||||||
id="departmentHead"
|
|
||||||
name="departmentHead"
|
|
||||||
[(ngModel)]="department.departmentHead"
|
|
||||||
/>
|
|
||||||
</span>
|
</span>
|
||||||
|
<small class="text-danger" *ngIf="ctrl.invalid && ctrl.touched">{{ field | titlecase }} is required.</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="field col-md-5">
|
<div class="field col-md-5">
|
||||||
<label>Status</label>
|
<label for="specialization">Specialization</label>
|
||||||
<div class="flex align-items-center p-input-icon-right">
|
<input pInputText id="specialization" name="specialization" [(ngModel)]="doctor.specialization" />
|
||||||
<p-radioButton
|
</div>
|
||||||
name="status"
|
<div class="field col-md-5">
|
||||||
value="Active"
|
<label for="degree">Degree</label>
|
||||||
[(ngModel)]="department.status"
|
<input pInputText id="degree" name="degree" [(ngModel)]="doctor.degree" />
|
||||||
inputId="active"
|
</div>
|
||||||
></p-radioButton>
|
<div class="field col-md-5">
|
||||||
<label for="active" class="ml-2 mr-3">Active</label>
|
<label for="experience">Experience (Years)</label>
|
||||||
|
<input type="number" pInputText id="experience" name="experience" [(ngModel)]="doctor.experience" min="0" />
|
||||||
<p-radioButton
|
</div>
|
||||||
name="status"
|
<div class="field col-md-5">
|
||||||
value="Inactive"
|
<label for="consultationFee">Consultation Fee</label>
|
||||||
[(ngModel)]="department.status"
|
<input type="number" pInputText id="consultationFee" name="consultationFee" [(ngModel)]="doctor.consultationFee" min="0" />
|
||||||
inputId="inactive"
|
</div>
|
||||||
></p-radioButton>
|
<div class="field col-md-5">
|
||||||
<label for="inactive" class="ml-2">Inactive</label>
|
<label for="clinicLocation">Clinic Location</label>
|
||||||
</div>
|
<input pInputText id="clinicLocation" name="clinicLocation" [(ngModel)]="doctor.clinicLocation" />
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="rating">Rating</label>
|
||||||
|
<p-rating [(ngModel)]="doctor.rating" [stars]="4" [cancel]="false" name="rating"></p-rating>
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="availability">Availability</label>
|
||||||
|
<p-dropdown [options]="workScheduleOptions" [(ngModel)]="doctor.availability" name="availability" placeholder="Select Availability"></p-dropdown>
|
||||||
</div>
|
</div>
|
||||||
<div class="field col-md-6"></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="field col-11">
|
<div class="field col-11">
|
||||||
<label for="description">Description</label>
|
<label for="description">Description</label>
|
||||||
<textarea
|
<textarea id="description" name="description" [(ngModel)]="doctor.description" rows="5" cols="30" pInputTextarea></textarea>
|
||||||
id="description"
|
|
||||||
name="description"
|
|
||||||
[(ngModel)]="department.description"
|
|
||||||
rows="5"
|
|
||||||
cols="30"
|
|
||||||
pInputTextarea>
|
|
||||||
</textarea>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field col-11 flex justify-content-end">
|
<div class="field col-11 flex justify-content-end">
|
||||||
<button
|
<button pButton type="submit" label="Save" class="p-button-success" [disabled]="doctorForm.invalid"></button>
|
||||||
pButton
|
<button pButton type="button" label="Cancel" class="p-button-secondary ml-2" (click)="onClose()"></button>
|
||||||
type="submit"
|
|
||||||
label="Save"
|
|
||||||
class="p-button-success"
|
|
||||||
[disabled]="departmentForm.invalid">
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
pButton
|
|
||||||
type="button"
|
|
||||||
label="Cancel"
|
|
||||||
class="p-button-secondary ml-2"
|
|
||||||
(click)="onClose()">
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { DepartmentDialogComponent } from './department-dialog.component';
|
||||||
|
|
||||||
|
describe('DepartmentDialogComponent', () => {
|
||||||
|
let component: DepartmentDialogComponent;
|
||||||
|
let fixture: ComponentFixture<DepartmentDialogComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
imports: [DepartmentDialogComponent]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(DepartmentDialogComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -50,7 +50,6 @@ export class DepartmentDialogComponent implements OnInit {
|
|||||||
private toaster: ToasterService
|
private toaster: ToasterService
|
||||||
) {}
|
) {}
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
debugger;
|
|
||||||
if(this.isEditMode){
|
if(this.isEditMode){
|
||||||
this.fetchDepartmentData();
|
this.fetchDepartmentData();
|
||||||
}
|
}
|
||||||
@ -69,8 +68,6 @@ export class DepartmentDialogComponent implements OnInit {
|
|||||||
this.DepartmentService.getDepartmentById(this.Id).subscribe(result => {
|
this.DepartmentService.getDepartmentById(this.Id).subscribe(result => {
|
||||||
this.department = result;
|
this.department = result;
|
||||||
this.Departmentdate = new Date(result.departmentDate);
|
this.Departmentdate = new Date(result.departmentDate);
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
saveDepartment(form: NgForm) {
|
saveDepartment(form: NgForm) {
|
||||||
|
99
angular/src/app/doctors/doctor-dialog.component.html
Normal file
99
angular/src/app/doctors/doctor-dialog.component.html
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<div
|
||||||
|
class="modal fade show d-block"
|
||||||
|
tabindex="-1"
|
||||||
|
role="dialog"
|
||||||
|
style="background: rgba(0, 0, 0, 0.5)"
|
||||||
|
*ngIf="visible"
|
||||||
|
aria-label="l('Doctor')"
|
||||||
|
>
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header py-4">
|
||||||
|
<h4 class="text-success mb-0 fs-3 fw-normal">
|
||||||
|
{{ isEditMode ? 'Edit ' : 'Create ' }} Doctor
|
||||||
|
</h4>
|
||||||
|
<button
|
||||||
|
tabindex="0"
|
||||||
|
type="button"
|
||||||
|
(click)="onClose()"
|
||||||
|
class="btn-close"
|
||||||
|
aria-label="Close"
|
||||||
|
></button>
|
||||||
|
</div>
|
||||||
|
<form #doctorForm="ngForm" (ngSubmit)="saveDoctor(doctorForm)">
|
||||||
|
<div class="p-fluid grid justify-content-center">
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="firstName">First Name <span class="text-danger">*</span></label>
|
||||||
|
<input pInputText id="firstName" name="firstName" [(ngModel)]="doctor.firstName" required #firstNameCtrl="ngModel"
|
||||||
|
[ngClass]="{'is-invalid': firstNameCtrl.invalid && firstNameCtrl.touched}" />
|
||||||
|
<small class="text-danger" *ngIf="firstNameCtrl.invalid && firstNameCtrl.touched">First Name is required.</small>
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-1"></div>
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="lastName">Last Name <span class="text-danger">*</span></label>
|
||||||
|
<input pInputText id="lastName" name="lastName" [(ngModel)]="doctor.lastName" required #lastNameCtrl="ngModel"
|
||||||
|
[ngClass]="{'is-invalid': lastNameCtrl.invalid && lastNameCtrl.touched}" />
|
||||||
|
<small class="text-danger" *ngIf="lastNameCtrl.invalid && lastNameCtrl.touched">Last Name is required.</small>
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="mobile">Mobile <span class="text-danger">*</span></label>
|
||||||
|
<input pInputText id="mobile" name="mobile" [(ngModel)]="doctor.mobile" required #mobileCtrl="ngModel"
|
||||||
|
[ngClass]="{'is-invalid': mobileCtrl.invalid && mobileCtrl.touched}" />
|
||||||
|
<small class="text-danger" *ngIf="mobileCtrl.invalid && mobileCtrl.touched">Mobile is required.</small>
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-1"></div>
|
||||||
|
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="email">Email <span class="text-danger">*</span></label>
|
||||||
|
<input pInputText id="email" name="email" [(ngModel)]="doctor.email" required type="email" #emailCtrl="ngModel"
|
||||||
|
[ngClass]="{'is-invalid': emailCtrl.invalid && emailCtrl.touched}" />
|
||||||
|
<small class="text-danger" *ngIf="emailCtrl.invalid && emailCtrl.touched">Valid Email is required.</small>
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="specialization">Specialization</label>
|
||||||
|
<input pInputText id="specialization" name="specialization" [(ngModel)]="doctor.specialization" />
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-1"></div>
|
||||||
|
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="experience">Experience (Years)</label>
|
||||||
|
<input type="number" pInputText id="experience" name="experience" [(ngModel)]="doctor.experience" min="0" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="consultationFee">Consultation Fee</label>
|
||||||
|
<input type="number" pInputText id="consultationFee" name="consultationFee" [(ngModel)]="doctor.consultationFee" min="0" />
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-1"></div>
|
||||||
|
|
||||||
|
<div class="field col-md-5">
|
||||||
|
<label for="clinicLocation">Clinic Location</label>
|
||||||
|
<input pInputText id="clinicLocation" name="clinicLocation" [(ngModel)]="doctor.clinicLocation" />
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-3">
|
||||||
|
<label for="rating">Rating</label><br>
|
||||||
|
<p-rating [(ngModel)]="doctor.rating" [stars]="5" [cancel]="false" name="rating"></p-rating>
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-4">
|
||||||
|
<label for="degree">Degree</label>
|
||||||
|
<input pInputText id="degree" name="degree" [(ngModel)]="doctor.degree" />
|
||||||
|
</div>
|
||||||
|
<div class="field col-md-1"></div>
|
||||||
|
|
||||||
|
<div class="field col-md-3">
|
||||||
|
<label for="availability">Availability</label>
|
||||||
|
<p-dropdown [options]="workScheduleOptions" [(ngModel)]="doctor.availability" name="availability" placeholder="Select Availability"></p-dropdown>
|
||||||
|
</div>
|
||||||
|
<div class="field col-11">
|
||||||
|
<label for="description">Description</label>
|
||||||
|
<textarea id="description" name="description" [(ngModel)]="doctor.description" rows="5" cols="30" pInputTextarea></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="field col-11 flex justify-content-end">
|
||||||
|
<button pButton type="submit" label="Save" class="p-button-success" [disabled]="doctorForm.invalid"></button>
|
||||||
|
<button pButton type="button" label="Cancel" class="p-button-secondary ml-2" (click)="onClose()"></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
23
angular/src/app/doctors/doctor-dialog.component.scss
Normal file
23
angular/src/app/doctors/doctor-dialog.component.scss
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
.hide_body{
|
||||||
|
scrollbar-width: auto !important;
|
||||||
|
min-height: 150px;
|
||||||
|
max-height: calc(100vh - 13rem);
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
.is-valid {
|
||||||
|
border-color: green !important;
|
||||||
|
}
|
||||||
|
.is-invalid {
|
||||||
|
border-color: red !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Adjust the z-index of the calendar dropdown */
|
||||||
|
.p-calendar .p-datepicker {
|
||||||
|
z-index: 1050 !important; /* Make sure it's above other elements */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* You can also adjust modal z-index if necessary */
|
||||||
|
.modal {
|
||||||
|
z-index: 1040; /* Set lower z-index to ensure modal is behind the calendar */
|
||||||
|
}
|
||||||
|
|
23
angular/src/app/doctors/doctor-dialog.component.spec.ts
Normal file
23
angular/src/app/doctors/doctor-dialog.component.spec.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { DoctorDialogComponent } from './doctor-dialog.component';
|
||||||
|
|
||||||
|
describe('DoctorDialogComponent', () => {
|
||||||
|
let component: DoctorDialogComponent;
|
||||||
|
let fixture: ComponentFixture<DoctorDialogComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
imports: [DoctorDialogComponent]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(DoctorDialogComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
129
angular/src/app/doctors/doctor-dialog.component.ts
Normal file
129
angular/src/app/doctors/doctor-dialog.component.ts
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
import { ToasterService } from '@abp/ng.theme.shared';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||||
|
import { FormsModule, NgForm } from '@angular/forms';
|
||||||
|
import { DoctorService } from '@proxy/doctors';
|
||||||
|
import { CreateDoctorDto } from '@proxy/dtos';
|
||||||
|
import { ButtonModule } from 'primeng/button';
|
||||||
|
import { CalendarModule } from 'primeng/calendar';
|
||||||
|
import { ChipModule } from 'primeng/chip';
|
||||||
|
import { DialogModule } from 'primeng/dialog';
|
||||||
|
import { DropdownModule } from 'primeng/dropdown';
|
||||||
|
import { InputTextModule } from 'primeng/inputtext';
|
||||||
|
import { InputTextareaModule } from 'primeng/inputtextarea';
|
||||||
|
import { RadioButtonModule } from 'primeng/radiobutton';
|
||||||
|
import { TableModule } from 'primeng/table';
|
||||||
|
import { RatingModule } from 'primeng/rating';
|
||||||
|
import { workScheduleOptions } from '@proxy/global-enum';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-doctor-dialog',
|
||||||
|
standalone: true,
|
||||||
|
imports: [
|
||||||
|
TableModule,
|
||||||
|
DialogModule,
|
||||||
|
FormsModule,
|
||||||
|
TableModule,
|
||||||
|
ButtonModule,
|
||||||
|
DialogModule,
|
||||||
|
InputTextModule,
|
||||||
|
CalendarModule,
|
||||||
|
DropdownModule,
|
||||||
|
RadioButtonModule,
|
||||||
|
InputTextareaModule,
|
||||||
|
ChipModule,
|
||||||
|
CommonModule,
|
||||||
|
RatingModule
|
||||||
|
],
|
||||||
|
templateUrl: './doctor-dialog.component.html',
|
||||||
|
styleUrl: './doctor-dialog.component.scss',
|
||||||
|
})
|
||||||
|
export class DoctorDialogComponent implements OnInit {
|
||||||
|
@Input() visible: boolean = false;
|
||||||
|
@Input() name: string;
|
||||||
|
@Input() isEditMode: boolean = false;
|
||||||
|
@Output() save = new EventEmitter<any>();
|
||||||
|
@Output() close = new EventEmitter<void>();
|
||||||
|
@Input() Id: string;
|
||||||
|
doctorDialog: boolean;
|
||||||
|
JoiningDate: Date;
|
||||||
|
dateofbirth: Date;
|
||||||
|
|
||||||
|
constructor(private DoctorService: DoctorService, private toaster: ToasterService) {}
|
||||||
|
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
if (this.isEditMode) {
|
||||||
|
this.fetchDoctorData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
doctor: CreateDoctorDto = {
|
||||||
|
id: '',
|
||||||
|
firstName: '',
|
||||||
|
lastName: '',
|
||||||
|
gender: '',
|
||||||
|
mobile: '',
|
||||||
|
password: '',
|
||||||
|
designation: '',
|
||||||
|
departmentId: '',
|
||||||
|
address: '',
|
||||||
|
email: '',
|
||||||
|
dob: '',
|
||||||
|
education: '',
|
||||||
|
specialization: '',
|
||||||
|
degree: '',
|
||||||
|
joiningDate: '',
|
||||||
|
experience: 0,
|
||||||
|
consultationFee: 0,
|
||||||
|
availability: null,
|
||||||
|
rating: 0,
|
||||||
|
clinicLocation: '',
|
||||||
|
};
|
||||||
|
workScheduleOptions = Object.keys(workScheduleOptions)
|
||||||
|
.filter(key => isNaN(Number(key)))
|
||||||
|
.map(key => ({
|
||||||
|
label: key.replace(/([A-Z])/g, ' $1').trim(),
|
||||||
|
value: workScheduleOptions[key as keyof typeof workScheduleOptions]
|
||||||
|
}));
|
||||||
|
fetchDoctorData() {
|
||||||
|
this.DoctorService.getDoctorById(this.Id).subscribe(result => {
|
||||||
|
this.doctor = result;
|
||||||
|
this.JoiningDate = new Date(result.joiningDate);
|
||||||
|
this.dateofbirth = new Date(result.dob);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
saveDoctor(form: NgForm) {
|
||||||
|
if (form.invalid) {
|
||||||
|
Object.values(form.controls).forEach(control => control.markAsTouched());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.doctor.dob = this.dateofbirth.toDateString();
|
||||||
|
|
||||||
|
if (this.isEditMode) {
|
||||||
|
this.DoctorService.updatDoctor(this.doctor).subscribe(
|
||||||
|
() => {
|
||||||
|
this.toaster.success('Updated Successfully', 'Success');
|
||||||
|
this.onClose();
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
this.toaster.error(error, 'Error');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.DoctorService.createDoctor(this.doctor).subscribe(
|
||||||
|
() => {
|
||||||
|
this.toaster.success('created successfully', 'Success');
|
||||||
|
this.onClose();
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
this.toaster.error(error, 'Error');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onClose() {
|
||||||
|
this.Id = '';
|
||||||
|
this.close.emit();
|
||||||
|
}
|
||||||
|
}
|
11
angular/src/app/doctors/doctors-routing.module.ts
Normal file
11
angular/src/app/doctors/doctors-routing.module.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { RouterModule, Routes } from '@angular/router';
|
||||||
|
import { DoctorsComponent } from './doctors.component';
|
||||||
|
|
||||||
|
const routes: Routes = [{ path: '', component: DoctorsComponent }];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [RouterModule.forChild(routes)],
|
||||||
|
exports: [RouterModule],
|
||||||
|
})
|
||||||
|
export class DoctorsRoutingModule {}
|
81
angular/src/app/doctors/doctors.component.html
Normal file
81
angular/src/app/doctors/doctors.component.html
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<div>
|
||||||
|
<p-table
|
||||||
|
#dt
|
||||||
|
dataKey="id"
|
||||||
|
[value]="doctors"
|
||||||
|
[paginator]="true"
|
||||||
|
[rows]="10"
|
||||||
|
[totalRecords]="totalRecords"
|
||||||
|
[lazy]="true"
|
||||||
|
(onLazyLoad)="loadDoctors($event)"
|
||||||
|
[rowsPerPageOptions]="[10, 20, 50]"
|
||||||
|
[responsiveLayout]="'scroll'"
|
||||||
|
[globalFilterFields]="['id', 'firstName', 'lastName', 'mobile', 'email', 'specialization']"
|
||||||
|
[filters]="{ global: { value: '', matchMode: 'contains' } }"
|
||||||
|
class="table table-striped"
|
||||||
|
>
|
||||||
|
<ng-template pTemplate="caption">
|
||||||
|
<div class="flex align-items-center justify-content-between mb-3 gap-3">
|
||||||
|
<h4 class="m-0">Doctor List</h4>
|
||||||
|
<div class="flex-grow-1 flex justify-content-center">
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-text"><i class="pi pi-search"></i></span>
|
||||||
|
<input
|
||||||
|
pInputText
|
||||||
|
type="text"
|
||||||
|
class="form-control"
|
||||||
|
(input)="dt.filterGlobal($event.target.value, 'contains')"
|
||||||
|
[(ngModel)]="globalFilter"
|
||||||
|
placeholder="Search keyword"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<button pButton class="p-button-rounded p-button-secondary ml-2" (click)="loadDoctors($event)">
|
||||||
|
<i class="pi pi-refresh"></i>
|
||||||
|
</button>
|
||||||
|
<button pButton class="p-button-rounded p-button-success ml-2" (click)="openNewDoctorDialog()" pTooltip="Add Doctor" tooltipPosition="left">
|
||||||
|
<i class="pi pi-plus-circle"></i>
|
||||||
|
</button>
|
||||||
|
<button pButton class="p-button-rounded p-button-warning ml-2" (click)="exportDoctors()">
|
||||||
|
<i class="pi pi-download"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ng-template>
|
||||||
|
<ng-template pTemplate="header">
|
||||||
|
<tr>
|
||||||
|
<th pSortableColumn="firstName">First Name <p-sortIcon field="firstName" /></th>
|
||||||
|
<th pSortableColumn="lastName">Last Name <p-sortIcon field="lastName" /></th>
|
||||||
|
<th pSortableColumn="mobile">Mobile <p-sortIcon field="mobile" /></th>
|
||||||
|
<th pSortableColumn="email">Email <p-sortIcon field="email" /></th>
|
||||||
|
<th pSortableColumn="specialization">Specialization <p-sortIcon field="specialization" /></th>
|
||||||
|
<th pSortableColumn="experience">Experience <p-sortIcon field="experience" /></th>
|
||||||
|
<th pSortableColumn="rating">Rating <p-sortIcon field="rating" /></th>
|
||||||
|
<th>Actions</th>
|
||||||
|
</tr>
|
||||||
|
</ng-template>
|
||||||
|
<ng-template pTemplate="body" let-doctor>
|
||||||
|
<tr>
|
||||||
|
<td>{{ doctor.firstName }}</td>
|
||||||
|
<td>{{ doctor.lastName }}</td>
|
||||||
|
<td>{{ doctor.mobile }}</td>
|
||||||
|
<td>{{ doctor.email }}</td>
|
||||||
|
<td>{{ doctor.specialization }}</td>
|
||||||
|
<td>{{ doctor.experience }} years</td>
|
||||||
|
<td>{{ doctor.rating }}</td>
|
||||||
|
<td class="d-flex">
|
||||||
|
<button class="btn btn-warning btn-sm ml-1" (click)="editDoctor(doctor)">
|
||||||
|
<i class="pi pi-pencil"></i>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-danger btn-sm ml-1" (click)="deleteDoctor(doctor.id)">
|
||||||
|
<i class="pi pi-trash"></i>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</ng-template>
|
||||||
|
</p-table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<app-doctor-dialog [Id]="DoctorIdToEdit"[isEditMode]="isEditMode"
|
||||||
|
[visible]="isModalVisible"*ngIf="isModalVisible" [name]="'Doctor'" (close)="closeDialog()"></app-doctor-dialog>
|
0
angular/src/app/doctors/doctors.component.scss
Normal file
0
angular/src/app/doctors/doctors.component.scss
Normal file
23
angular/src/app/doctors/doctors.component.spec.ts
Normal file
23
angular/src/app/doctors/doctors.component.spec.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { DoctorsComponent } from './doctors.component';
|
||||||
|
|
||||||
|
describe('DoctorsComponent', () => {
|
||||||
|
let component: DoctorsComponent;
|
||||||
|
let fixture: ComponentFixture<DoctorsComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
imports: [DoctorsComponent]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(DoctorsComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
108
angular/src/app/doctors/doctors.component.ts
Normal file
108
angular/src/app/doctors/doctors.component.ts
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
import { ConfirmationService, ToasterService } from '@abp/ng.theme.shared';
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { DoctorService } from '@proxy/doctors';
|
||||||
|
import { PagingSortResultDto } from '@proxy/dto';
|
||||||
|
import { workScheduleOptions } from '@proxy/global-enum';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-doctors',
|
||||||
|
templateUrl: './doctors.component.html',
|
||||||
|
styleUrl: './doctors.component.scss',
|
||||||
|
})
|
||||||
|
export class DoctorsComponent implements OnInit {
|
||||||
|
totalRecords: number = 0;
|
||||||
|
doctors = [];
|
||||||
|
loading: boolean = false;
|
||||||
|
params: PagingSortResultDto;
|
||||||
|
isModalVisible: boolean=false;
|
||||||
|
isEditMode: boolean = false;
|
||||||
|
DoctorIdToEdit: string;
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
this.loadDoctors({
|
||||||
|
first: 0,
|
||||||
|
rows: 10,
|
||||||
|
sortField: 'id',
|
||||||
|
sortOrder: 1,
|
||||||
|
globalFilter: null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
constructor(
|
||||||
|
private DoctorService: DoctorService,
|
||||||
|
private http: HttpClient,
|
||||||
|
private confirmation: ConfirmationService,
|
||||||
|
private toaster: ToasterService
|
||||||
|
) {}
|
||||||
|
workSchedule = Object.keys(workScheduleOptions)
|
||||||
|
.filter(key => !isNaN(Number(key)))
|
||||||
|
.map(key => ({
|
||||||
|
label: workScheduleOptions[key as unknown as keyof typeof workScheduleOptions],
|
||||||
|
value: Number(key),
|
||||||
|
}));
|
||||||
|
|
||||||
|
loadDoctors(event: any) {
|
||||||
|
this.loading = true;
|
||||||
|
let order = event.sortOrder == 1 ? ' asc' : ' desc';
|
||||||
|
event.sortField = event.sortField == undefined ? 'id' : event.sortField;
|
||||||
|
this.params = {
|
||||||
|
skipCount: event.first,
|
||||||
|
maxResultCount: event.rows,
|
||||||
|
sorting: event.sortField + order,
|
||||||
|
search: event.globalFilter == null ? '' : event.globalFilter,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.DoctorService.getDoctorList(this.params).subscribe(data => {
|
||||||
|
this.doctors = data.items;
|
||||||
|
this.totalRecords = data.totalCount;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
openNewDoctorDialog() {
|
||||||
|
this.isModalVisible=true;
|
||||||
|
this.isEditMode = false;
|
||||||
|
}
|
||||||
|
editDoctor(Doctor: any) {
|
||||||
|
this.isEditMode = true;
|
||||||
|
this.DoctorIdToEdit = Doctor.id;
|
||||||
|
this.isModalVisible=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
closeDialog() {
|
||||||
|
this.isModalVisible = false;
|
||||||
|
this.loadDoctors({
|
||||||
|
first: 0,
|
||||||
|
rows: 10,
|
||||||
|
sortField: 'id',
|
||||||
|
sortOrder: 1,
|
||||||
|
globalFilter: null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exportDoctors() {
|
||||||
|
this.DoctorService.getExportDoctorsRecord().subscribe(result => {
|
||||||
|
const binary = atob(result.fileContent);
|
||||||
|
const len = binary.length;
|
||||||
|
const bytes = new Uint8Array(len);
|
||||||
|
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
bytes[i] = binary.charCodeAt(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
const blob = new Blob([bytes], { type: 'application/xlsx' });
|
||||||
|
|
||||||
|
const url = window.URL.createObjectURL(blob);
|
||||||
|
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = url;
|
||||||
|
link.download = result.fileName;
|
||||||
|
|
||||||
|
document.body.appendChild(link);
|
||||||
|
link.click();
|
||||||
|
|
||||||
|
document.body.removeChild(link);
|
||||||
|
window.URL.revokeObjectURL(url);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
39
angular/src/app/doctors/doctors.module.ts
Normal file
39
angular/src/app/doctors/doctors.module.ts
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
|
import { DoctorsRoutingModule } from './doctors-routing.module';
|
||||||
|
import { DoctorsComponent } from './doctors.component';
|
||||||
|
import { FormsModule } from '@angular/forms';
|
||||||
|
import { ButtonModule } from 'primeng/button';
|
||||||
|
import { CalendarModule } from 'primeng/calendar';
|
||||||
|
import { ChipModule } from 'primeng/chip';
|
||||||
|
import { DialogModule } from 'primeng/dialog';
|
||||||
|
import { DropdownModule } from 'primeng/dropdown';
|
||||||
|
import { InputTextModule } from 'primeng/inputtext';
|
||||||
|
import { InputTextareaModule } from 'primeng/inputtextarea';
|
||||||
|
import { RadioButtonModule } from 'primeng/radiobutton';
|
||||||
|
import { TableModule } from 'primeng/table';
|
||||||
|
import { DoctorDialogComponent } from './doctor-dialog.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [DoctorsComponent],
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
DoctorsRoutingModule,
|
||||||
|
TableModule,
|
||||||
|
DialogModule,
|
||||||
|
FormsModule,
|
||||||
|
TableModule,
|
||||||
|
ButtonModule,
|
||||||
|
DialogModule,
|
||||||
|
InputTextModule,
|
||||||
|
CalendarModule,
|
||||||
|
DropdownModule,
|
||||||
|
RadioButtonModule,
|
||||||
|
InputTextareaModule,
|
||||||
|
ChipModule,
|
||||||
|
DoctorDialogComponent
|
||||||
|
|
||||||
|
],
|
||||||
|
})
|
||||||
|
export class DoctorsModule {}
|
@ -1,6 +1,8 @@
|
|||||||
import type { DoctorDto } from './dto/models';
|
import type { DoctorDto } from './dto/models';
|
||||||
import { RestService, Rest } from '@abp/ng.core';
|
import { RestService, Rest } from '@abp/ng.core';
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
import type { PagedResultDto } from '../abp/application/services/dto/models';
|
||||||
|
import type { FileDownloadDto, PagingSortResultDto } from '../dto/models';
|
||||||
import type { CreateDoctorDto } from '../dtos/models';
|
import type { CreateDoctorDto } from '../dtos/models';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
@ -10,15 +12,23 @@ export class DoctorService {
|
|||||||
apiName = 'Default';
|
apiName = 'Default';
|
||||||
|
|
||||||
|
|
||||||
create = (input: CreateDoctorDto, config?: Partial<Rest.Config>) =>
|
createDoctor = (input: CreateDoctorDto, config?: Partial<Rest.Config>) =>
|
||||||
this.restService.request<any, DoctorDto>({
|
this.restService.request<any, void>({
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
url: '/api/app/doctor',
|
url: '/api/app/doctor/doctor',
|
||||||
body: input,
|
body: input,
|
||||||
},
|
},
|
||||||
{ apiName: this.apiName,...config });
|
{ apiName: this.apiName,...config });
|
||||||
|
|
||||||
|
|
||||||
|
deleteDoctorRecord = (id: string, config?: Partial<Rest.Config>) =>
|
||||||
|
this.restService.request<any, void>({
|
||||||
|
method: 'DELETE',
|
||||||
|
url: `/api/app/doctor/${id}/doctor-record`,
|
||||||
|
},
|
||||||
|
{ apiName: this.apiName,...config });
|
||||||
|
|
||||||
|
|
||||||
get = (config?: Partial<Rest.Config>) =>
|
get = (config?: Partial<Rest.Config>) =>
|
||||||
this.restService.request<any, DoctorDto[]>({
|
this.restService.request<any, DoctorDto[]>({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@ -26,5 +36,39 @@ export class DoctorService {
|
|||||||
},
|
},
|
||||||
{ apiName: this.apiName,...config });
|
{ apiName: this.apiName,...config });
|
||||||
|
|
||||||
|
|
||||||
|
getDoctorById = (id: string, config?: Partial<Rest.Config>) =>
|
||||||
|
this.restService.request<any, DoctorDto>({
|
||||||
|
method: 'GET',
|
||||||
|
url: `/api/app/doctor/${id}/doctor-by-id`,
|
||||||
|
},
|
||||||
|
{ apiName: this.apiName,...config });
|
||||||
|
|
||||||
|
|
||||||
|
getDoctorList = (input: PagingSortResultDto, config?: Partial<Rest.Config>) =>
|
||||||
|
this.restService.request<any, PagedResultDto<DoctorDto>>({
|
||||||
|
method: 'GET',
|
||||||
|
url: '/api/app/doctor/doctor-list',
|
||||||
|
params: { search: input.search, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount },
|
||||||
|
},
|
||||||
|
{ apiName: this.apiName,...config });
|
||||||
|
|
||||||
|
|
||||||
|
getExportDoctorsRecord = (config?: Partial<Rest.Config>) =>
|
||||||
|
this.restService.request<any, FileDownloadDto>({
|
||||||
|
method: 'GET',
|
||||||
|
url: '/api/app/doctor/export-doctors-record',
|
||||||
|
},
|
||||||
|
{ apiName: this.apiName,...config });
|
||||||
|
|
||||||
|
|
||||||
|
updatDoctor = (input: CreateDoctorDto, config?: Partial<Rest.Config>) =>
|
||||||
|
this.restService.request<any, void>({
|
||||||
|
method: 'POST',
|
||||||
|
url: '/api/app/doctor/updat-doctor',
|
||||||
|
body: input,
|
||||||
|
},
|
||||||
|
{ apiName: this.apiName,...config });
|
||||||
|
|
||||||
constructor(private restService: RestService) {}
|
constructor(private restService: RestService) {}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import type { FullAuditedEntity } from '../../volo/abp/domain/entities/auditing/models';
|
import type { FullAuditedEntity } from '../../volo/abp/domain/entities/auditing/models';
|
||||||
|
import type { WorkSchedule } from '../../global-enum/work-schedule.enum';
|
||||||
|
|
||||||
export interface DoctorDto extends FullAuditedEntity<string> {
|
export interface DoctorDto extends FullAuditedEntity<string> {
|
||||||
id?: string;
|
id?: string;
|
||||||
@ -12,4 +13,12 @@ export interface DoctorDto extends FullAuditedEntity<string> {
|
|||||||
email?: string;
|
email?: string;
|
||||||
dob?: string;
|
dob?: string;
|
||||||
education?: string;
|
education?: string;
|
||||||
|
specialization?: string;
|
||||||
|
degree?: string;
|
||||||
|
joiningDate?: string;
|
||||||
|
experience?: number;
|
||||||
|
consultationFee?: number;
|
||||||
|
availability?: WorkSchedule;
|
||||||
|
rating?: number;
|
||||||
|
clinicLocation?: string;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import type { WorkSchedule } from '../global-enum/work-schedule.enum';
|
||||||
import type { FullAuditedEntity } from '../volo/abp/domain/entities/auditing/models';
|
import type { FullAuditedEntity } from '../volo/abp/domain/entities/auditing/models';
|
||||||
|
|
||||||
export interface CreateDepartmentDto {
|
export interface CreateDepartmentDto {
|
||||||
@ -11,6 +12,7 @@ export interface CreateDepartmentDto {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface CreateDoctorDto {
|
export interface CreateDoctorDto {
|
||||||
|
id?: string;
|
||||||
firstName?: string;
|
firstName?: string;
|
||||||
lastName?: string;
|
lastName?: string;
|
||||||
gender?: string;
|
gender?: string;
|
||||||
@ -22,6 +24,14 @@ export interface CreateDoctorDto {
|
|||||||
email?: string;
|
email?: string;
|
||||||
dob?: string;
|
dob?: string;
|
||||||
education?: string;
|
education?: string;
|
||||||
|
specialization?: string;
|
||||||
|
degree?: string;
|
||||||
|
joiningDate?: string;
|
||||||
|
experience?: number;
|
||||||
|
consultationFee?: number;
|
||||||
|
availability?: WorkSchedule;
|
||||||
|
rating?: number;
|
||||||
|
clinicLocation?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DepartmentDto extends FullAuditedEntity<string> {
|
export interface DepartmentDto extends FullAuditedEntity<string> {
|
||||||
|
@ -1404,22 +1404,7 @@
|
|||||||
"isIntegrationService": false,
|
"isIntegrationService": false,
|
||||||
"apiVersion": null,
|
"apiVersion": null,
|
||||||
"type": "HospitalManagementSystem.Doctors.DoctorAppService",
|
"type": "HospitalManagementSystem.Doctors.DoctorAppService",
|
||||||
"interfaces": [
|
"interfaces": [],
|
||||||
{
|
|
||||||
"type": "HospitalManagementSystem.Doctors.IDoctorAppService",
|
|
||||||
"name": "IDoctorAppService",
|
|
||||||
"methods": [
|
|
||||||
{
|
|
||||||
"name": "GetAsync",
|
|
||||||
"parametersOnMethod": [],
|
|
||||||
"returnValue": {
|
|
||||||
"type": "System.Collections.Generic.List<HospitalManagementSystem.Doctors.Dto.DoctorDto>",
|
|
||||||
"typeSimple": "[HospitalManagementSystem.Doctors.Dto.DoctorDto]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"actions": {
|
"actions": {
|
||||||
"GetAsync": {
|
"GetAsync": {
|
||||||
"uniqueName": "GetAsync",
|
"uniqueName": "GetAsync",
|
||||||
@ -1434,13 +1419,138 @@
|
|||||||
"typeSimple": "[HospitalManagementSystem.Doctors.Dto.DoctorDto]"
|
"typeSimple": "[HospitalManagementSystem.Doctors.Dto.DoctorDto]"
|
||||||
},
|
},
|
||||||
"allowAnonymous": null,
|
"allowAnonymous": null,
|
||||||
"implementFrom": "HospitalManagementSystem.Doctors.IDoctorAppService"
|
"implementFrom": "HospitalManagementSystem.Doctors.DoctorAppService"
|
||||||
},
|
},
|
||||||
"CreateAsyncByInput": {
|
"GetDoctorListAsyncByInput": {
|
||||||
"uniqueName": "CreateAsyncByInput",
|
"uniqueName": "GetDoctorListAsyncByInput",
|
||||||
"name": "CreateAsync",
|
"name": "GetDoctorListAsync",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"url": "api/app/doctor/doctor-list",
|
||||||
|
"supportedVersions": [],
|
||||||
|
"parametersOnMethod": [
|
||||||
|
{
|
||||||
|
"name": "input",
|
||||||
|
"typeAsString": "HospitalManagementSystem.Dto.PagingSortResultDto, HospitalManagementSystem.Domain.Shared",
|
||||||
|
"type": "HospitalManagementSystem.Dto.PagingSortResultDto",
|
||||||
|
"typeSimple": "HospitalManagementSystem.Dto.PagingSortResultDto",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"nameOnMethod": "input",
|
||||||
|
"name": "Search",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.String",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null,
|
||||||
|
"constraintTypes": null,
|
||||||
|
"bindingSourceId": "ModelBinding",
|
||||||
|
"descriptorName": "input"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nameOnMethod": "input",
|
||||||
|
"name": "Sorting",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.String",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null,
|
||||||
|
"constraintTypes": null,
|
||||||
|
"bindingSourceId": "ModelBinding",
|
||||||
|
"descriptorName": "input"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nameOnMethod": "input",
|
||||||
|
"name": "SkipCount",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Int32",
|
||||||
|
"typeSimple": "number",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null,
|
||||||
|
"constraintTypes": null,
|
||||||
|
"bindingSourceId": "ModelBinding",
|
||||||
|
"descriptorName": "input"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nameOnMethod": "input",
|
||||||
|
"name": "MaxResultCount",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Int32",
|
||||||
|
"typeSimple": "number",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null,
|
||||||
|
"constraintTypes": null,
|
||||||
|
"bindingSourceId": "ModelBinding",
|
||||||
|
"descriptorName": "input"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"returnValue": {
|
||||||
|
"type": "Abp.Application.Services.Dto.PagedResultDto<HospitalManagementSystem.Doctors.Dto.DoctorDto>",
|
||||||
|
"typeSimple": "Abp.Application.Services.Dto.PagedResultDto<HospitalManagementSystem.Doctors.Dto.DoctorDto>"
|
||||||
|
},
|
||||||
|
"allowAnonymous": false,
|
||||||
|
"implementFrom": "HospitalManagementSystem.Doctors.DoctorAppService"
|
||||||
|
},
|
||||||
|
"GetDoctorByIdAsyncById": {
|
||||||
|
"uniqueName": "GetDoctorByIdAsyncById",
|
||||||
|
"name": "GetDoctorByIdAsync",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"url": "api/app/doctor/{id}/doctor-by-id",
|
||||||
|
"supportedVersions": [],
|
||||||
|
"parametersOnMethod": [
|
||||||
|
{
|
||||||
|
"name": "id",
|
||||||
|
"typeAsString": "System.Guid, System.Private.CoreLib",
|
||||||
|
"type": "System.Guid",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"nameOnMethod": "id",
|
||||||
|
"name": "id",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Guid",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null,
|
||||||
|
"constraintTypes": [],
|
||||||
|
"bindingSourceId": "Path",
|
||||||
|
"descriptorName": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"returnValue": {
|
||||||
|
"type": "HospitalManagementSystem.Doctors.Dto.DoctorDto",
|
||||||
|
"typeSimple": "HospitalManagementSystem.Doctors.Dto.DoctorDto"
|
||||||
|
},
|
||||||
|
"allowAnonymous": false,
|
||||||
|
"implementFrom": "HospitalManagementSystem.Doctors.DoctorAppService"
|
||||||
|
},
|
||||||
|
"GetExportDoctorsRecordAsync": {
|
||||||
|
"uniqueName": "GetExportDoctorsRecordAsync",
|
||||||
|
"name": "GetExportDoctorsRecordAsync",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"url": "api/app/doctor/export-doctors-record",
|
||||||
|
"supportedVersions": [],
|
||||||
|
"parametersOnMethod": [],
|
||||||
|
"parameters": [],
|
||||||
|
"returnValue": {
|
||||||
|
"type": "HospitalManagementSystem.Dto.FileDownloadDto",
|
||||||
|
"typeSimple": "HospitalManagementSystem.Dto.FileDownloadDto"
|
||||||
|
},
|
||||||
|
"allowAnonymous": false,
|
||||||
|
"implementFrom": "HospitalManagementSystem.Doctors.DoctorAppService"
|
||||||
|
},
|
||||||
|
"CreateDoctorAsyncByInput": {
|
||||||
|
"uniqueName": "CreateDoctorAsyncByInput",
|
||||||
|
"name": "CreateDoctorAsync",
|
||||||
"httpMethod": "POST",
|
"httpMethod": "POST",
|
||||||
"url": "api/app/doctor",
|
"url": "api/app/doctor/doctor",
|
||||||
"supportedVersions": [],
|
"supportedVersions": [],
|
||||||
"parametersOnMethod": [
|
"parametersOnMethod": [
|
||||||
{
|
{
|
||||||
@ -1467,10 +1577,84 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"returnValue": {
|
"returnValue": {
|
||||||
"type": "HospitalManagementSystem.Doctors.Dto.DoctorDto",
|
"type": "System.Void",
|
||||||
"typeSimple": "HospitalManagementSystem.Doctors.Dto.DoctorDto"
|
"typeSimple": "System.Void"
|
||||||
},
|
},
|
||||||
"allowAnonymous": null,
|
"allowAnonymous": false,
|
||||||
|
"implementFrom": "HospitalManagementSystem.Doctors.DoctorAppService"
|
||||||
|
},
|
||||||
|
"UpdatDoctorAsyncByInput": {
|
||||||
|
"uniqueName": "UpdatDoctorAsyncByInput",
|
||||||
|
"name": "UpdatDoctorAsync",
|
||||||
|
"httpMethod": "POST",
|
||||||
|
"url": "api/app/doctor/updat-doctor",
|
||||||
|
"supportedVersions": [],
|
||||||
|
"parametersOnMethod": [
|
||||||
|
{
|
||||||
|
"name": "input",
|
||||||
|
"typeAsString": "HospitalManagementSystem.Dtos.CreateDoctorDto, HospitalManagementSystem.Application",
|
||||||
|
"type": "HospitalManagementSystem.Dtos.CreateDoctorDto",
|
||||||
|
"typeSimple": "HospitalManagementSystem.Dtos.CreateDoctorDto",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"nameOnMethod": "input",
|
||||||
|
"name": "input",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "HospitalManagementSystem.Dtos.CreateDoctorDto",
|
||||||
|
"typeSimple": "HospitalManagementSystem.Dtos.CreateDoctorDto",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null,
|
||||||
|
"constraintTypes": null,
|
||||||
|
"bindingSourceId": "Body",
|
||||||
|
"descriptorName": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"returnValue": {
|
||||||
|
"type": "System.Void",
|
||||||
|
"typeSimple": "System.Void"
|
||||||
|
},
|
||||||
|
"allowAnonymous": false,
|
||||||
|
"implementFrom": "HospitalManagementSystem.Doctors.DoctorAppService"
|
||||||
|
},
|
||||||
|
"DeleteDoctorRecordAsyncById": {
|
||||||
|
"uniqueName": "DeleteDoctorRecordAsyncById",
|
||||||
|
"name": "DeleteDoctorRecordAsync",
|
||||||
|
"httpMethod": "DELETE",
|
||||||
|
"url": "api/app/doctor/{id}/doctor-record",
|
||||||
|
"supportedVersions": [],
|
||||||
|
"parametersOnMethod": [
|
||||||
|
{
|
||||||
|
"name": "id",
|
||||||
|
"typeAsString": "System.Guid, System.Private.CoreLib",
|
||||||
|
"type": "System.Guid",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"nameOnMethod": "id",
|
||||||
|
"name": "id",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Guid",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isOptional": false,
|
||||||
|
"defaultValue": null,
|
||||||
|
"constraintTypes": [],
|
||||||
|
"bindingSourceId": "Path",
|
||||||
|
"descriptorName": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"returnValue": {
|
||||||
|
"type": "System.Void",
|
||||||
|
"typeSimple": "System.Void"
|
||||||
|
},
|
||||||
|
"allowAnonymous": false,
|
||||||
"implementFrom": "HospitalManagementSystem.Doctors.DoctorAppService"
|
"implementFrom": "HospitalManagementSystem.Doctors.DoctorAppService"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5447,6 +5631,18 @@
|
|||||||
{
|
{
|
||||||
"name": "DOB",
|
"name": "DOB",
|
||||||
"jsonName": null,
|
"jsonName": null,
|
||||||
|
"type": "System.DateTime?",
|
||||||
|
"typeSimple": "string?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Education",
|
||||||
|
"jsonName": null,
|
||||||
"type": "System.String",
|
"type": "System.String",
|
||||||
"typeSimple": "string",
|
"typeSimple": "string",
|
||||||
"isRequired": false,
|
"isRequired": false,
|
||||||
@ -5457,7 +5653,91 @@
|
|||||||
"regex": null
|
"regex": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Education",
|
"name": "Specialization",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.String",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Degree",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.String",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "JoiningDate",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.DateTime?",
|
||||||
|
"typeSimple": "string?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Experience",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Int32?",
|
||||||
|
"typeSimple": "number?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ConsultationFee",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Decimal?",
|
||||||
|
"typeSimple": "number?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Availability",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "HospitalManagementSystem.GlobalEnum.WorkSchedule?",
|
||||||
|
"typeSimple": "HospitalManagementSystem.GlobalEnum.WorkSchedule?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Rating",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Decimal?",
|
||||||
|
"typeSimple": "number?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ClinicLocation",
|
||||||
"jsonName": null,
|
"jsonName": null,
|
||||||
"type": "System.String",
|
"type": "System.String",
|
||||||
"typeSimple": "string",
|
"typeSimple": "string",
|
||||||
@ -5750,6 +6030,18 @@
|
|||||||
"enumValues": null,
|
"enumValues": null,
|
||||||
"genericArguments": null,
|
"genericArguments": null,
|
||||||
"properties": [
|
"properties": [
|
||||||
|
{
|
||||||
|
"name": "Id",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Guid",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "FirstName",
|
"name": "FirstName",
|
||||||
"jsonName": null,
|
"jsonName": null,
|
||||||
@ -5861,6 +6153,18 @@
|
|||||||
{
|
{
|
||||||
"name": "DOB",
|
"name": "DOB",
|
||||||
"jsonName": null,
|
"jsonName": null,
|
||||||
|
"type": "System.DateTime?",
|
||||||
|
"typeSimple": "string?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Education",
|
||||||
|
"jsonName": null,
|
||||||
"type": "System.String",
|
"type": "System.String",
|
||||||
"typeSimple": "string",
|
"typeSimple": "string",
|
||||||
"isRequired": false,
|
"isRequired": false,
|
||||||
@ -5871,7 +6175,91 @@
|
|||||||
"regex": null
|
"regex": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Education",
|
"name": "Specialization",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.String",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Degree",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.String",
|
||||||
|
"typeSimple": "string",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "JoiningDate",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.DateTime?",
|
||||||
|
"typeSimple": "string?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Experience",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Int32?",
|
||||||
|
"typeSimple": "number?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ConsultationFee",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Decimal?",
|
||||||
|
"typeSimple": "number?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Availability",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "HospitalManagementSystem.GlobalEnum.WorkSchedule?",
|
||||||
|
"typeSimple": "HospitalManagementSystem.GlobalEnum.WorkSchedule?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Rating",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Decimal?",
|
||||||
|
"typeSimple": "number?",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ClinicLocation",
|
||||||
"jsonName": null,
|
"jsonName": null,
|
||||||
"type": "System.String",
|
"type": "System.String",
|
||||||
"typeSimple": "string",
|
"typeSimple": "string",
|
||||||
@ -6041,6 +6429,58 @@
|
|||||||
"genericArguments": null,
|
"genericArguments": null,
|
||||||
"properties": null
|
"properties": null
|
||||||
},
|
},
|
||||||
|
"HospitalManagementSystem.GlobalEnum.WorkSchedule": {
|
||||||
|
"baseType": "System.Enum",
|
||||||
|
"isEnum": true,
|
||||||
|
"enumNames": [
|
||||||
|
"MondayToFriday",
|
||||||
|
"TuesdayToSaturday",
|
||||||
|
"WednesdayToSunday",
|
||||||
|
"ThursdayToMonday",
|
||||||
|
"FridayToTuesday",
|
||||||
|
"SaturdayToWednesday",
|
||||||
|
"SundayToThursday",
|
||||||
|
"MondayToThursday",
|
||||||
|
"TuesdayToFriday",
|
||||||
|
"WednesdayToSaturday",
|
||||||
|
"ThursdayToSunday",
|
||||||
|
"FridayToMonday",
|
||||||
|
"SaturdayToTuesday",
|
||||||
|
"SundayToWednesday",
|
||||||
|
"Monday",
|
||||||
|
"Tuesday",
|
||||||
|
"Wednesday",
|
||||||
|
"Thursday",
|
||||||
|
"Friday",
|
||||||
|
"Saturday",
|
||||||
|
"Sunday"
|
||||||
|
],
|
||||||
|
"enumValues": [
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
6,
|
||||||
|
7,
|
||||||
|
8,
|
||||||
|
9,
|
||||||
|
10,
|
||||||
|
11,
|
||||||
|
12,
|
||||||
|
13,
|
||||||
|
14,
|
||||||
|
15,
|
||||||
|
16,
|
||||||
|
17,
|
||||||
|
18,
|
||||||
|
19,
|
||||||
|
20,
|
||||||
|
21
|
||||||
|
],
|
||||||
|
"genericArguments": null,
|
||||||
|
"properties": null
|
||||||
|
},
|
||||||
"HospitalManagementSystem.Patients.Dto.CreateUpdatePatientDto": {
|
"HospitalManagementSystem.Patients.Dto.CreateUpdatePatientDto": {
|
||||||
"baseType": null,
|
"baseType": null,
|
||||||
"isEnum": false,
|
"isEnum": false,
|
||||||
@ -6794,6 +7234,41 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"System.Nullable<T0>": {
|
||||||
|
"baseType": "System.ValueType",
|
||||||
|
"isEnum": false,
|
||||||
|
"enumNames": null,
|
||||||
|
"enumValues": null,
|
||||||
|
"genericArguments": [
|
||||||
|
"T"
|
||||||
|
],
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"name": "HasValue",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "System.Boolean",
|
||||||
|
"typeSimple": "boolean",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Value",
|
||||||
|
"jsonName": null,
|
||||||
|
"type": "T",
|
||||||
|
"typeSimple": "T",
|
||||||
|
"isRequired": false,
|
||||||
|
"minLength": null,
|
||||||
|
"maxLength": null,
|
||||||
|
"minimum": null,
|
||||||
|
"maximum": null,
|
||||||
|
"regex": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"Volo.Abp.Account.ChangePasswordInput": {
|
"Volo.Abp.Account.ChangePasswordInput": {
|
||||||
"baseType": null,
|
"baseType": null,
|
||||||
"isEnum": false,
|
"isEnum": false,
|
||||||
|
@ -3,3 +3,4 @@ export * from './gender.enum';
|
|||||||
export * from './payment-status.enum';
|
export * from './payment-status.enum';
|
||||||
export * from './status.enum';
|
export * from './status.enum';
|
||||||
export * from './visit-type.enum';
|
export * from './visit-type.enum';
|
||||||
|
export * from './work-schedule.enum';
|
||||||
|
27
angular/src/app/proxy/global-enum/work-schedule.enum.ts
Normal file
27
angular/src/app/proxy/global-enum/work-schedule.enum.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import { mapEnumToOptions } from '@abp/ng.core';
|
||||||
|
|
||||||
|
export enum WorkSchedule {
|
||||||
|
MondayToFriday = 1,
|
||||||
|
TuesdayToSaturday = 2,
|
||||||
|
WednesdayToSunday = 3,
|
||||||
|
ThursdayToMonday = 4,
|
||||||
|
FridayToTuesday = 5,
|
||||||
|
SaturdayToWednesday = 6,
|
||||||
|
SundayToThursday = 7,
|
||||||
|
MondayToThursday = 8,
|
||||||
|
TuesdayToFriday = 9,
|
||||||
|
WednesdayToSaturday = 10,
|
||||||
|
ThursdayToSunday = 11,
|
||||||
|
FridayToMonday = 12,
|
||||||
|
SaturdayToTuesday = 13,
|
||||||
|
SundayToWednesday = 14,
|
||||||
|
Monday = 15,
|
||||||
|
Tuesday = 16,
|
||||||
|
Wednesday = 17,
|
||||||
|
Thursday = 18,
|
||||||
|
Friday = 19,
|
||||||
|
Saturday = 20,
|
||||||
|
Sunday = 21,
|
||||||
|
}
|
||||||
|
|
||||||
|
export const workScheduleOptions = mapEnumToOptions(WorkSchedule);
|
@ -76,7 +76,21 @@ function configureRoutes(routesService: RoutesService) {
|
|||||||
order: 302,
|
order: 302,
|
||||||
requiredPolicy:'HospitalManagementSystem.Department'
|
requiredPolicy:'HospitalManagementSystem.Department'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
name: 'Doctors',
|
||||||
|
order: 401,
|
||||||
|
iconClass: 'fas fa-user-md',
|
||||||
|
layout: eLayoutType.application,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/doctors',
|
||||||
|
name: 'All Doctors',
|
||||||
|
parentName: 'Doctors',
|
||||||
|
iconClass: 'fas fa-clock',
|
||||||
|
order: 402,
|
||||||
|
requiredPolicy:'HospitalManagementSystem.Doctor'
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>HospitalManagementSystem</title>
|
<title>Hospital Management System</title>
|
||||||
<base href="/" />
|
<base href="/" />
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using HospitalManagementSystem.GlobalEnum;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -18,7 +19,15 @@ namespace HospitalManagementSystem.Doctors.Dto
|
|||||||
public Guid? DepartmentId { get; set; }
|
public Guid? DepartmentId { get; set; }
|
||||||
public string? Address { get; set; }
|
public string? Address { get; set; }
|
||||||
public string? Email { get; set; }
|
public string? Email { get; set; }
|
||||||
public string? DOB { get; set; }
|
public DateTime? DOB { get; set; }
|
||||||
public string? Education { get; set; }
|
public string? Education { get; set; }
|
||||||
|
public string? Specialization { get; set; }
|
||||||
|
public string? Degree { get; set; }
|
||||||
|
public DateTime? JoiningDate { get; set; }
|
||||||
|
public int? Experience { get; set; }
|
||||||
|
public decimal? ConsultationFee { get; set; }
|
||||||
|
public WorkSchedule? Availability { get; set; }
|
||||||
|
public decimal? Rating { get; set; }
|
||||||
|
public string? ClinicLocation { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,11 @@ public class HospitalManagementSystemPermissionDefinitionProvider : PermissionDe
|
|||||||
DepartmentPermission.AddChild(HospitalManagementSystemPermissions.Department.Edit);
|
DepartmentPermission.AddChild(HospitalManagementSystemPermissions.Department.Edit);
|
||||||
DepartmentPermission.AddChild(HospitalManagementSystemPermissions.Department.Delete);
|
DepartmentPermission.AddChild(HospitalManagementSystemPermissions.Department.Delete);
|
||||||
|
|
||||||
|
//Doctors
|
||||||
|
var DoctorsPermission = HostipalManagementGroup.AddPermission(HospitalManagementSystemPermissions.Doctor.Default);
|
||||||
|
DoctorsPermission.AddChild(HospitalManagementSystemPermissions.Doctor.Create);
|
||||||
|
DoctorsPermission.AddChild(HospitalManagementSystemPermissions.Doctor.Edit);
|
||||||
|
DoctorsPermission.AddChild(HospitalManagementSystemPermissions.Doctor.Delete);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,4 +20,11 @@ public static class HospitalManagementSystemPermissions
|
|||||||
public const string Edit = Default + ".Edit";
|
public const string Edit = Default + ".Edit";
|
||||||
public const string Delete = Default + ".Delete";
|
public const string Delete = Default + ".Delete";
|
||||||
}
|
}
|
||||||
|
public static class Doctor
|
||||||
|
{
|
||||||
|
public const string Default = GroupName + ".Doctor";
|
||||||
|
public const string Create = Default + ".Create";
|
||||||
|
public const string Edit = Default + ".Edit";
|
||||||
|
public const string Delete = Default + ".Delete";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,34 @@
|
|||||||
using HospitalManagementSystem.Departments;
|
using Abp.Application.Services.Dto;
|
||||||
|
using ClosedXML.Excel;
|
||||||
|
using HospitalManagementSystem.Departments;
|
||||||
using HospitalManagementSystem.Doctors.Dto;
|
using HospitalManagementSystem.Doctors.Dto;
|
||||||
|
using HospitalManagementSystem.Dto;
|
||||||
using HospitalManagementSystem.Dtos;
|
using HospitalManagementSystem.Dtos;
|
||||||
|
using HospitalManagementSystem.Permissions;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Volo.Abp.Domain.Repositories;
|
using Volo.Abp.Domain.Repositories;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Dynamic.Core;
|
||||||
|
using Abp.UI;
|
||||||
|
|
||||||
namespace HospitalManagementSystem.Doctors
|
namespace HospitalManagementSystem.Doctors
|
||||||
{
|
{
|
||||||
public class DoctorAppService : ApplicationService, IDoctorAppService
|
public class DoctorAppService : ApplicationService
|
||||||
{
|
{
|
||||||
private readonly IRepository<Doctor, Guid> _doctorRepository;
|
private readonly IRepository<Doctor, Guid> _doctorRepository;
|
||||||
public DoctorAppService(IRepository<Doctor, Guid> doctorRepository)
|
private readonly IWebHostEnvironment _env;
|
||||||
|
|
||||||
|
public DoctorAppService(IRepository<Doctor, Guid> doctorRepository, IWebHostEnvironment env)
|
||||||
{
|
{
|
||||||
_doctorRepository = doctorRepository;
|
_doctorRepository = doctorRepository;
|
||||||
|
_env = env;
|
||||||
}
|
}
|
||||||
public async Task<List<DoctorDto>> GetAsync()
|
public async Task<List<DoctorDto>> GetAsync()
|
||||||
{
|
{
|
||||||
@ -22,11 +37,160 @@ namespace HospitalManagementSystem.Doctors
|
|||||||
doctorDtos = ObjectMapper.Map<List<Doctor>, List<DoctorDto>>(data);
|
doctorDtos = ObjectMapper.Map<List<Doctor>, List<DoctorDto>>(data);
|
||||||
return doctorDtos;
|
return doctorDtos;
|
||||||
}
|
}
|
||||||
public async Task<DoctorDto> CreateAsync(CreateDoctorDto input)
|
//public async Task<DoctorDto> CreateAsync(CreateDoctorDto input)
|
||||||
|
//{
|
||||||
|
// var doctor = new Doctor(Guid.NewGuid(), input.FirstName, input.LastName, input.Gender, input.Mobile, input.Password, input.Designation, input.DepartmentId, input.Address, input.Email, input.DOB, input.Education);
|
||||||
|
// await _doctorRepository.InsertAsync(doctor);
|
||||||
|
// return ObjectMapper.Map<Doctor, DoctorDto>(doctor);
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
#region Get Doctors List with Paging and Searching
|
||||||
|
[Authorize(HospitalManagementSystemPermissions.Doctor.Default)]
|
||||||
|
|
||||||
|
public async Task<PagedResultDto<DoctorDto>> GetDoctorListAsync(PagingSortResultDto input)
|
||||||
{
|
{
|
||||||
var doctor = new Doctor(Guid.NewGuid(), input.FirstName, input.LastName, input.Gender, input.Mobile, input.Password, input.Designation, input.DepartmentId, input.Address, input.Email, input.DOB, input.Education);
|
var queryable = await _doctorRepository.GetQueryableAsync();
|
||||||
await _doctorRepository.InsertAsync(doctor);
|
|
||||||
|
var filteredQuery = queryable
|
||||||
|
.WhereIf(!string.IsNullOrEmpty(input.Search), x => x.FirstName.ToLower().Contains(input.Search.ToLower()) || x.LastName.ToLower().Contains(input.Search.ToLower()) || x.Mobile.ToLower().Contains(input.Search.ToLower()));
|
||||||
|
|
||||||
|
var totalCount = await filteredQuery.CountAsync();
|
||||||
|
|
||||||
|
filteredQuery = !string.IsNullOrEmpty(input.Sorting)
|
||||||
|
? filteredQuery.OrderBy(input.Sorting)
|
||||||
|
: filteredQuery.OrderBy(x => x.Id);
|
||||||
|
|
||||||
|
var pagedQuery = await filteredQuery
|
||||||
|
.Skip(input.SkipCount)
|
||||||
|
.Take(input.MaxResultCount)
|
||||||
|
.ToListAsync();
|
||||||
|
var doctorDto = ObjectMapper.Map<List<Doctor>, List<DoctorDto>>(pagedQuery);
|
||||||
|
|
||||||
|
return new PagedResultDto<DoctorDto>(
|
||||||
|
totalCount,
|
||||||
|
doctorDto
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Get Doctors by ID
|
||||||
|
[Authorize(HospitalManagementSystemPermissions.Doctor.Default)]
|
||||||
|
|
||||||
|
public async Task<DoctorDto> GetDoctorByIdAsync(Guid id)
|
||||||
|
{
|
||||||
|
var doctor = await _doctorRepository.FirstOrDefaultAsync(x => x.Id == id);
|
||||||
|
if (doctor == null)
|
||||||
|
{
|
||||||
|
throw new UserFriendlyException("Doctor Details not found");
|
||||||
|
}
|
||||||
return ObjectMapper.Map<Doctor, DoctorDto>(doctor);
|
return ObjectMapper.Map<Doctor, DoctorDto>(doctor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
#region Export Doctors Data to Excel
|
||||||
|
[Authorize(HospitalManagementSystemPermissions.Doctor.Default)]
|
||||||
|
|
||||||
|
public async Task<FileDownloadDto> GetExportDoctorsRecordAsync()
|
||||||
|
{
|
||||||
|
var DoctorRecord = await _doctorRepository.ToListAsync();
|
||||||
|
|
||||||
|
var folderPath = Path.Combine(_env.WebRootPath, "temp");
|
||||||
|
if (!Directory.Exists(folderPath))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(folderPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
var filename = "Doctors_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".xlsx";
|
||||||
|
var filePath = Path.Combine(folderPath, filename);
|
||||||
|
|
||||||
|
// Create a workbook and worksheet
|
||||||
|
using (var workbook = new XLWorkbook())
|
||||||
|
{
|
||||||
|
var worksheet = workbook.Worksheets.Add("Doctor");
|
||||||
|
|
||||||
|
// Add headers
|
||||||
|
worksheet.Cell(1, 1).Value = "Name";
|
||||||
|
worksheet.Cell(1, 2).Value = "Email";
|
||||||
|
worksheet.Cell(1, 3).Value = "Specialization";
|
||||||
|
worksheet.Cell(1, 4).Value = "Date";
|
||||||
|
worksheet.Cell(1, 5).Value = "Department";
|
||||||
|
worksheet.Cell(1, 6).Value = "Mobile";
|
||||||
|
worksheet.Cell(1, 7).Value = "Degree";
|
||||||
|
worksheet.Cell(1, 8).Value = "Experience Years";
|
||||||
|
worksheet.Cell(1, 9).Value = "Fees";
|
||||||
|
worksheet.Cell(1, 10).Value = "Availability";
|
||||||
|
worksheet.Cell(1, 11).Value = "Rating";
|
||||||
|
worksheet.Cell(1, 12).Value = "Clinic Location";
|
||||||
|
|
||||||
|
for (int i = 0; i < DoctorRecord.Count; i++)
|
||||||
|
{
|
||||||
|
worksheet.Cell(i + 2, 1).Value = DoctorRecord[i].FirstName+" "+ DoctorRecord[i].LastName;
|
||||||
|
worksheet.Cell(i + 2, 2).Value = DoctorRecord[i].Email;
|
||||||
|
worksheet.Cell(i + 2, 3).Value = DoctorRecord[i].Specialization;
|
||||||
|
worksheet.Cell(i + 2, 4).Value = DoctorRecord[i].JoiningDate?.ToShortDateString();
|
||||||
|
worksheet.Cell(i + 2, 5).Value = DoctorRecord[i].Department.DepartmentName;
|
||||||
|
worksheet.Cell(i + 2, 6).Value = DoctorRecord[i].Mobile;
|
||||||
|
worksheet.Cell(i + 2, 6).Value = DoctorRecord[i].Degree;
|
||||||
|
worksheet.Cell(i + 2, 6).Value = DoctorRecord[i].Experience;
|
||||||
|
worksheet.Cell(i + 2, 6).Value = DoctorRecord[i].ConsultationFee;
|
||||||
|
worksheet.Cell(i + 2, 6).Value = DoctorRecord[i].Availability.ToString();
|
||||||
|
worksheet.Cell(i + 2, 6).Value = DoctorRecord[i].Rating;
|
||||||
|
worksheet.Cell(i + 2, 6).Value = DoctorRecord[i].ClinicLocation;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
worksheet.Columns().AdjustToContents();
|
||||||
|
workbook.SaveAs(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] fileBytes = await File.ReadAllBytesAsync(filePath);
|
||||||
|
File.Delete(filePath);
|
||||||
|
|
||||||
|
return new FileDownloadDto
|
||||||
|
{
|
||||||
|
FileName = filename,
|
||||||
|
FileContent = Convert.ToBase64String(fileBytes)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Create Doctors
|
||||||
|
[Authorize(HospitalManagementSystemPermissions.Doctor.Create)]
|
||||||
|
|
||||||
|
public async Task CreateDoctorAsync(CreateDoctorDto input)
|
||||||
|
{
|
||||||
|
var newdata = ObjectMapper.Map<CreateDoctorDto, Doctor>(input);
|
||||||
|
await _doctorRepository.InsertAsync(newdata);
|
||||||
|
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Update Doctors
|
||||||
|
[Authorize(HospitalManagementSystemPermissions.Doctor.Edit)]
|
||||||
|
|
||||||
|
public async Task UpdatDoctorAsync(CreateDoctorDto input)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var newdata = ObjectMapper.Map<CreateDoctorDto, Doctor>(input);
|
||||||
|
|
||||||
|
await _doctorRepository.UpdateAsync(newdata);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new Exception(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
#region Delete Doctors
|
||||||
|
[Authorize(HospitalManagementSystemPermissions.Doctor.Delete)]
|
||||||
|
public async Task DeleteDoctorRecordAsync(Guid id)
|
||||||
|
{
|
||||||
|
await _doctorRepository.DeleteAsync(id);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using HospitalManagementSystem.Enums;
|
using HospitalManagementSystem.Enums;
|
||||||
|
using HospitalManagementSystem.GlobalEnum;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -9,6 +10,8 @@ namespace HospitalManagementSystem.Dtos
|
|||||||
{
|
{
|
||||||
public class CreateDoctorDto
|
public class CreateDoctorDto
|
||||||
{
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
public string? FirstName { get; set; }
|
public string? FirstName { get; set; }
|
||||||
public string? LastName { get; set; }
|
public string? LastName { get; set; }
|
||||||
public string? Gender { get; set; }
|
public string? Gender { get; set; }
|
||||||
@ -18,7 +21,15 @@ namespace HospitalManagementSystem.Dtos
|
|||||||
public Guid? DepartmentId { get; set; }
|
public Guid? DepartmentId { get; set; }
|
||||||
public string? Address { get; set; }
|
public string? Address { get; set; }
|
||||||
public string? Email { get; set; }
|
public string? Email { get; set; }
|
||||||
public string? DOB { get; set; }
|
public DateTime? DOB { get; set; }
|
||||||
public string? Education { get; set; }
|
public string? Education { get; set; }
|
||||||
|
public string? Specialization { get; set; }
|
||||||
|
public string? Degree { get; set; }
|
||||||
|
public DateTime? JoiningDate { get; set; }
|
||||||
|
public int? Experience { get; set; }
|
||||||
|
public decimal? ConsultationFee { get; set; }
|
||||||
|
public WorkSchedule? Availability { get; set; }
|
||||||
|
public decimal? Rating { get; set; }
|
||||||
|
public string? ClinicLocation { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,8 @@ namespace HospitalManagementSystem
|
|||||||
#region Doctor
|
#region Doctor
|
||||||
CreateMap<Doctor, DoctorDto>();
|
CreateMap<Doctor, DoctorDto>();
|
||||||
CreateMap<DoctorDto, Doctor>();
|
CreateMap<DoctorDto, Doctor>();
|
||||||
|
CreateMap<Doctor, CreateDoctorDto>();
|
||||||
|
CreateMap<CreateDoctorDto, Doctor>();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,12 +31,12 @@ namespace HospitalManagementSystem.Patients
|
|||||||
private IRepository<Patient, Guid> _patientRepository;
|
private IRepository<Patient, Guid> _patientRepository;
|
||||||
private IRepository<EntityDocument, Guid> _entityDocumentRepository;
|
private IRepository<EntityDocument, Guid> _entityDocumentRepository;
|
||||||
private IRepository<PatientDocument, Guid> _patientDocumentRepository;
|
private IRepository<PatientDocument, Guid> _patientDocumentRepository;
|
||||||
private IRepository<Doctor, Guid> _doctorrepository;
|
private IRepository<Doctors.Doctor, Guid> _doctorrepository;
|
||||||
private readonly IWebHostEnvironment _env;
|
private readonly IWebHostEnvironment _env;
|
||||||
private SharedAppService _sharedappService;
|
private SharedAppService _sharedappService;
|
||||||
List<Guid> uniqueid = new List<Guid>();
|
List<Guid> uniqueid = new List<Guid>();
|
||||||
|
|
||||||
public PatientAppService(IRepository<PatientRecord, Guid> patientrecordRepository, IRepository<Patient, Guid> patientRepository, IWebHostEnvironment env, IRepository<EntityDocument, Guid> entityDocumentRepository, IRepository<PatientDocument, Guid> patientDocumentRepository, SharedAppService sharedappService, IRepository<Doctor, Guid> doctorrepository)
|
public PatientAppService(IRepository<PatientRecord, Guid> patientrecordRepository, IRepository<Patient, Guid> patientRepository, IWebHostEnvironment env, IRepository<EntityDocument, Guid> entityDocumentRepository, IRepository<PatientDocument, Guid> patientDocumentRepository, SharedAppService sharedappService, IRepository<Doctors.Doctor, Guid> doctorrepository)
|
||||||
{
|
{
|
||||||
_patientrecordRepository = patientrecordRepository;
|
_patientrecordRepository = patientrecordRepository;
|
||||||
_patientRepository = patientRepository;
|
_patientRepository = patientRepository;
|
||||||
|
@ -37,4 +37,30 @@ namespace HospitalManagementSystem.GlobalEnum
|
|||||||
Unpaid = 3,
|
Unpaid = 3,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum WorkSchedule
|
||||||
|
{
|
||||||
|
MondayToFriday = 1,
|
||||||
|
TuesdayToSaturday = 2,
|
||||||
|
WednesdayToSunday = 3,
|
||||||
|
ThursdayToMonday = 4,
|
||||||
|
FridayToTuesday = 5,
|
||||||
|
SaturdayToWednesday = 6,
|
||||||
|
SundayToThursday = 7,
|
||||||
|
MondayToThursday = 8,
|
||||||
|
TuesdayToFriday = 9,
|
||||||
|
WednesdayToSaturday = 10,
|
||||||
|
ThursdayToSunday = 11,
|
||||||
|
FridayToMonday = 12,
|
||||||
|
SaturdayToTuesday = 13,
|
||||||
|
SundayToWednesday = 14,
|
||||||
|
Monday = 15,
|
||||||
|
Tuesday = 16,
|
||||||
|
Wednesday = 17,
|
||||||
|
Thursday = 18,
|
||||||
|
Friday = 19,
|
||||||
|
Saturday = 20,
|
||||||
|
Sunday = 21
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using HospitalManagementSystem.Appointments;
|
using HospitalManagementSystem.Appointments;
|
||||||
using HospitalManagementSystem.Departments;
|
using HospitalManagementSystem.Departments;
|
||||||
using HospitalManagementSystem.Enums;
|
using HospitalManagementSystem.Enums;
|
||||||
|
using HospitalManagementSystem.GlobalEnum;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
@ -21,8 +22,16 @@ namespace HospitalManagementSystem.Doctors
|
|||||||
public virtual Department? Department { get; set; }
|
public virtual Department? Department { get; set; }
|
||||||
public string? Address { get; set; }
|
public string? Address { get; set; }
|
||||||
public string? Email { get; set; }
|
public string? Email { get; set; }
|
||||||
public string? DOB { get; set; }
|
public DateTime? DOB { get; set; }
|
||||||
public string? Education { get; set; }
|
public string? Education { get; set; }
|
||||||
|
public string? Specialization { get; set; }
|
||||||
|
public string? Degree { get; set; }
|
||||||
|
public DateTime? JoiningDate { get; set; }
|
||||||
|
public int? Experience { get; set; }
|
||||||
|
public decimal? ConsultationFee { get; set; }
|
||||||
|
public WorkSchedule? Availability { get; set; }
|
||||||
|
public decimal? Rating { get; set; }
|
||||||
|
public string? ClinicLocation { get; set; }
|
||||||
public virtual ICollection<Appointment> Appointments { get; set; } = new List<Appointment>();
|
public virtual ICollection<Appointment> Appointments { get; set; } = new List<Appointment>();
|
||||||
public Doctor()
|
public Doctor()
|
||||||
{
|
{
|
||||||
@ -31,7 +40,7 @@ namespace HospitalManagementSystem.Doctors
|
|||||||
public Doctor(Guid id, string? firstName, string? lastName,
|
public Doctor(Guid id, string? firstName, string? lastName,
|
||||||
string? gender, string? mobile, string? password,
|
string? gender, string? mobile, string? password,
|
||||||
string? designation, Guid? departmentId, string? address,
|
string? designation, Guid? departmentId, string? address,
|
||||||
string? email, string? dOB, string? education) : base(id)
|
string? email, DateTime? dOB, string? education) : base(id)
|
||||||
{
|
{
|
||||||
FirstName = firstName;
|
FirstName = firstName;
|
||||||
LastName = lastName;
|
LastName = lastName;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,99 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace HospitalManagementSystem.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class modify_doctor : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<int>(
|
||||||
|
name: "Availability",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "int",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "ClinicLocation",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "nvarchar(max)",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<decimal>(
|
||||||
|
name: "ConsultationFee",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "decimal(18,2)",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "Degree",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "nvarchar(max)",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<int>(
|
||||||
|
name: "Experience",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "int",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<DateTime>(
|
||||||
|
name: "JoiningDate",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "datetime2",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<decimal>(
|
||||||
|
name: "Rating",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "decimal(18,2)",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "Specialization",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "nvarchar(max)",
|
||||||
|
nullable: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "Availability",
|
||||||
|
table: "Doctors");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "ClinicLocation",
|
||||||
|
table: "Doctors");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "ConsultationFee",
|
||||||
|
table: "Doctors");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "Degree",
|
||||||
|
table: "Doctors");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "Experience",
|
||||||
|
table: "Doctors");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "JoiningDate",
|
||||||
|
table: "Doctors");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "Rating",
|
||||||
|
table: "Doctors");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "Specialization",
|
||||||
|
table: "Doctors");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace HospitalManagementSystem.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class modify_DOB_Doctor : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AlterColumn<DateTime>(
|
||||||
|
name: "DOB",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "datetime2",
|
||||||
|
nullable: true,
|
||||||
|
oldClrType: typeof(string),
|
||||||
|
oldType: "nvarchar(max)",
|
||||||
|
oldNullable: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AlterColumn<string>(
|
||||||
|
name: "DOB",
|
||||||
|
table: "Doctors",
|
||||||
|
type: "nvarchar(max)",
|
||||||
|
nullable: true,
|
||||||
|
oldClrType: typeof(DateTime),
|
||||||
|
oldType: "datetime2",
|
||||||
|
oldNullable: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -180,6 +180,15 @@ namespace HospitalManagementSystem.Migrations
|
|||||||
b.Property<string>("Address")
|
b.Property<string>("Address")
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<int?>("Availability")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<string>("ClinicLocation")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<decimal?>("ConsultationFee")
|
||||||
|
.HasColumnType("decimal(18,2)");
|
||||||
|
|
||||||
b.Property<DateTime>("CreationTime")
|
b.Property<DateTime>("CreationTime")
|
||||||
.HasColumnType("datetime2")
|
.HasColumnType("datetime2")
|
||||||
.HasColumnName("CreationTime");
|
.HasColumnName("CreationTime");
|
||||||
@ -188,7 +197,10 @@ namespace HospitalManagementSystem.Migrations
|
|||||||
.HasColumnType("uniqueidentifier")
|
.HasColumnType("uniqueidentifier")
|
||||||
.HasColumnName("CreatorId");
|
.HasColumnName("CreatorId");
|
||||||
|
|
||||||
b.Property<string>("DOB")
|
b.Property<DateTime?>("DOB")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("Degree")
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<Guid?>("DeleterId")
|
b.Property<Guid?>("DeleterId")
|
||||||
@ -211,6 +223,9 @@ namespace HospitalManagementSystem.Migrations
|
|||||||
b.Property<string>("Email")
|
b.Property<string>("Email")
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<int?>("Experience")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<string>("FirstName")
|
b.Property<string>("FirstName")
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
@ -223,6 +238,9 @@ namespace HospitalManagementSystem.Migrations
|
|||||||
.HasDefaultValue(false)
|
.HasDefaultValue(false)
|
||||||
.HasColumnName("IsDeleted");
|
.HasColumnName("IsDeleted");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("JoiningDate")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
b.Property<DateTime?>("LastModificationTime")
|
b.Property<DateTime?>("LastModificationTime")
|
||||||
.HasColumnType("datetime2")
|
.HasColumnType("datetime2")
|
||||||
.HasColumnName("LastModificationTime");
|
.HasColumnName("LastModificationTime");
|
||||||
@ -240,6 +258,12 @@ namespace HospitalManagementSystem.Migrations
|
|||||||
b.Property<string>("Password")
|
b.Property<string>("Password")
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<decimal?>("Rating")
|
||||||
|
.HasColumnType("decimal(18,2)");
|
||||||
|
|
||||||
|
b.Property<string>("Specialization")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("DepartmentId");
|
b.HasIndex("DepartmentId");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user