Commit 4e3b3a70 authored by hasan khaddour's avatar hasan khaddour

Add step update

parent edffc18a
<div class="modal-header">
<button type="button" class="btn-close" (click)="onClose()" ></button>
<h5 class="modal-title text-center">تعديل مرحلة</h5>
</div>
<div class="modal-body">
<form (ngSubmit)="onSubmit()" #projectForm="ngForm">
<div class="row">
<div class="mb-3 col-4 offset-1">
<label for="stepName" class="form-label">اسم المرحلة</label>
<input disabled="true" type="text" name="stepName" id="stepName" class="form-control" [(ngModel)]="request.stepInfo.stepName" required>
</div>
<div class="mb-3 col-4">
<label for="start" class="form-label">تاريخ البدء</label>
<input type="date" disabled="true" id="start" class="form-control" [(ngModel)]="request.stepInfo.startDate" name="start" required>
</div>
<button type="button" class="btn-close" (click)="onClose()"></button>
<h5 class="modal-title text-center">تعديل مرحلة</h5>
</div>
<div class="modal-body">
<form (ngSubmit)="onSubmit()" #projectForm="ngForm">
<div class="row">
<div class="mb-3 col-4 offset-1">
<label for="stepName" class="form-label">اسم المرحلة</label>
<input
disabled="true"
type="text"
name="stepName"
id="stepName"
class="form-control"
[(ngModel)]="request.stepInfo.stepName"
required
/>
</div>
<div class="mb-3 col-4">
<label for="start" class="form-label">تاريخ البدء</label>
<input
type="datetime"
disabled="true"
id="start"
class="form-control"
[(ngModel)]="request.stepInfo.startDate"
name="start"
required
/>
</div>
</div>
<div class="row">
<div class="mb-3 col-4 offset-1">
<label for="worker" class="form-label">عدد العمال المطلوب</label>
<input
id="worker"
class="form-control"
[(ngModel)]="request.stepInfo.numberOfWorker"
name="worker"
required
/>
</div>
<div class="mb-3 col-3">
<label for="duration" class="form-label"> المدة (أسبوع)</label>
<input
id="duration"
class="form-control"
[(ngModel)]="request.stepInfo.duration"
name="duration"
required
/>
</div>
<div class="row">
<div class="mb-3 col-4 offset-1">
<label for="worker" class="form-label">عدد العمال المطلوب</label>
<input id="worker" class="form-control" [(ngModel)]="request.stepInfo.numberOfWorker" name="worker" required>
</div>
<div class="mb-3 col-3">
<label for="duration" class="form-label"> المدة (أسبوع)</label>
<input id="duration" class="form-control" [(ngModel)]="request.stepInfo.duration" name="duration" required>
</div>
<div class="mb-3 col-8 offset-1" >
<label for="decription" class="form-label">الوصف</label>
<textarea col="3" name="decription" id="decription" class="form-control" [(ngModel)]="request.stepInfo.description" required>
</textarea>
</div>
</div>
<div class="row">
</div>
<div class="row ">
<button type="submit" [disabled]="projectForm.invalid" class="col-5 m-4 btn btn-primary">إضافة</button>
<div class="col-5 m-4 btn btn-secondary" (click)="onClose()" >إغلاق</div>
<div class="mb-3 col-8 offset-1">
<label for="decription" class="form-label">الوصف</label>
<textarea
col="3"
name="decription"
id="decription"
class="form-control"
[(ngModel)]="request.stepInfo.description"
required
>
</textarea>
</div>
</form>
</div>
\ No newline at end of file
</div>
<div class="row"></div>
<div class="row">
<button
type="submit"
[disabled]="projectForm.invalid"
class="col-5 m-4 btn btn-primary"
>
إضافة
</button>
<div class="col-5 m-4 btn btn-secondary" (click)="onClose()">إغلاق</div>
</div>
</form>
</div>
......@@ -54,7 +54,7 @@ export class EditStepModalComponent {
})
}
onClose():void {
onClose( ):void {
this.activeModal.close();
}
......
......@@ -33,8 +33,8 @@
<div class="col-auto">
<button type="button" class="btn m-2 btn-sm btn-secondary">المساهمات</button>
<button type="button" class="btn m-2 btn-sm btn-secondary">تعديل</button>
<button type="button" [routerLink]="['/tracks/project',projectId,'employee',employeeTrack.employeeId]" class="btn m-2 btn-sm btn-secondary">المتابعات</button>
<button type="button" *ngIf="!employeeTrack.trackInfo.isCompleted" (click)="openEditModal()" class="btn m-2 btn-sm btn-secondary">تعديل</button>
</div>
</div>
</div>
......
import { Component, Input } from '@angular/core';
import { EmployeeTrack } from '../../models/responses/employeeTrack';
import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { NgModel } from '@angular/forms';
import { UpdateWorkModalComponent } from '../modals/update-work-modal/update-work-modal.component';
import { UpdateEmployeeWorkTrackRequest } from '../../models/requests/UpdateEmployeeWorkTrackRequest';
@Component({
selector: 'employee-track',
......@@ -9,4 +13,35 @@ import { EmployeeTrack } from '../../models/responses/employeeTrack';
export class EmployeeTrackComponent {
@Input() employeeTrack :EmployeeTrack
@Input() projectId :number
constructor(
private modalService : NgbModal
){}
openEditModal(): void {
console.log(this.employeeTrack)
const modalRef = this.modalService.open(UpdateWorkModalComponent ,{size:'lg'});
modalRef.componentInstance.employeeTrack=this.employeeTrack;
modalRef.componentInstance.employee =this.employeeTrack.employee;
modalRef.result.then((result :UpdateEmployeeWorkTrackRequest) => {
if (result) {
this.employeeTrack.employeeWork={...result.employeeWork}
this.employeeTrack.employeeWorkInfo={...result.employeeWorkInfo}
this.employeeTrack.notes=result.notes
}
}, (reason) => {
});
}
}
......@@ -61,7 +61,7 @@
</div>
<button type="submit" class="btn mr-4 ml-4 btn-primary" [disabled]="!stepTrackForm.valid">إضافة</button>
<button data-bs-dismiss="modal" aria-label="Close" class=" mr-4 ml-4 btn btn-primary" >إلغاء</button>
<div data-bs-dismiss="modal" aria-label="Close" class=" mr-4 ml-4 btn btn-primary" >إلغاء</div>
</form>
</div>
......
......@@ -59,7 +59,7 @@ export class AddEmployeeTrackModalComponent {
this.participants=data
this.filteredParticipants = this.participants.filter(track=>
!this.trackedParticipants.some(participate => participate.emloyeeId ===track.employeeId )
!this.trackedParticipants.some(participate => participate.employeeId ===track.employeeId )
).map(e => e.employee);
......
......@@ -29,7 +29,8 @@ export class AddStepTrackModalComponent {
filteredSteps: Step[] = [];
constructor(private fb: FormBuilder,
private stepService : StepService
private stepService : StepService ,
private toastr :ToastrService
) {
this.stepTrackForm = this.fb.group({
id: [],
......@@ -65,7 +66,7 @@ export class AddStepTrackModalComponent {
onStepSelected(step: Step): void {
this.stepTrackForm.patchValue({ stepName: step.stepInfo?.stepName });
this.stepTrackForm.patchValue({ stepName: step.stepInfo?.stepName });
//this.stepTrackForm.patchValue({id: step.id});
......@@ -77,6 +78,12 @@ export class AddStepTrackModalComponent {
const selectedStep = this.filteredSteps.find(step => step.stepInfo.stepName == this.stepTrackForm.value.stepName);
if (selectedStep) {
if(selectedStep.currentCompletionRatio + this.stepTrackForm.value.trackExecutionRatio > 100){
this.toastr.error('نسبة التنفيذ غير صحيحة ')
return ;
}
const newStepTrack: AddStepTrackRequest = {
stepId: selectedStep.id,
trackId: this.trackId,
......
......@@ -9,7 +9,7 @@
<div class="modal-body">
<form (ngSubmit)="onSubmit()" #projectForm="ngForm">
<div *ngIf="!canComplete" class="row text-primary">
عذراَ, لاتتسطيع أكمال عملية متابعة هي بالأصل مكتملة
{{errorMessage}}
</div>
<div *ngIf="canComplete">
......@@ -23,9 +23,9 @@
>
اكمال المتابعة
</button>
<button class="col m-4 btn btn-seondary" (click)="onClose()">
<div class="col m-4 btn btn-seondary" (click)="onClose()">
إغلاق
</button>
</div>
</div>
</form>
</div>
......@@ -4,6 +4,8 @@ import { CompleteTrackRequest } from '../../../models/requests/completeTrakReque
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { ToastrService } from 'ngx-toastr';
import { TrackService } from '../../../services/track.service';
import { Employee } from '../../../../employees/models/responses/employee';
import { EmployeeTrack } from '../../../models/responses/employeeTrack';
@Component({
selector: 'complete-track-modal',
......@@ -13,6 +15,8 @@ import { TrackService } from '../../../services/track.service';
export class CompleteTrackModalComponent {
@Input() track : Track
@Input() employeeTrack : EmployeeTrack[]
errorMessage =''
request = new CompleteTrackRequest();
canComplete : boolean
......@@ -25,7 +29,8 @@ export class CompleteTrackModalComponent {
ngOnInit(): void {
console.log(this.employeeTrack)
this._setCanMove();
}
......@@ -58,6 +63,8 @@ export class CompleteTrackModalComponent {
.toastr
.success('تم اكمال المتابعة بنجاح');
this.activeModal.close(true)
},
error:(err)=>{
this
......@@ -76,6 +83,29 @@ export class CompleteTrackModalComponent {
.track
.trackInfo
.isCompleted
if(!this.canComplete){
this.errorMessage='عذرا لاتستطيع اكمال عملية متابعة مكتملة بالفعل'
}
debugger
let contribution =0;
if(this.employeeTrack){
this
.employeeTrack
.forEach(e => contribution+=e.employeeWork.contributingRatio)
}
if(contribution!=100){
this.errorMessage='عذرا يجب أن يكون مجموع مساهمات العاملين مئة'
}
// this.canComplete = contribution == 100
console.log(this.track)
}
......
import { Component } from '@angular/core';
@Component({
selector: 'update-step-track-modal',
templateUrl: './update-step-track-modal.component.html',
styleUrl: './update-step-track-modal.component.css'
})
export class UpdateStepTrackModalComponent {
}
<div class="modal-header">
<h5 class="modal-title" >تعديل متابعة مشارك</h5>
<button type="button" class="mr-4 ml-4 btn-close" (click)="onClose()"></button>
</div>
<div class="modal-body">
<form (ngSubmit)="onSubmit()"#projectForm="ngForm">
<div class="row ">
<div class="mb-3 col-4">
<label for="hiastId" class="form-label">المشارك</label>
<label>{{employee.personalInfo | fullname}}</label>
</div>
<div class="mb-3 col-6">
<label for="notes" class="form-label">الملاحظات</label>
<input type="text" id="notes" [(ngModel)]="request.notes" class="form-control">
</div>
</div>
<div class="row">
<div class="mb-3 col-4">
<label for="assignedWork" class="form-label">العمل المسند</label>
<input id="assignedWork" [(ngModel)]="request.employeeWorkInfo.assignedWork" class="form-control" >
</div>
<div class="mb-3 col-4">
<label for="performedWork" class="form-label">العمل المنجز</label>
<input id="performedWork" formControlName="performedWork" [(ngModel)]="request.employeeWorkInfo.performedWork" class="form-control" >
</div>
<div class="mb-3 col-4">
<label for="assignedWorkEnd" class="form-label">تاريخ تنفيذ العمل المسند</label>
<input type="date" id="assignedWorkEnd" formControlName="assignedWorkEnd" [(ngModel)]="request.employeeWorkInfo.assignedWorkEnd" class="form-control" >
</div>
</div>
<div class="row">
<div class="mb-3 col-4">
<label for="assignedWorkingHours" class="form-label">ساعات العمل المسندة </label>
<input type="number" id="assignedWorkingHours" formControlName="contributingR" [(ngModel)]="request.employeeWork.assignedWorkingHours" class="form-control" >
</div>
<div class="mb-3 col-4">
<label for="workedHours" class="form-label">ساعات العمل الفعلية</label>
<input type="number" id="workedHours" [(ngModel)]="request.employeeWork.workedHours" formControlName="workedHours" class="form-control" >
</div>
<div class="mb-3 col-4">
<label for="contributingRatio" class="form-label">نسبة المساهمة في العمل</label>
<input type="number" id="contributingRatio" [(ngModel)]="request.employeeWork.contributingRatio" formControlName="contributingRatio" class="form-control" >
</div>
</div>
<button type="submit" class="btn mr-4 ml-4 btn-primary"[disabled]="projectForm.invalid" >إضافة</button>
<div (click)="onClose()" class=" mr-4 ml-4 btn btn-primary" >إلغاء</div>
</form>
</div>
\ No newline at end of file
import { Component, Input, OnInit } from '@angular/core';
import { EmployeeWork } from '../../../models/valueObjects/EmployeeWork';
import { Employee } from '../../../../employees/models/responses/employee';
import { ProjectService } from '../../../../projects/services/project.service';
import { UpdateEmployeeWorkTrackRequest } from '../../../models/requests/UpdateEmployeeWorkTrackRequest';
import { EmployeeTrack } from '../../../models/responses/employeeTrack';
import { TrackService } from '../../../services/track.service';
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { ToastrService } from 'ngx-toastr';
@Component({
selector: 'update-work-modal',
templateUrl: './update-work-modal.component.html',
styleUrl: './update-work-modal.component.css'
})
export class UpdateWorkModalComponent implements OnInit {
@Input() employeeTrack : EmployeeTrack
@Input() employee :Employee
request : UpdateEmployeeWorkTrackRequest
constructor(
private toastr :ToastrService,
public activeModal: NgbActiveModal,
private trackService :TrackService
){}
ngOnInit(): void {
this.request={
employeeId:this.employee.id,
employeeTrackId:this.employeeTrack.trackId,
employeeWork:{...this.employeeTrack.employeeWork},
employeeWorkInfo:{...this.employeeTrack.employeeWorkInfo},
notes:this.employeeTrack.notes,
trackId:this.employeeTrack.trackId
}
}
onSubmit(){
this
.trackService
.updateEmployeeWorkTrack(this.request)
.subscribe({
next:()=>{
this.activeModal.close(this.request);
}
,
error:(err)=>{
this.toastr.error('لقد حدث خطاء ما')
}
});
}
onClose(){
this.activeModal.close();
}
}
......@@ -4,7 +4,7 @@ import { EmployeeWorkInfo } from "../valueObjects/EmployeeWorkInfo"
import { TrackInfo } from "../valueObjects/trackInfo"
export class EmployeeTrack {
emloyeeId :number
employeeId :number
trackId :number
employee : Employee
trackInfo :TrackInfo
......
<section *ngIf="employeeTrackHistory" class="row">
<section *ngIf="employeeTrackHistory && projectInfo" class="row">
<div class="row justify-content-center">
<div class="col-12">
<div class="row align-items-center my-4">
......
......@@ -55,7 +55,7 @@
<div class="row">
<div class="col-6 label ">تاريخ عملية المتابعة {{track.trackInfo.trackDate | date}}</div>
<button (click)="openComplete()" class="col-2 mr-1 btn btn-primary" *ngIf="!track.trackInfo.isCompleted">اكمال المتابعة</button>
<button [disabled]="!canComplete" (click)="openComplete()" class="col-2 mr-1 btn btn-primary" *ngIf="!track.trackInfo.isCompleted">اكمال المتابعة</button>
<div class="col-2 btn disabled btn-success ">{{track.trackInfo.isCompleted ? 'مكتملة':'غير مكتملة'}}</div>
</div>
......@@ -74,7 +74,11 @@
<div class="tab-pane fade pt-3" id="profile-settings" role="tabpanel">
<employee-track *ngFor="let employeeTrack of employeesTracks" [employeeTrack]="employeeTrack" ></employee-track>
<employee-track
*ngFor="let employeeTrack of employeesTracks"
[employeeTrack]="employeeTrack"
[projectId]="track.projectId"
></employee-track>
<div class="row" *ngIf="employeesTracks.length ==0 " >
لم تقم بمتابعة اي مشارك
</div>
......@@ -97,10 +101,10 @@
</div>
</div>
<button 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" data-bs-toggle="modal" data-bs-target="#addStepTrackModal">
إضافة متابعة مرحلة
</button>
<button 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" data-bs-toggle="modal" data-bs-target="#addEmployeeTrackModal">
إضافة متابعة مشارك
</button>
......
......@@ -25,6 +25,7 @@ export class TrackDetailsComponent implements OnInit {
isAddStepTrackModalVisible = false;
trackId : number
track : Track
canComplete=false
stepTracks :StepTrack[]
employeesTracks : EmployeeTrack[]
steps: Step[] = []; // Load steps from service or store
......@@ -45,6 +46,7 @@ export class TrackDetailsComponent implements OnInit {
this.trackId=Number(this.route.snapshot.paramMap.get('id'));
this.loadTrack();
}
loadTrack(){
......@@ -61,6 +63,7 @@ export class TrackDetailsComponent implements OnInit {
this.stepTracks = stepTracks;
this.employeesTracks = employeesTracks;
this.loadParticipants();
this._canComplete();
this.loadSteps();
})
......@@ -78,21 +81,19 @@ export class TrackDetailsComponent implements OnInit {
});
}
openTrackComplete(){
const modalRef = this.modalService.open(CompleteTrackModalComponent);
modalRef.componentInstance.track = this.track;
modalRef.componentInstance.employeeTrack=this.employeesTracks
modalRef.result.then((result) => {
if (result) {
// Add the new project to the list
if(result){
this.loadTrack();
}
}, (reason) => {
......@@ -198,7 +199,7 @@ export class TrackDetailsComponent implements OnInit {
stepWeight:s?.weight ??0
}
this._canComplete();
this.stepTracks.push(st)
this.steps=this.steps.filter(e => e.id == s?.id)
this.trackedSteps.push(s!);
......@@ -214,7 +215,7 @@ export class TrackDetailsComponent implements OnInit {
this.loadTheNewParticipant(data,request);
this.toastr.success('تمت إضافة متالعة المرحلة ')
this._canComplete();
}
,
error:(err)=>{
......@@ -228,13 +229,14 @@ export class TrackDetailsComponent implements OnInit {
let st : EmployeeTrack ={
trackId:this.trackId,
trackInfo:this.track.trackInfo,
emloyeeId:request.employeeId,
employeeId:request.employeeId,
employeeWork:request.employeeWork,
employeeWorkInfo:request.employeeWorkInfo,
employee:s!.employee,
notes:request.notes
}
this._canComplete();
this.employeesTracks.push(st)
this.participants=this.participants.filter(e => e.employeeId == s?.employeeId)
......@@ -242,4 +244,12 @@ export class TrackDetailsComponent implements OnInit {
}
}
private _canComplete (){
let contribution =0 ;
this
.employeesTracks
.forEach(e => contribution+=e.employeeWork.contributingRatio);
this.canComplete= 100 == contribution
}
}
......@@ -28,6 +28,8 @@ import { EmployeeHistoryItemComponent } from './components/history/employee-hist
import { StateTranslatePipe } from '../shared/pipes/stateTranslate/state-translate.pipe';
import { TracksUncompleteComponent } from './pages/tracks-uncomplete/tracks-uncomplete.component';
import { CompleteTrackModalComponent } from './components/modals/complete-track-modal/complete-track-modal.component';
import { UpdateWorkModalComponent } from './components/modals/update-work-modal/update-work-modal.component';
import { UpdateStepTrackModalComponent } from './components/modals/update-step-track-modal/update-step-track-modal.component';
@NgModule({
......@@ -46,7 +48,9 @@ import { CompleteTrackModalComponent } from './components/modals/complete-track-
StepHistoryItemComponent,
EmployeeHistoryItemComponent,
TracksUncompleteComponent,
CompleteTrackModalComponent
CompleteTrackModalComponent,
UpdateWorkModalComponent,
UpdateStepTrackModalComponent
],
imports: [
CommonModule,
......
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