Commit ae05a203 authored by hasan khaddour's avatar hasan khaddour

تعديل

parent ea758d92
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="text-center"> <div class="text-center">
<div class="circle circle-md bg-secondary"> <div class="circle circle-md bg-secondary">
<span class="fe fe-users fe-16 text-white"></span> <span class="fe fe-paperclip fe-16 text-white"></span>
</div> </div>
</div> </div>
...@@ -66,11 +66,15 @@ ...@@ -66,11 +66,15 @@
</div> </div>
<div class="col-md-6 col-lg-4" (click)="onChangeManger()"> <div class="col-md-6 col-lg-4"
(click)="onChangeManger()"
*ngIf="canSee()"
>
<div class="card shadow mb-4"> <div class="card shadow mb-4">
<div class="card-body file-list"> <div class="card-body file-list">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="circle circle-md bg-secondary"> <div class="circle circle-md bg-danger">
<span class="fe fe-map fe-16 text-white"></span> <span class="fe fe-map fe-16 text-white"></span>
</div> </div>
<div class="flex-fill ml-4 fname"> <div class="flex-fill ml-4 fname">
...@@ -81,11 +85,14 @@ ...@@ -81,11 +85,14 @@
</div> <!-- .card --> </div> <!-- .card -->
</div> </div>
<div class="col-md-6 col-lg-4" (click)="onChangeLeader()"> <div class="col-md-6 col-lg-4"
*ngIf="canSee()"
(click)="onChangeLeader()">
<div class="card shadow mb-4"> <div class="card shadow mb-4">
<div class="card-body file-list"> <div class="card-body file-list">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="circle circle-md bg-secondary"> <div class="circle circle-md bg-danger ">
<span class="fe fe-map fe-16 text-white"></span> <span class="fe fe-map fe-16 text-white"></span>
</div> </div>
<div class="flex-fill ml-4 fname"> <div class="flex-fill ml-4 fname">
......
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Component, EventEmitter, Input, Output } from '@angular/core';
import { Project } from '../../../models/responses/project'; import { Project } from '../../../models/responses/project';
import { UserService } from '../../../../core/services/authentication/user.service';
import { ROLES } from '../../../../core/constants/roles';
@Component({ @Component({
selector: 'info-controll', selector: 'info-controll',
...@@ -7,10 +9,14 @@ import { Project } from '../../../models/responses/project'; ...@@ -7,10 +9,14 @@ import { Project } from '../../../models/responses/project';
styleUrl: './info-controll.component.css' styleUrl: './info-controll.component.css'
}) })
export class InfoControllComponent { export class InfoControllComponent {
@Input() project : Project @Input() project : Project
@Output() changeLeader = new EventEmitter<void>() @Output() changeLeader = new EventEmitter<void>()
@Output() changeManager = new EventEmitter<void>() @Output() changeManager = new EventEmitter<void>()
constructor(
private userService : UserService
){}
onChangeManger(){ onChangeManger(){
this.changeManager.emit(); this.changeManager.emit();
...@@ -18,5 +24,9 @@ export class InfoControllComponent { ...@@ -18,5 +24,9 @@ export class InfoControllComponent {
onChangeLeader(){ onChangeLeader(){
this.changeLeader.emit(); this.changeLeader.emit();
} }
canSee(): boolean {
return this.userService.hasRole(ROLES.SCIENTIFIC_DEPUTY)
}
} }
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<ul class="d-flex align-items-center"> <ul class="d-flex align-items-center">
<li class="nav-item d-block d-lg-none"> <li class="nav-item d-block d-lg-none">
<a class="nav-link nav-icon search-bar-toggle " href="#"> <a class="nav-link nav-icon search-bar-toggle ">
<i class="fe fe-search"></i> <i class="fe fe-search"></i>
</a> </a>
</li><!-- End Search Icon--> </li><!-- End Search Icon-->
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
<a href="index.html" class="logo d-flex align-items-center justify-content-evenly pl-10"> <a href="index.html" class="logo d-flex align-items-center justify-content-evenly pl-10">
<span class="d-none d-lg-block">نظام إدارة حالة المشاريع</span> <span class="d-none d-lg-block">{{appName}}</span>
<img src="assets/images/logo/logo.ico" alt=""> <img src="assets/images/logo/logo.ico" alt="">
</a> </a>
......
...@@ -5,6 +5,7 @@ import { Router, RouterLink } from '@angular/router'; ...@@ -5,6 +5,7 @@ import { Router, RouterLink } from '@angular/router';
import { UserService } from '../../../core/services/authentication/user.service'; import { UserService } from '../../../core/services/authentication/user.service';
import { ToastrService } from 'ngx-toastr'; import { ToastrService } from 'ngx-toastr';
import { AuthenticationService } from '../../../core/services/authentication/authentication.service'; import { AuthenticationService } from '../../../core/services/authentication/authentication.service';
import { ConfigurationService } from '../../../core/services/configuration/configuration.service';
@Component({ @Component({
selector: 'app-header', selector: 'app-header',
...@@ -16,6 +17,7 @@ export class HeaderComponent implements OnInit { ...@@ -16,6 +17,7 @@ export class HeaderComponent implements OnInit {
@Input() isToggled :Boolean; @Input() isToggled :Boolean;
appName =ConfigurationService.AppName
fullName :string fullName :string
email : string email : string
constructor( constructor(
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
<li class="nav-item" *ngIf="hasRole(alroles.SCIENTIFIC_DEPUTY)"> <li class="nav-item" *ngIf="hasRole(alroles.SCIENTIFIC_DEPUTY)">
<a [routerLink]="['/projects/create']" class="nav-link collapsed"> <a [routerLink]="['/projects/create']" class="nav-link collapsed">
<i class="bi fe-plus"></i><span>طرح مشروع</span> <i class="fe fe-plus"></i><span>طرح مشروع</span>
</a> </a>
</li> </li>
<li class="nav-item" *ngIf="hasRole(alroles.SCIENTIFIC_DEPUTY)"> <li class="nav-item" *ngIf="hasRole(alroles.SCIENTIFIC_DEPUTY)">
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
[queryParams]="{ listType: 'all' }" [queryParams]="{ listType: 'all' }"
class="nav-link collapsed" class="nav-link collapsed"
> >
<i class="bi bi-circle"></i><span>استعراض المشاريع</span> <i class="fe fe-clipboard"></i><span>استعراض المشاريع</span>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
[queryParams]="{ listType: 'managed' }" [queryParams]="{ listType: 'managed' }"
class="nav-link collapsed" class="nav-link collapsed"
> >
<i class="bi bi-circle"></i><span>المشاريع التي أديرها</span> <i class="fe fe-briefcase"></i><span>المشاريع التي أديرها</span>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
[queryParams]="{ listType: 'leaded' }" [queryParams]="{ listType: 'leaded' }"
class="nav-link collapsed" class="nav-link collapsed"
> >
<i class="bi bi-circle"></i><span>المشاريع التي أرأسها</span> <i class=" fe fe-briefcase"></i><span>المشاريع التي أرأسها</span>
</a> </a>
</li> </li>
...@@ -92,30 +92,30 @@ ...@@ -92,30 +92,30 @@
<li [routerLink]="['/employees/participates', id]" class="nav-item"> <li [routerLink]="['/employees/participates', id]" class="nav-item">
<a class="nav-link collapsed"> <a class="nav-link collapsed">
<i class="bi bi-layout-text-window-reverse"></i <i class="fe fe-folder"></i
><span>استعراض مساهماتي</span><i class="bi bi-chevron-down ms-auto"></i> ><span>استعراض مساهماتي</span>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link collapsed" [routerLink]="['/employees/profile']"> <a class="nav-link collapsed" [routerLink]="['/employees/profile']">
<i class="bi bi-layout-text-window-reverse"></i><span>ملفي الشخصي</span <i class="fe fe-compass"></i><span>ملفي الشخصي</span
><i class="bi bi-chevron-down ms-auto"></i> >
</a> </a>
</li> </li>
<li class="nav-heading">متفرقات</li> <li class="nav-heading">متفرقات</li>
<li class="nav-item"> <li class="nav-item">
<a [routerLink]="['/Project-FAQ']" class="nav-link collapsed"> <a [routerLink]="['/Project-FAQ']" class="nav-link collapsed">
<i class="bi bi-layout-text-window-reverse"></i <i class="fe fe-target"></i
><span>ملامح المشروع</span><i class="bi bi-chevron-down ms-auto"></i> ><span>ملامح المشروع</span>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a [routerLink]="['/Help']" class="nav-link collapsed"> <a [routerLink]="['/Help']" class="nav-link collapsed">
<i class="bi bi-layout-text-window-reverse"></i><span>مساعدة</span <i class="fe fe-codepen"></i><span>مساعدة</span
><i class="bi bi-chevron-down ms-auto"></i> >
</a> </a>
</li> </li>
</ul> </ul>
......
<div class="modal modal-md fade" id="addEmployeeTrackModal" tabindex="-1" aria-labelledby="addEmployeeTrackModalLable" aria-hidden="true"> <div class="modal-header">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="addEmployeeTrackModalLable">إضافة متابعة مشارك</h5> <h5 class="modal-title" id="addEmployeeTrackModalLable">إضافة متابعة مشارك</h5>
<button type="button" class="mr-4 ml-4 btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="mr-4 ml-4 btn-close" (click)="closeModal()"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form [formGroup]="stepTrackForm" (ngSubmit)="onSubmit()"> <form [formGroup]="stepTrackForm" (ngSubmit)="onSubmit()">
...@@ -21,13 +18,7 @@ ...@@ -21,13 +18,7 @@
</div> </div>
<input type="number" hidden id="id" formControlName="id" class="form-control" > <input type="number" hidden id="id" formControlName="id" class="form-control" >
<div class="mb-3 col-6">
<label for="notes" class="form-label">الملاحظات</label>
<input type="text" id="notes" formControlName="notes" class="form-control">
</div>
</div>
<div class="row">
<div class="mb-3 col-4"> <div class="mb-3 col-4">
<label for="assignedWork" class="form-label">العمل المسند</label> <label for="assignedWork" class="form-label">العمل المسند</label>
<input id="assignedWork" formControlName="assignedWork" class="form-control" > <input id="assignedWork" formControlName="assignedWork" class="form-control" >
...@@ -38,6 +29,15 @@ ...@@ -38,6 +29,15 @@
<input id="performedWork" formControlName="performedWork" class="form-control" > <input id="performedWork" formControlName="performedWork" class="form-control" >
</div> </div>
</div>
<div class="row">
<div class="mb-3 col-8">
<label for="notes" class="form-label">الملاحظات</label>
<textarea
cols="4"
type="text" id="notes" formControlName="notes" class="form-control">
</textarea>
</div>
<div class="mb-3 col-4"> <div class="mb-3 col-4">
<label for="assignedWorkEnd" class="form-label">تاريخ تنفيذ العمل المسند</label> <label for="assignedWorkEnd" class="form-label">تاريخ تنفيذ العمل المسند</label>
<input type="date" id="assignedWorkEnd" formControlName="assignedWorkEnd" class="form-control" > <input type="date" id="assignedWorkEnd" formControlName="assignedWorkEnd" class="form-control" >
...@@ -61,11 +61,8 @@ ...@@ -61,11 +61,8 @@
</div> </div>
<button type="submit" class="btn mr-4 ml-4 btn-primary" [disabled]="!stepTrackForm.valid">إضافة</button> <button type="submit" class="btn mr-4 ml-4 btn-primary" [disabled]="!stepTrackForm.valid">إضافة</button>
<div data-bs-dismiss="modal" aria-label="Close" class=" mr-4 ml-4 btn btn-primary" >إلغاء</div> <div (click)="closeModal()" class=" mr-4 ml-4 btn btn-primary" >إلغاء</div>
</form> </form>
</div> </div>
</div>
</div> \ No newline at end of file
</div>
\ No newline at end of file
...@@ -11,7 +11,8 @@ import { ProjectService } from '../../../../projects/services/project.service'; ...@@ -11,7 +11,8 @@ import { ProjectService } from '../../../../projects/services/project.service';
import { EmployeeParticipate } from '../../../../employees/models/responses/employeeParticipate'; import { EmployeeParticipate } from '../../../../employees/models/responses/employeeParticipate';
import { EmployeeTrack } from '../../../models/responses/employeeTrack'; import { EmployeeTrack } from '../../../models/responses/employeeTrack';
import { FullnamePipe } from '../../../../shared/pipes/fullName/fullname.pipe'; import { FullnamePipe } from '../../../../shared/pipes/fullName/fullname.pipe';
import { NgbTypeaheadSelectItemEvent } from '@ng-bootstrap/ng-bootstrap'; import { NgbActiveModal, NgbTypeaheadSelectItemEvent } from '@ng-bootstrap/ng-bootstrap';
import { TrackService } from '../../../services/track.service';
@Component({ @Component({
selector: 'add-employee-track-modal', selector: 'add-employee-track-modal',
...@@ -19,7 +20,7 @@ import { NgbTypeaheadSelectItemEvent } from '@ng-bootstrap/ng-bootstrap'; ...@@ -19,7 +20,7 @@ import { NgbTypeaheadSelectItemEvent } from '@ng-bootstrap/ng-bootstrap';
styleUrl: './add-employee-track-modal.component.css' styleUrl: './add-employee-track-modal.component.css'
}) })
export class AddEmployeeTrackModalComponent { export class AddEmployeeTrackModalComponent {
@Input() isVisible = false;
participants: EmployeeParticipate[] = []; // All steps available for the project participants: EmployeeParticipate[] = []; // All steps available for the project
@Input() trackedParticipants: EmployeeTrack[] = []; // Steps that are already tracked @Input() trackedParticipants: EmployeeTrack[] = []; // Steps that are already tracked
@Input() projectId :number @Input() projectId :number
...@@ -30,8 +31,11 @@ export class AddEmployeeTrackModalComponent { ...@@ -30,8 +31,11 @@ export class AddEmployeeTrackModalComponent {
filteredParticipants: Employee[] = []; filteredParticipants: Employee[] = [];
constructor(private fb: FormBuilder, constructor(
private projectService : ProjectService private fb: FormBuilder,
private projectService : ProjectService ,
private activeModal : NgbActiveModal,
private trackService :TrackService
) { ) {
this.stepTrackForm = this.fb.group({ this.stepTrackForm = this.fb.group({
id: [], id: [],
...@@ -128,9 +132,21 @@ export class AddEmployeeTrackModalComponent { ...@@ -128,9 +132,21 @@ export class AddEmployeeTrackModalComponent {
}; };
this
.trackService
.addEmployeeTrack(newEmployeeTrack)
.subscribe({
next:(data)=>{
this.activeModal.close({data:data ,request:newEmployeeTrack})
},
error:(e)=>{
this.activeModal.close();
}
this.closeModal();
this.addEmployeeTrack.emit(newEmployeeTrack); })
} }
...@@ -138,11 +154,8 @@ export class AddEmployeeTrackModalComponent { ...@@ -138,11 +154,8 @@ export class AddEmployeeTrackModalComponent {
} }
closeModal(): void { closeModal(): void {
const modal = document.getElementById('addEmployeeTrackModal');
if (modal) { this.activeModal.close();
const bootstrapModal = new Modal(modal);
bootstrapModal.hide();
}
} }
......
<div class="modal fade" id="addStepTrackModal" tabindex="-1" aria-labelledby="addStepTrackModalLabel" aria-hidden="true"> <div class="modal-header">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="addStepTrackModalLabel">إضافة متابعة مرحلة</h5> <h5 class="modal-title" id="addStepTrackModalLabel">إضافة متابعة مرحلة</h5>
<button type="button" class=" mr-4 ml-4 btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class=" mr-4 ml-4 btn-close" (click)="closeModal()"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form [formGroup]="stepTrackForm" (ngSubmit)="onSubmit()"> <form [formGroup]="stepTrackForm" (ngSubmit)="onSubmit()">
<div class="mb-3"> <div class="mb-3">
<label for="stepName" class="form-label">اسم المرحلة</label> <label for="stepName" class="form-label">اسم المرحلة</label>
<input type="text" id="stepName" formControlName="stepName" class="form-control" [ngbTypeahead]="search" (selectItem)="onStepSelected($event.item)"> <input type="text" id="stepName" formControlName="stepName" class="form-control"
[ngbTypeahead]="search" (selectItem)="onStepSelected($event.item)">
</div> </div>
<input type="number" hidden id="id" formControlName="id" class="form-control" > <input type="number" hidden id="id" formControlName="id" class="form-control" >
<input type="number" hidden id="iddsfdsf" formControlName="stepName1" class="form-control" >
<div class="mb-3"> <div class="mb-3">
<label for="executionState" class="form-label">طبيعية التنفيذ</label> <label for="executionState" class="form-label">طبيعية التنفيذ</label>
<input type="text" id="executionState" formControlName="executionState" class="form-control"> <input type="text" id="executionState" formControlName="executionState" class="form-control">
...@@ -23,10 +23,8 @@ ...@@ -23,10 +23,8 @@
<input type="number" id="trackExecutionRatio" formControlName="trackExecutionRatio" class="form-control" min="0" max="100"> <input type="number" id="trackExecutionRatio" formControlName="trackExecutionRatio" class="form-control" min="0" max="100">
</div> </div>
<button type="submit" class="btn mr-4 ml-4 btn-primary" [disabled]="!stepTrackForm.valid">إضافة</button> <button type="submit" class="btn mr-4 ml-4 btn-primary" [disabled]="!stepTrackForm.valid">إضافة</button>
<button data-bs-dismiss="modal" aria-label="Close" class="btn mr-4 ml-4 btn-primary" >إلغاء</button> <button (click)="closeModal()" class="btn mr-4 ml-4 btn-primary" >إلغاء</button>
</form> </form>
</div> </div>
</div>
</div> \ No newline at end of file
</div>
...@@ -18,6 +18,7 @@ import { StepService } from '../../../../projects/services/step.service'; ...@@ -18,6 +18,7 @@ import { StepService } from '../../../../projects/services/step.service';
styleUrl: './add-step-track-modal.component.css' styleUrl: './add-step-track-modal.component.css'
}) })
export class AddStepTrackModalComponent { export class AddStepTrackModalComponent {
@Input() isVisible = false; @Input() isVisible = false;
steps: Step[] = []; // All steps available for the project steps: Step[] = []; // All steps available for the project
@Input() trackedSteps: Step[] = []; // Steps that are already tracked @Input() trackedSteps: Step[] = []; // Steps that are already tracked
...@@ -30,13 +31,16 @@ export class AddStepTrackModalComponent { ...@@ -30,13 +31,16 @@ export class AddStepTrackModalComponent {
constructor(private fb: FormBuilder, constructor(private fb: FormBuilder,
private stepService : StepService , private stepService : StepService ,
private toastr :ToastrService private trackService : TrackService,
private toastr :ToastrService,
private activeModal :NgbActiveModal
) {} ) {}
ngOnInit(): void { ngOnInit(): void {
this.stepTrackForm = this.fb.group({ this.stepTrackForm = this.fb.group({
id: [], id: [],
stepName: ['', Validators.required], stepName: ['', Validators.required],
stepName1: [''],
executionState: ['', Validators.required], executionState: ['', Validators.required],
trackExecutionRatio: [0, [Validators.required, Validators.min(0), Validators.max(100)]], trackExecutionRatio: [0, [Validators.required, Validators.min(0), Validators.max(100)]],
}); });
...@@ -61,12 +65,14 @@ export class AddStepTrackModalComponent { ...@@ -61,12 +65,14 @@ export class AddStepTrackModalComponent {
search = (text$: Observable<string>) => search = (text$: Observable<string>) =>
text$.pipe( text$.pipe(
map(term => term.length < 2 ? [] : map(term => term.length < 2 ? [] :
this.filteredSteps.filter(v => v.stepInfo.stepName.toLowerCase().includes(term.toLowerCase())).slice(0, 10).map( e => e.stepInfo.stepName)) this.filteredSteps.filter(v => v.stepInfo.stepName.toLowerCase().includes(term.toLowerCase())).slice(0, 10).map( e =>{ this.stepTrackForm.patchValue({ id: e.id });return e.stepInfo.stepName +" % "+ e.currentCompletionRatio}))
); );
onStepSelected(step: Step): void { onStepSelected(step: Step): void {
this.stepTrackForm.patchValue({ stepName: step.stepInfo?.stepName });
debugger
// this.stepTrackForm.patchValue({ stepName1: step.stepInfo?.stepName });
//this.stepTrackForm.patchValue({id: step.id}); //this.stepTrackForm.patchValue({id: step.id});
...@@ -75,8 +81,7 @@ export class AddStepTrackModalComponent { ...@@ -75,8 +81,7 @@ export class AddStepTrackModalComponent {
onSubmit(): void { onSubmit(): void {
if (this.stepTrackForm.valid) { if (this.stepTrackForm.valid) {
debugger debugger
const selectedStep = this.filteredSteps.find(step => step.id == this.stepTrackForm.value.id);
const selectedStep = this.filteredSteps.find(step => step.stepInfo.stepName == this.stepTrackForm.value.stepName);
if (selectedStep) { if (selectedStep) {
if(selectedStep.currentCompletionRatio + this.stepTrackForm.value.trackExecutionRatio > 100){ if(selectedStep.currentCompletionRatio + this.stepTrackForm.value.trackExecutionRatio > 100){
this.toastr.error('نسبة التنفيذ غير صحيحة ') this.toastr.error('نسبة التنفيذ غير صحيحة ')
...@@ -86,24 +91,30 @@ export class AddStepTrackModalComponent { ...@@ -86,24 +91,30 @@ export class AddStepTrackModalComponent {
const newStepTrack: AddStepTrackRequest = { const newStepTrack: AddStepTrackRequest = {
stepId: selectedStep.id, stepId: selectedStep.id,
trackId: this.trackId, trackId: this.trackId,
executionState: this.stepTrackForm.value.executionState, executionState: this.stepTrackForm.value.executionState,
trackExecutionRatio: this.stepTrackForm.value.trackExecutionRatio, trackExecutionRatio: this.stepTrackForm.value.trackExecutionRatio,
}; };
this.closeModal(); this
this.addStepTrack.emit(newStepTrack); .trackService
.addStepTrack(newStepTrack)
.subscribe({
next:()=>{
this.activeModal.close({data : newStepTrack.stepId,request:newStepTrack})
},
error:(err)=>{
this.toastr.error('لقد حدث خطاء')
this.activeModal.close();
}
})
} }
} }
} }
closeModal(): void { closeModal(): void {
const modal = document.getElementById('addStepTrackModal'); this.activeModal.close();
if (modal) {
const bootstrapModal = new Modal(modal);
bootstrapModal.hide();
}
} }
} }
<p>update-step-track-modal works!</p> <div class="modal-header">
<h5 class="modal-title" id="addStepTrackModalLabel">إضافة متابعة مرحلة</h5>
<button type="button" class=" mr-4 ml-4 btn-close" (click)="closeModal()"></button>
</div>
<div class="modal-body">
<form [formGroup]="stepTrackForm" (ngSubmit)="onSubmit()">
<div class="mb-3">
<label for="stepName" class="form-label">اسم المرحلة</label>
<input type="text" id="stepName" formControlName="stepName" class="form-control"
[disabled]="true"
>
</div>
<input type="number" hidden id="id" formControlName="id" class="form-control" >
<input type="number" hidden id="iddsfdsf" formControlName="stepName1" class="form-control" >
<div class="mb-3">
<label for="executionState" class="form-label">طبيعية التنفيذ</label>
<input type="text" id="executionState" formControlName="executionState" class="form-control">
</div>
<div class="mb-3">
<label for="trackExecutionRatio" class="form-label">نسبة التنفيذ خلال المتابعة</label>
<input type="number" id="trackExecutionRatio" formControlName="trackExecutionRatio" class="form-control" min="0" max="100">
</div>
<button type="submit" class="btn mr-4 ml-4 btn-primary" [disabled]="!stepTrackForm.valid">تعديل</button>
<button (click)="closeModal()" class="btn mr-4 ml-4 btn-primary" >إلغاء</button>
</form>
</div>
import { Component } from '@angular/core'; import { Component, Input } from '@angular/core';
import { Step } from '../../../../projects/models/responses/Step';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { ToastrService } from 'ngx-toastr';
import { Observable, map } from 'rxjs';
import { StepService } from '../../../../projects/services/step.service';
import { AddStepTrackRequest } from '../../../models/requests/AddStepTrackRequest';
import { TrackService } from '../../../services/track.service';
import { UpdateStepTrack } from '../../../models/requests/UpdateStepTrack';
import { StepTrack } from '../../../models/responses/steptrack';
import { Track } from '../../../models/responses/track';
@Component({ @Component({
selector: 'update-step-track-modal', selector: 'update-step-track-modal',
...@@ -6,5 +17,71 @@ import { Component } from '@angular/core'; ...@@ -6,5 +17,71 @@ import { Component } from '@angular/core';
styleUrl: './update-step-track-modal.component.css' styleUrl: './update-step-track-modal.component.css'
}) })
export class UpdateStepTrackModalComponent { export class UpdateStepTrackModalComponent {
@Input() projectId :number
@Input() trackId :number
@Input() track : Track
@Input() stepTrack : StepTrack
stepTrackForm: FormGroup;
filteredSteps: Step[] = [];
constructor(private fb: FormBuilder,
private stepService : StepService ,
private trackService : TrackService,
private toastr :ToastrService,
private activeModal :NgbActiveModal
) {}
ngOnInit(): void {
this.stepTrackForm = this.fb.group({
id: [this.stepTrack.stepId],
stepName: [this.stepTrack.stepInfo.stepName, Validators.required],
executionState: [this.stepTrack.executionState, Validators.required],
trackExecutionRatio: [this.stepTrack.trackExecutionRatio, [Validators.required, Validators.min(0), Validators.max(100)]],
});
}
onSubmit(): void {
if (this.stepTrackForm.valid) {
debugger
if(this.stepTrack.oldExecutionRatio + this.stepTrackForm.value.trackExecutionRatio > 100){
this.toastr.error('نسبة التنفيذ غير صحيحة ')
return ;
}
const newStepTrack: UpdateStepTrack = {
stepId: this.stepTrack.stepId,
trackId: this.trackId,
trackDate:this.track.trackInfo.trackDate,
stepTrackId:this.stepTrack.id,
executionState: this.stepTrackForm.value.executionState,
trackExecutionRatio: this.stepTrackForm.value.trackExecutionRatio,
};
this
.trackService
.UupdateStepTrack(newStepTrack)
.subscribe({
next:()=>{
this.activeModal.close({data : newStepTrack.stepId,request:newStepTrack})
},
error:(err)=>{
this.toastr.error('لقد حدث خطاء')
this.activeModal.close();
}
})
}
}
closeModal(): void {
this.activeModal.close();
}
} }
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<div class="col-auto"> <div class="col-auto">
<button type="button "[routerLink]="['/track/history/step',stepTrack.stepId]" class="btn m-2 btn-sm btn-secondary">تاريخ المتابعة</button> <button type="button "[routerLink]="['/track/history/step',stepTrack.stepId]" class="btn m-2 btn-sm btn-secondary">تاريخ المتابعة</button>
<button type="button" class="btn m-2 btn-sm btn-secondary">تعديل</button> <button type="button" (click)="onEdit()" class="btn m-2 btn-sm btn-secondary">تعديل</button>
</div> </div>
</div> </div>
</div> </div>
......
import { Component, Input } from '@angular/core'; import { Component, EventEmitter, Input, Output } from '@angular/core';
import { StepTrack } from '../../models/responses/steptrack'; import { StepTrack } from '../../models/responses/steptrack';
@Component({ @Component({
...@@ -10,4 +10,10 @@ export class StepTrackComponent { ...@@ -10,4 +10,10 @@ export class StepTrackComponent {
@Input() projectId : number @Input() projectId : number
@Input() stepTrack :StepTrack @Input() stepTrack :StepTrack
@Output() edit = new EventEmitter<StepTrack>();
onEdit(){
this.edit.emit(this.stepTrack);
}
} }
...@@ -2,7 +2,7 @@ export class UpdateStepTrack { ...@@ -2,7 +2,7 @@ export class UpdateStepTrack {
stepTrackId: number; stepTrackId: number;
trackId: number; trackId: number;
stepId: number; stepId: number;
executionState: String; executionState: string;
trackDate: Date; trackDate: Date;
trackExecutionRatio: number; trackExecutionRatio: number;
} }
...@@ -39,8 +39,8 @@ ...@@ -39,8 +39,8 @@
<!-- Delete Confirmation --> <!-- Delete Confirmation -->
<div *ngIf="modalMode === 'delete'"> <div *ngIf="modalMode === 'delete'">
<p>هل أنت متأكد من أنك تريد حذف متابعة {{ selectedItem.projectInfo.name }} التي حدثت بتاريخ {{selectedItem.trackInfo.trackDate | date}}?</p> <p>هل أنت متأكد من أنك تريد حذف متابعة {{ selectedItem.projectInfo.name }} التي حدثت بتاريخ {{selectedItem.trackInfo.trackDate | date}}?</p>
<button type="button" class="btn m-4 btn-danger" (click)="deleteTrack()">Delete</button> <button type="button" class="btn m-4 btn-danger" (click)="deleteTrack()">إزالة</button>
<button type="button" class="btn m-4 btn-secondary" data-bs-dismiss="modal">Cancel</button> <button type="button" class="btn m-4 btn-secondary" data-bs-dismiss="modal">إلغاء</button>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -54,8 +54,7 @@ export class ProjectTrackHistoryComponent { ...@@ -54,8 +54,7 @@ export class ProjectTrackHistoryComponent {
next : (data)=>{ next : (data)=>{
this.toastr.success("تم تحميل عمليات المتابعة بنجاح"); this.toastr.success("تم تحميل عمليات المتابعة بنجاح");
this.tracks= data.sort((e1,e2)=> Number(e1.trackInfo.trackDate > e2.trackInfo.trackDate)); this.tracks= data.reverse()
} }
, ,
error:(err)=>{ error:(err)=>{
...@@ -76,7 +75,9 @@ export class ProjectTrackHistoryComponent { ...@@ -76,7 +75,9 @@ export class ProjectTrackHistoryComponent {
modalRef.result.then((result) => { modalRef.result.then((result) => {
if (result) { if (result) {
this.tracks.push(result); let t =[result];
t.push(...this.tracks);
this.tracks=t;
this.toastr.success("تمت الإضافة بنجاح") this.toastr.success("تمت الإضافة بنجاح")
} }
}, (reason) => { }, (reason) => {
...@@ -127,10 +128,7 @@ export class ProjectTrackHistoryComponent { ...@@ -127,10 +128,7 @@ export class ProjectTrackHistoryComponent {
} }
closeModal(): void { closeModal(): void {
const modalElement = document.getElementById('trackModal'); this.modalService.dismissAll()
if (modalElement) {
new Modal(modalElement).hide(); // Close the modal
}
} }
} }
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
<step-track *ngFor="let stepTrack of stepTracks" <step-track *ngFor="let stepTrack of stepTracks"
[projectId]="track.projectId" [projectId]="track.projectId"
(edit)="openeditStepTrack(stepTrack)"
[stepTrack]="stepTrack" ></step-track> [stepTrack]="stepTrack" ></step-track>
<div class="offset-2 text-center text-secondary" *ngIf="stepTracks.length ==0 " > <div class="offset-2 text-center text-secondary" *ngIf="stepTracks.length ==0 " >
لم تقم بمتابعة اية مراحل لم تقم بمتابعة اية مراحل
...@@ -106,26 +106,26 @@ ...@@ -106,26 +106,26 @@
</div> </div>
</div> </div>
<button [disabled]="track.trackInfo.isCompleted" type="button" class="btn mr-4 ml-4 btn-primary" data-bs-toggle="modal" data-bs-target="#addStepTrackModal"> <button [disabled]="track.trackInfo.isCompleted" type="button" class="btn mr-4 ml-4 btn-primary" (click)="openAddStepTrack()">
إضافة متابعة مرحلة إضافة متابعة مرحلة
</button> </button>
<button [disabled]="track.trackInfo.isCompleted" type="button" class="btn mr-4 ml-4 btn-primary" data-bs-toggle="modal" data-bs-target="#addEmployeeTrackModal"> <button [disabled]="track.trackInfo.isCompleted" type="button" class="btn mr-4 ml-4 btn-primary"(click)="openEmployeeTrack()">
إضافة متابعة مشارك إضافة متابعة مشارك
</button> </button>
<add-step-track-modal <!-- <add-step-track-modal
[trackId]="trackId" [trackId]="trackId"
[projectId]="track.projectId" [projectId]="track.projectId"
[trackedSteps]="trackedSteps" []="trackedSteps"
(addStepTrack)="handleAddStepTrack($event)"> (addStepTrack)="handleAddStepTrack($event)">
</add-step-track-modal> </add-step-track-modal> -->
<add-employee-track-modal <!-- <add-employee-track-modal
[trackId]="trackId" [trackId]="trackId"
[projectId]="track.projectId" [projectId]="track.projectId"
[trackedParticipants]="employeesTracks" [trackedParticipants]="employeesTracks"
(addEmployeeTrack)="handleEmployeeTrack($event)"> (addEmployeeTrack)="handleEmployeeTrack($event)">
</add-employee-track-modal> </add-employee-track-modal> -->
</section> </section>
\ No newline at end of file
...@@ -7,7 +7,7 @@ import { EmployeeTrack } from '../../models/responses/employeeTrack'; ...@@ -7,7 +7,7 @@ import { EmployeeTrack } from '../../models/responses/employeeTrack';
import { ActivatedRoute } from '@angular/router'; import { ActivatedRoute } from '@angular/router';
import { Step } from '../../../projects/models/responses/Step'; import { Step } from '../../../projects/models/responses/Step';
import { AddStepTrackRequest } from '../../models/requests/AddStepTrackRequest'; import { AddStepTrackRequest } from '../../models/requests/AddStepTrackRequest';
import { error } from 'jquery'; import { data, error } from 'jquery';
import { StepService } from '../../../projects/services/step.service'; import { StepService } from '../../../projects/services/step.service';
import { forkJoin } from 'rxjs'; import { forkJoin } from 'rxjs';
import { AddEmployeeTrackRequest } from '../../models/requests/AddEmployeeTrackRequest'; import { AddEmployeeTrackRequest } from '../../models/requests/AddEmployeeTrackRequest';
...@@ -15,6 +15,11 @@ import { ProjectService } from '../../../projects/services/project.service'; ...@@ -15,6 +15,11 @@ import { ProjectService } from '../../../projects/services/project.service';
import { EmployeeParticipate } from '../../../employees/models/responses/employeeParticipate'; import { EmployeeParticipate } from '../../../employees/models/responses/employeeParticipate';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { CompleteTrackModalComponent } from '../../components/modals/complete-track-modal/complete-track-modal.component'; import { CompleteTrackModalComponent } from '../../components/modals/complete-track-modal/complete-track-modal.component';
import { AddStepModalComponent } from '../../../projects/components/modals/add-step-modal/add-step-modal.component';
import { AddStepTrackModalComponent } from '../../components/modals/add-step-track-modal/add-step-track-modal.component';
import { AddEmployeeTrackModalComponent } from '../../components/modals/add-employee-track-modal/add-employee-track-modal.component';
import { UpdateStepTrack } from '../../models/requests/UpdateStepTrack';
import { UpdateStepTrackModalComponent } from '../../components/modals/update-step-track-modal/update-step-track-modal.component';
@Component({ @Component({
selector: 'track-details', selector: 'track-details',
...@@ -82,6 +87,77 @@ export class TrackDetailsComponent implements OnInit { ...@@ -82,6 +87,77 @@ export class TrackDetailsComponent implements OnInit {
}); });
} }
openAddStepTrack(){
const modalRef = this.modalService.open(AddStepTrackModalComponent);
modalRef.componentInstance.trackId=this.trackId
modalRef.componentInstance.projectId=this.track.projectId
modalRef.componentInstance.trackedSteps=this.trackedSteps
modalRef.result.then((result :{data : number ,request : AddStepTrackRequest}) => {
if(result){
this.handleAddStepTrack(result.data,result.request);
}
}, (reason) => {
});
}
openeditStepTrack(st : StepTrack){
const modalRef = this.modalService.open(UpdateStepTrackModalComponent);
modalRef.componentInstance.trackId=this.trackId
modalRef.componentInstance.projectId=this.track.projectId
modalRef.componentInstance.stepTrack=st
modalRef.componentInstance.track=this.track
modalRef.result.then((result :{data : number ,request : UpdateStepTrack}) => {
if(result){
this.stepTracks.forEach((e)=>{
if(e.stepId == result.data){
e.executionState=result.request.executionState
e.trackExecutionRatio=result.request.trackExecutionRatio
}
})
this.stepTracks=[...this.stepTracks]
}
}, (reason) => {
});
}
openEmployeeTrack(){
const modalRef = this.modalService.open(AddEmployeeTrackModalComponent,{size:'lg'});
modalRef.componentInstance.trackedParticipants=this.employeesTracks
modalRef.componentInstance.projectId=this.track.projectId
modalRef.componentInstance.trackId=this.track.id
modalRef.componentInstance.trackedSteps=this.trackedSteps
modalRef.result.then((result : {data : number ,request : AddEmployeeTrackRequest}) => {
if(result){
this.handleEmployeeTrack(result.data,result.request);
}
}, (reason) => {
});
}
openTrackComplete(){ openTrackComplete(){
const modalRef = this.modalService.open(CompleteTrackModalComponent); const modalRef = this.modalService.open(CompleteTrackModalComponent);
...@@ -141,23 +217,11 @@ export class TrackDetailsComponent implements OnInit { ...@@ -141,23 +217,11 @@ export class TrackDetailsComponent implements OnInit {
this.isAddStepTrackModalVisible = false; this.isAddStepTrackModalVisible = false;
} }
handleAddStepTrack(stepTrackRequest: AddStepTrackRequest): void { handleAddStepTrack(data :number ,stepTrackRequest: AddStepTrackRequest): void {
this.trackService.addStepTrack(stepTrackRequest).subscribe({
next : (data)=>{
this.loadTheNewStep(data,stepTrackRequest); this.loadTheNewStep(data,stepTrackRequest);
this.toastr.success('تمت إضافة متالعة المرحلة ')
} }
,
error:(err)=>{
this.toastr.error('لقد حدث خطاء ما')
}
});
}
openComplete(){ openComplete(){
...@@ -168,7 +232,7 @@ export class TrackDetailsComponent implements OnInit { ...@@ -168,7 +232,7 @@ export class TrackDetailsComponent implements OnInit {
modalRef.result.then((result) => { modalRef.result.then((result) => {
if (result) { if (result) {
// Add the new project to the list // Add the new project to the list
this.loadParticipants(); this.loadTrack();
} }
}, (reason) => { }, (reason) => {
...@@ -206,23 +270,13 @@ export class TrackDetailsComponent implements OnInit { ...@@ -206,23 +270,13 @@ export class TrackDetailsComponent implements OnInit {
} }
handleEmployeeTrack(request: AddEmployeeTrackRequest): void { handleEmployeeTrack(data :number,request: AddEmployeeTrackRequest): void {
this.loadTheNewParticipant(data,request);
debugger
this.trackService.addEmployeeTrack(request).subscribe({
next : (data)=>{
this.loadTheNewParticipant(data,request);
this.toastr.success('تمت إضافة متالعة المرحلة ')
this._canComplete(); this._canComplete();
}
,
error:(err)=>{
this.toastr.error('لقد حدث خطاء ما')
}
});
} }
loadTheNewParticipant(empTrackId :number,request :AddEmployeeTrackRequest ){ loadTheNewParticipant(empTrackId :number,request :AddEmployeeTrackRequest ){
let s = this.participants.find(s => s.employeeId == request.employeeId ) let s = this.participants.find(s => s.employeeId == request.employeeId )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment