Commit d87245d9 authored by hasan khaddour's avatar hasan khaddour

Complete Reports Module

parent 106c7bf2
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
</div> </div>
</div> </div>
<div class="col-auto"> <div class="col-auto">
<button type="button" [routerLink]="['/tracks/detail/',employeeParticipate.projectId,'employee',employeeParticipate.employeeId]" class="btn m-4 btn-sm btn-primary">استعراض متابعاتي به</button> <button type="button" [routerLink]="['/tracks/project/',employeeParticipate.projectId,'employee',employeeParticipate.employeeId]" class="btn m-4 btn-sm btn-primary">استعراض متابعاتي به</button>
<button type="button" class="btn m-4 btn-sm btn-secondary">تقرير بمشاركتي</button> <button type="button" [routerLink]="['/reports/contributions',employeeParticipate.projectId,'employee',employeeParticipate.employeeId]" class="btn m-4 btn-sm btn-secondary">تقرير بمشاركتي</button>
</div> </div>
</div> </div>
</div> <!-- / .card-body --> </div> <!-- / .card-body -->
......
...@@ -24,6 +24,12 @@ ...@@ -24,6 +24,12 @@
<button [routerLink]="['/projects',participant.projectId,'history','participationChange',participant.employeeId]" class="btn btn-secondary">التبدلات</button> <button [routerLink]="['/projects',participant.projectId,'history','participationChange',participant.employeeId]" class="btn btn-secondary">التبدلات</button>
</small> </small>
</div> </div>
<div class="col text-center">
<small>
<button [routerLink]="['/reports/contributions',participant.projectId,'employee',participant.employeeId]" class="btn btn-secondary">المساهمات</button>
</small>
</div>
</div> </div>
</div> <!-- /.card-footer --> </div> <!-- /.card-footer -->
......
<div class="row align-items-center mb-4">
<div class="col">
<h2 class="h5 page-title"><small class="text-muted text-uppercase"></small></h2>
</div>
<div class="col-auto">
</div>
</div>
<div class="row justify-content-center">
<div class="col-12">
<div class="row mt-5 align-items-center">
<div class="col-md-3 text-center mb-5">
<div class="avatar avatar-xl">
<img src="./assets/images/users/4.jpg" alt="..." class="avatar-img ">
</div>
</div>
<div class="col">
<div class="row align-items-center">
<div class="col-md-7">
<h4 class="mb-1">{{project.projectInfo.name}}</h4>
<p class="small mb-3"><span class="badge badge-dark">{{project.currentState | stateTranslate}}</span></p>
</div>
</div>
<div class="row mb-4">
<div class="col-md-7">
<p class="text-muted"> {{project.projectInfo.description}}</p>
</div>
<div class="col">
<p class="small mb-0 text-muted">تاريخ البدء {{project.projectInfo.startDate | date}}</p>
<p class="small mb-0 text-muted">تاريخ الانتهاء المتوقع {{project.projectInfo.expectedEndDate | date}}</p>
<p class="small mb-0 text-muted">الرمز {{project.projectInfo.code}}</p>
</div>
</div>
</div>
</div>
<div class="row mt-5 align-items-center">
<div class="col">
<div class="row mb-4">
<div class="col">
<p class="small mb-0 text-muted">التمويل {{project.financialFund.financialStatus}} / {{project.financialFund.source}}</p>
<p class="small mb-0 text-muted">كتاب الطرح {{project.proposalInfo.proposingBookDate| date}} / {{project.proposalInfo.proposingBookNumber}}</p>
<p class="small mb-0 text-muted">كتاب الموافقة {{project.projectAggreement.aggreementDate | date}} / {{project.projectAggreement.aggreementNumber}}</p>
</div>
<div class="col">
<p class="small mb-0 text-muted">الجهة الطارحة {{project.proposer.customerName}}</p>
<p class="small mb-0 text-muted">مدير المشروع {{project.projectManager.personalInfo |fullname}}</p>
<p class="small mb-0 text-muted">رئيس فريق العمل {{project.teamLeader.personalInfo | fullname}}</p>
</div>
<div class="col">
<p class="small mb-0 text-muted">الجهة المنفذة {{project.executer.name}}</p>
<p class="small mb-0 text-muted">طبيعة النشاط {{project.projectClassification.projectNature}}</p>
<p class="small mb-0 text-muted">النوع {{project.projectType.typeName}}</p>
</div>
</div>
</div>
</div>
</div>
import { Component, Input } from '@angular/core';
import { Project } from '../../../../projects/models/responses/project';
@Component({
selector: 'project-subjectiv-unformal',
templateUrl: './project-subjectiv-unformal.component.html',
styleUrl: './project-subjectiv-unformal.component.css'
})
export class ProjectSubjectivUnformalComponent {
@Input() project : Project
}
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<tr> <tr>
<th scope="col" class="text-left">الرقم الذاتي</th> <th scope="col" class="text-left">الرقم الذاتي</th>
<th scope="col" class="text-left">الاسم والشهرة</th> <th scope="col" class="text-left">الاسم والشهرة</th>
<th scope="col" class="text-left">ساعات العمل<br> المسندة</th> <th scope="col" class="text-left">ساعات العمل<br> المسندة</th>
<th scope="col" class="text-left">ساعات العمل <br>المنفذة</th> <th scope="col" class="text-left">ساعات العمل <br>المنفذة</th>
<th scope="col" class="text-left">نسبة المساهمة</th> <th scope="col" class="text-left">نسبة المساهمة</th>
...@@ -18,7 +19,6 @@ ...@@ -18,7 +19,6 @@
<th scope="row">{{empTrack.employee.hiastId}}</th> <th scope="row">{{empTrack.employee.hiastId}}</th>
<td> {{empTrack.employee.personalInfo | fullname }} <td> {{empTrack.employee.personalInfo | fullname }}
</td> </td>
<td class="text-left">{{empTrack.employee.workInfo.workType}}</td>
<td class="text-left">{{empTrack.employeeWork.assignedWorkingHours}}</td> <td class="text-left">{{empTrack.employeeWork.assignedWorkingHours}}</td>
<td class="text-left">{{empTrack.employeeWork.workedHours}}</td> <td class="text-left">{{empTrack.employeeWork.workedHours}}</td>
<td class="text-left">{{empTrack.employeeWork.contributingRatio}}</td> <td class="text-left">{{empTrack.employeeWork.contributingRatio}}</td>
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
<td class="text-center"></td> <td class="text-center"></td>
<td class="text-center"></td> <td class="text-center"></td>
<td class="text-center"></td> <td class="text-center"></td>
<td class="text-center"></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
\ No newline at end of file
<p>step-trak-table works!</p> <table class="table table-borderless table-striped">
<thead>
<tr>
<th scope="col" class="text-left">#</th>
<th scope="col" class="text-left">اسم المرحلة</th>
<th scope="col" class="text-left">النسبة التثقيلية</th>
<th scope="col" class="text-left">نسبة التنفيذ السابقة</th>
<th scope="col" class="text-left">نسبة تنفيذ المتابعة</th>
<th scope="col" class="text-left">نسبة التنفيذ الكلية</th>
<th scope="col" class="text-left">طبيعة االتنفيذ</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let empTrack of stepsTrack ; index as i " >
<th scope="row">{{i +1 }}</th>
<td> {{empTrack.stepInfo.stepName}}
</td>
<td class="text-left">{{empTrack.stepWeight}}</td>
<td class="text-left">{{empTrack.oldExecutionRatio}}</td>
<td class="text-left">{{empTrack.trackExecutionRatio}}</td>
<td class="text-left">{{empTrack.oldExecutionRatio + empTrack.trackExecutionRatio}}</td>
<td class="text-left">{{empTrack.executionState}}</td>
</tr>
<tr *ngIf="stepsTrack.length==0" >
<th scope="row" class="text-center"></th>
<td class="text-center"> </td>
<td class="text-center"></td>
<td class="text-center"></td>
<td class="text-center"></td>
<td class="text-center"></td>
<td class="text-center"></td>
</tr>
</tbody>
</table>
\ No newline at end of file
import { Component } from '@angular/core'; import { Component, Input } from '@angular/core';
import { StepTrack } from '../../../../tracks/models/responses/steptrack';
@Component({ @Component({
selector: 'step-trak-table', selector: 'step-trak-table',
...@@ -7,4 +8,5 @@ import { Component } from '@angular/core'; ...@@ -7,4 +8,5 @@ import { Component } from '@angular/core';
}) })
export class StepTrakTableComponent { export class StepTrakTableComponent {
@Input() stepsTrack :StepTrack[]
} }
<table class="table table-borderless table-striped">
<thead>
<tr>
<th scope="col" class="text-left">م</th>
<th scope="col" class="text-left">الوضع الراهن</th>
<th scope="col" class="text-left">تاريخ المتابعة</th>
<th scope="col" class="text-left">الملاحظات</th>
<th scope="col" class="text-left">حالة المتابعة</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let track of tracks ; index as i " >
<th scope="row">{{i +1 }}</th>
<td class="text-left"> {{track.trackInfo.statusDescription}}</td>
<td class="text-left">{{track.trackInfo.trackDate |date}}</td>
<td class="text-left">{{track.notes}}</td>
<td class="text-left">{{track.trackInfo.isCompleted ? "مكتملة":"غير مكتملة"}}</td>
</tr>
<tr *ngIf="tracks.length==0" >
<th scope="row" class="text-center"></th>
<td class="text-center"></td>
<td class="text-center"></td>
<td class="text-center"> </td>
<td class="text-center"></td>
<td class="text-center"></td>
<td class="text-center"></td>
<td class="text-center"></td>
</tr>
</tbody>
</table>
\ No newline at end of file
import { Component, Input } from '@angular/core';
import { Track } from '../../../../tracks/models/responses/track';
@Component({
selector: 'tracks-table',
templateUrl: './track-row-item.component.html',
styleUrl: './track-row-item.component.css'
})
export class TrackRowItemComponent {
@Input() tracks : Track[]
}
<div class="container-fluid" *ngIf="project && employeesTrack && employeee ">
<div class="row justify-content-center">
<div class="col-12">
<div class="row align-items-center mb-4">
<div class="col">
<h2 class="h5 page-title">
<small class="text-muted text-uppercase">بطاقة متابعات مشارك </small>
</h2>
</div>
<div class="col-auto">
<button
type="button"
class="btn mr-1 btn-secondary m-1"
>
طباعة
</button>
</div>
</div>
<div class="card shadow" id="pdfContent">
<div class="card-body p-5">
<project-subjectiv-unformal
[project]="project"
>
</project-subjectiv-unformal>
<hr />
<p>
إن السيد <b>{{employeee.personalInfo | fullname}} </b> ذو الرقم الذاتي <b>{{employeee.hiastId}}</b> يعمل في المشروع والجدول المبين أدناه يبين متابعاته في المشروع
</p>
<div class="row text-secondary" *ngI="employeesTrack.length ==0">
لم تتم متابعته من قبل
</div>
<employee-trak-table
*ngIf="employeesTrack.length>0"
[employeeTrack]="employeesTrack" >
</employee-trak-table>
<hr>
<project-footer
[proposer]="project.proposer"
[executer]="project.executer"
[projectManager]="project.projectManager"
[teamLeader]="project.teamLeader"
>
</project-footer>
</div>
<!-- /.card-body -->
</div>
<!-- /.card -->
</div>
<!-- /.col-12 -->
</div>
</div>
\ No newline at end of file
//#region imports
import { Component } from '@angular/core';
import { Project } from '../../../projects/models/responses/project';
import { EmployeeTrack } from '../../../tracks/models/responses/employeeTrack';
import { ActivatedRoute, Router } from '@angular/router';
import { ToastrService } from 'ngx-toastr';
import { ProjectService } from '../../../projects/services/project.service';
import { EmployeesService } from '../../../employees/services/employees.service';
import { GetEmployeeTrackHistoryRequest } from '../../../employees/models/requests/getEmployeeTrackHistoryRequest';
import { Employee } from '../../../employees/models/responses/employee';
//#endregion imports
@Component({
selector: 'employee-work-track',
templateUrl: './employee-work-track.component.html',
styleUrl: './employee-work-track.component.css'
})
export class EmployeeWorkTrackComponent {
//#region propoerties
employeeId :number
projectId :number
project :Project
employeee : Employee
employeesTrack : EmployeeTrack[]
//#endregion propoerties
//#region Constructors
constructor(
private tostrService :ToastrService ,
private projectService : ProjectService,
private employeeService : EmployeesService,
private route : ActivatedRoute,
private router : Router
){}
//#endregion Constructors
//#region Oninit
ngOnInit(): void {
this.employeeId= Number(this.route.snapshot.paramMap.get('employeeId'))
this.projectId= Number(this.route.snapshot.paramMap.get('projectId'))
this.loadEmployeeTrack();
this.loadProject()
this.loadEmployee();
}
//#endregion Oninit
//#region Loaders
loadProject() {
this
.projectService
.getProjectById(this.projectId)
.subscribe({
next : (data)=>{
this.project=data;
}
});
}
loadEmployeeTrack() {
let request : GetEmployeeTrackHistoryRequest ={
employeeId: this.employeeId,
projectId:this.projectId,
pageNumber :null,
pageSize:null
}
this
.employeeService
.getEmployeeTrackHistory(request)
.subscribe({
next: (data)=>{
this.tostrService.success('تم تحميل التقرير بنجاح')
this.employeesTrack=data
}
});
}
loadEmployee(){
this
.employeeService
.getEmployeeById(this.employeeId)
.subscribe({
next:(data)=>{
this.employeee=data
},
error:(err)=>{
this.tostrService.error('لقد حدث خطاء ما')
}
});
}
//#endregion Loaders
}
...@@ -14,8 +14,15 @@ ...@@ -14,8 +14,15 @@
> >
طباعة طباعة
</button> </button>
<button <button
[routerLink]="['/reports',projectId,'steptracks',trackId]" [routerLink]="['/reports/definition',projectId]"
type="button" class="btn mr-1 btn-secondary m-1">
بطاقة التعريف
</button>
<button
[routerLink]="['/reports/step-tracks',projectId,'track',trackId]"
type="button" class="btn mr-1 btn-secondary m-1"> type="button" class="btn mr-1 btn-secondary m-1">
تقرير متابعة المراحل تقرير متابعة المراحل
</button> </button>
...@@ -40,9 +47,19 @@ ...@@ -40,9 +47,19 @@
<p> <p>
<strong> <strong>
قائمة متابعة العاملين لعملية المتابعة التي حدثت بتاريخ {{track.trackInfo.trackDate}} قائمة متابعة العاملين لعملية المتابعة التي حدثت بتاريخ {{track.trackInfo.trackDate | date}}
</strong> </strong>
</p> </p>
<p>
<strong>الوضع الراهن : </strong>{{track.trackInfo.statusDescription}}
<br>
<strong>وضع عملية المتابعة : </strong>{{track.trackInfo.isCompleted ? "مكتملة" : "غير مكتملة"}}
<br>
<strong>الملاحظات : </strong>{{track.notes}}
<br>
</p>
<employee-trak-table <employee-trak-table
[employeeTrack]="employeesTrack" > [employeeTrack]="employeesTrack" >
......
//#region Imports
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { ToastrService } from 'ngx-toastr'; import { ToastrService } from 'ngx-toastr';
import { ProjectService } from '../../../projects/services/project.service'; import { ProjectService } from '../../../projects/services/project.service';
...@@ -7,6 +8,7 @@ import { EmployeeTrack } from '../../../tracks/models/responses/employeeTrack'; ...@@ -7,6 +8,7 @@ import { EmployeeTrack } from '../../../tracks/models/responses/employeeTrack';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import { Project } from '../../../projects/models/responses/project'; import { Project } from '../../../projects/models/responses/project';
import { data } from 'jquery'; import { data } from 'jquery';
//#endregion Imports
@Component({ @Component({
selector: 'employees-track-report', selector: 'employees-track-report',
...@@ -15,13 +17,18 @@ import { data } from 'jquery'; ...@@ -15,13 +17,18 @@ import { data } from 'jquery';
}) })
export class EmployeesTrackReportComponent implements OnInit{ export class EmployeesTrackReportComponent implements OnInit{
//#region Propoerties
trackId :number trackId :number
projectId :number projectId :number
project :Project project :Project
track : Track track : Track
employeesTrack : EmployeeTrack[] employeesTrack : EmployeeTrack[]
//#endregion Propoerties
//#region Constructors
constructor( constructor(
private tostrService :ToastrService , private tostrService :ToastrService ,
...@@ -32,6 +39,12 @@ export class EmployeesTrackReportComponent implements OnInit{ ...@@ -32,6 +39,12 @@ export class EmployeesTrackReportComponent implements OnInit{
){} ){}
//#endregion Constructors
//#region Oninit
ngOnInit(): void { ngOnInit(): void {
this.trackId= Number(this.route.snapshot.paramMap.get('id')) this.trackId= Number(this.route.snapshot.paramMap.get('id'))
...@@ -42,7 +55,10 @@ export class EmployeesTrackReportComponent implements OnInit{ ...@@ -42,7 +55,10 @@ export class EmployeesTrackReportComponent implements OnInit{
this.loadProject() this.loadProject()
} }
//#endregion Oninit
//#region Loaders
loadProject() { loadProject() {
this this
.projectService .projectService
...@@ -67,6 +83,7 @@ export class EmployeesTrackReportComponent implements OnInit{ ...@@ -67,6 +83,7 @@ export class EmployeesTrackReportComponent implements OnInit{
} }
}); });
} }
loadTracks() { loadTracks() {
this this
.trackService .trackService
...@@ -78,6 +95,6 @@ export class EmployeesTrackReportComponent implements OnInit{ ...@@ -78,6 +95,6 @@ export class EmployeesTrackReportComponent implements OnInit{
}); });
} }
//#endregion Loaders
} }
...@@ -10,16 +10,12 @@ ...@@ -10,16 +10,12 @@
<div class="col-auto"> <div class="col-auto">
<button <button
type="button" type="button"
(click)="downloadAsPdf()"
class="btn mr-1 btn-secondary m-1" class="btn mr-1 btn-secondary m-1"
> >
طباعة طباعة
</button> </button>
<button type="button" class="btn mr-1 btn-secondary m-1">
تقرير متابعة المراحل
</button>
<button type="button" class="btn mr-1 btn-secondary m-1">
تقرير انشغالية
</button>
<button <button
type="button" type="button"
[routerLink]="['/reports/timeline/', project.id]" [routerLink]="['/reports/timeline/', project.id]"
......
//#region Imports
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Project } from '../../../projects/models/responses/project'; import { Project } from '../../../projects/models/responses/project';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
...@@ -6,6 +7,9 @@ import { ProjectService } from '../../../projects/services/project.service'; ...@@ -6,6 +7,9 @@ import { ProjectService } from '../../../projects/services/project.service';
import { ProjectCompletion } from '../../../projects/models/responses/ProjectCompletion'; import { ProjectCompletion } from '../../../projects/models/responses/ProjectCompletion';
import { EmployeeContribution } from '../../../projects/models/responses/employeeContribution'; import { EmployeeContribution } from '../../../projects/models/responses/employeeContribution';
import { Track } from '../../../tracks/models/responses/track'; import { Track } from '../../../tracks/models/responses/track';
import { PdfDownloaderService } from '../../../core/services/pdfDownloader/pdf-downloader.service';
//#endregion Imports
@Component({ @Component({
selector: 'project-completion', selector: 'project-completion',
...@@ -13,22 +17,33 @@ import { Track } from '../../../tracks/models/responses/track'; ...@@ -13,22 +17,33 @@ import { Track } from '../../../tracks/models/responses/track';
styleUrl: './project-completion.component.css' styleUrl: './project-completion.component.css'
}) })
export class ProjectCompletionComponent implements OnInit{ export class ProjectCompletionComponent implements OnInit{
//#region Propoerrties
projectId : number projectId : number
project :Project project :Project
completion : ProjectCompletion completion : ProjectCompletion
contributers : EmployeeContribution[] contributers : EmployeeContribution[]
tracks : Track[] tracks : Track[]
iscalculated :boolean =false iscalculated :boolean =false
//#endregion Propoerrties
//#region Constructors
constructor ( constructor (
private route :ActivatedRoute , private route :ActivatedRoute ,
private projectService : ProjectService, private projectService : ProjectService,
private router :Router, private router :Router,
private pdfDownloader : PdfDownloaderService,
private toastr :ToastrService private toastr :ToastrService
){} ){}
//#endregion Constructors
//#region Oninit
ngOnInit(): void { ngOnInit(): void {
this.projectId= Number(this.route.snapshot.paramMap.get('id')) this.projectId= Number(this.route.snapshot.paramMap.get('id'))
...@@ -49,7 +64,10 @@ export class ProjectCompletionComponent implements OnInit{ ...@@ -49,7 +64,10 @@ export class ProjectCompletionComponent implements OnInit{
} }
}); });
} }
//#endregion Oninit
//#region Loaders
loadContributions() { loadContributions() {
this this
.projectService .projectService
...@@ -77,5 +95,9 @@ export class ProjectCompletionComponent implements OnInit{ ...@@ -77,5 +95,9 @@ export class ProjectCompletionComponent implements OnInit{
}); });
} }
public downloadAsPdf(): void {
this.pdfDownloader.downloadAsPdf('pdfContent');
}
//#endregion Loaders
} }
...@@ -17,13 +17,7 @@ ...@@ -17,13 +17,7 @@
</button> </button>
<button *ngIf="project.currentState.toLocaleLowerCase()=='completed'" [routerLink]="['/reports/completion',project.id]" type="button" class="btn mr-1 btn-secondary m-1"> <button *ngIf="project.currentState.toLocaleLowerCase()=='completed'" [routerLink]="['/reports/completion',project.id]" type="button" class="btn mr-1 btn-secondary m-1">
تقرير انجاز </button> تقرير انجاز </button>
<button type="button" class="btn mr-1 btn-secondary m-1">
تقرير متابعة المراحل
</button>
<button type="button" class="btn mr-1 btn-secondary m-1">
تقرير انشغالية
</button>
<button <button
type="button" type="button"
[routerLink]="['/reports/timeline/', project.id]" [routerLink]="['/reports/timeline/', project.id]"
......
//#region Imports
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { ReportsService } from '../../services/reports.service'; import { ReportsService } from '../../services/reports.service';
import { ActivatedRoute } from '@angular/router'; import { ActivatedRoute } from '@angular/router';
import { Project } from '../../../projects/models/responses/project'; import { Project } from '../../../projects/models/responses/project';
import { PdfDownloaderService } from '../../../core/services/pdfDownloader/pdf-downloader.service'; import { PdfDownloaderService } from '../../../core/services/pdfDownloader/pdf-downloader.service';
//#endregion Imports
@Component({ @Component({
selector: 'project-definition', selector: 'project-definition',
...@@ -10,6 +14,7 @@ import { PdfDownloaderService } from '../../../core/services/pdfDownloader/pdf-d ...@@ -10,6 +14,7 @@ import { PdfDownloaderService } from '../../../core/services/pdfDownloader/pdf-d
styleUrl: './project-definition.component.css' styleUrl: './project-definition.component.css'
}) })
export class ProjectDefinitionComponent implements OnInit{ export class ProjectDefinitionComponent implements OnInit{
project : Project project : Project
constructor( constructor(
...@@ -21,15 +26,18 @@ export class ProjectDefinitionComponent implements OnInit{ ...@@ -21,15 +26,18 @@ export class ProjectDefinitionComponent implements OnInit{
ngOnInit(): void { ngOnInit(): void {
const id = Number(this.route.snapshot.paramMap.get('id')); const id = Number(this.route.snapshot.paramMap.get('id'));
this.reportsService.getProjectById(id).subscribe({
this
.reportsService
.getProjectById(id)
.subscribe({
next :(data) => { next :(data) => {
this.project = data; this.project = data;
},
},
error : (err)=>{ console.log(err)}
}); error : (err)=>{ console.log(err)}
});
} }
......
<p>project-track-history works!</p> <div class="container-fluid" *ngIf="project && tracks ">
<div class="row justify-content-center">
<div class="col-12">
<div class="row align-items-center mb-4">
<div class="col">
<h2 class="h5 page-title">
<small class="text-muted text-uppercase">بطاقة متابعات مشروع</small>
</h2>
</div>
<div class="col-auto">
<button
type="button"
class="btn mr-1 btn-secondary m-1"
>
طباعة
</button>
<button *ngIf="project.currentState.toLowerCase()=='completed'" type="button" class="btn mr-1 btn-secondary m-1">
تقرير انجاز
</button>
<button
type="button"
[routerLink]="['/reports/timeline/', project.id]"
class="btn mr-1 btn-secondary m-1"
>
تقرير خطة زمنية
</button>
</div>
</div>
<div class="card shadow" id="pdfContent">
<div class="card-body p-5">
<project-header [projectInfo]="project.projectInfo"></project-header>
<project-subjective [project]="project"> </project-subjective>
<hr />
<p>
<strong>
قائمة عمليات متابعة المشروع
</strong>
</p>
<tracks-table
[tracks]="tracks"
>
</tracks-table>
<hr>
<project-footer
[proposer]="project.proposer"
[executer]="project.executer"
[projectManager]="project.projectManager"
[teamLeader]="project.teamLeader"
>
</project-footer>
</div>
<!-- /.card-body -->
</div>
<!-- /.card -->
</div>
<!-- /.col-12 -->
</div>
</div>
\ No newline at end of file
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { Track } from '../../../tracks/models/responses/track';
import { Project } from '../../../projects/models/responses/project';
import { ProjectService } from '../../../projects/services/project.service';
import { ActivatedRoute, Router } from '@angular/router';
import { ToastrService } from 'ngx-toastr';
import { TrackService } from '../../../tracks/services/track.service';
import { GetTracksByProjectRequest } from '../../../tracks/models/requests/GetTracksByProjectRequest';
@Component({ @Component({
selector: 'project-track-history', selector: 'project-track-history',
...@@ -6,5 +13,62 @@ import { Component } from '@angular/core'; ...@@ -6,5 +13,62 @@ import { Component } from '@angular/core';
styleUrl: './project-track-history.component.css' styleUrl: './project-track-history.component.css'
}) })
export class ProjectTrackHistoryComponent { export class ProjectTrackHistoryComponent {
tracks :Track []
project : Project
projectId : number
constructor(
private tostrService :ToastrService ,
private projectService : ProjectService,
private trackService : TrackService,
private route : ActivatedRoute,
private router : Router
){}
ngOnInit(): void {
this.projectId= Number(this.route.snapshot.paramMap.get('projectId'))
this.loadTracks();
this.loadProject()
}
loadProject() {
this
.projectService
.getProjectById(this.projectId)
.subscribe({
next : (data)=>{
this.project=data;
}
});
}
loadTracks() {
let request : GetTracksByProjectRequest ={
projectId : this.projectId ,
pageNumber : null ,
pageSize :null
}
this
.trackService
.getTrackByProjectId(request)
.subscribe({
next: (data)=>{
this.tostrService.success('تم تحميل التقرير بنجاح')
this.tracks=data
}
});
}
} }
<p>steps-track-report works!</p> <div class="container-fluid" *ngIf="project && track && stepsTrack ">
<div class="row justify-content-center">
<div class="col-12">
<div class="row align-items-center mb-4">
<div class="col">
<h2 class="h5 page-title">
<small class="text-muted text-uppercase">بطاقة متابعة مراحل</small>
</h2>
</div>
<div class="col-auto">
<button
type="button"
class="btn mr-1 btn-secondary m-1"
>
طباعة
</button>
<button
[routerLink]="['/reports',projectId,'steptracks',trackId]"
type="button" class="btn mr-1 btn-secondary m-1">
تقرير متابعة العمالين
</button>
<button *ngIf="project.currentState.toLowerCase()=='completed'" type="button" class="btn mr-1 btn-secondary m-1">
تقرير انجاز
</button>
<button
type="button"
[routerLink]="['/reports/timeline/', project.id]"
class="btn mr-1 btn-secondary m-1"
>
تقرير خطة زمنية
</button>
</div>
</div>
<div class="card shadow" id="pdfContent">
<div class="card-body p-5">
<project-header [projectInfo]="project.projectInfo"></project-header>
<project-subjective [project]="project"> </project-subjective>
<hr />
<p>
<strong>
قائمة متابعة المراحل لعملية المتابعة التي حدثت بتاريخ {{track.trackInfo.trackDate | date}}
</strong>
</p>
<p>
<strong>الوضع الراهن : </strong>{{track.trackInfo.statusDescription}}
<br>
<strong>وضع عملية المتابعة : </strong>{{track.trackInfo.isCompleted ? "مكتملة" : "غير مكتملة"}}
<br>
<strong>الملاحظات : </strong>{{track.notes}}
<br>
</p>
<step-trak-table
[stepsTrack]="stepsTrack">
</step-trak-table>
<hr>
<project-footer
[proposer]="project.proposer"
[executer]="project.executer"
[projectManager]="project.projectManager"
[teamLeader]="project.teamLeader"
>
</project-footer>
</div>
<!-- /.card-body -->
</div>
<!-- /.card -->
</div>
<!-- /.col-12 -->
</div>
</div>
\ No newline at end of file
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { Project } from '../../../projects/models/responses/project';
import { ActivatedRoute, Router } from '@angular/router';
import { ToastrService } from 'ngx-toastr';
import { ProjectService } from '../../../projects/services/project.service';
import { StepTrack } from '../../../tracks/models/responses/steptrack';
import { Track } from '../../../tracks/models/responses/track';
import { TrackService } from '../../../tracks/services/track.service';
@Component({ @Component({
selector: 'steps-track-report', selector: 'steps-track-report',
...@@ -7,4 +14,70 @@ import { Component } from '@angular/core'; ...@@ -7,4 +14,70 @@ import { Component } from '@angular/core';
}) })
export class StepsTrackReportComponent { export class StepsTrackReportComponent {
trackId :number
projectId :number
project :Project
track : Track
stepsTrack : StepTrack[]
constructor(
private tostrService :ToastrService ,
private projectService : ProjectService,
private trackService : TrackService,
private route : ActivatedRoute,
private router : Router
){}
ngOnInit(): void {
this.trackId= Number(this.route.snapshot.paramMap.get('id'))
this.projectId= Number(this.route.snapshot.paramMap.get('projectId'))
this.loadTracks();
this.loadStepTrack();
this.loadProject()
}
loadProject() {
this
.projectService
.getProjectById(this.projectId)
.subscribe({
next : (data)=>{
this.project=data;
}
});
}
loadStepTrack() {
this
.trackService
.getStepsTrackById(this.trackId)
.subscribe({
next: (data)=>{
this.tostrService.success('تم تحميل التقرير بنجاح')
this.stepsTrack=data
}
});
}
loadTracks() {
this
.trackService
.getByTrackById(this.trackId)
.subscribe({
next : (data)=>{
this.track = data;
}
});
}
} }
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { ReportsRoutingModule } from './reports-routing.module'; import { ReportsRoutingModule } from './routing/reports-routing.module';
import { ProjectDefinitionComponent } from './pages/project-definition/project-definition.component'; import { ProjectDefinitionComponent } from './pages/project-definition/project-definition.component';
import { ProjectCompletionComponent } from './pages/project-completion/project-completion.component'; import { ProjectCompletionComponent } from './pages/project-completion/project-completion.component';
import { EmployeesTrackReportComponent } from './pages/employees-track-report/employees-track-report.component'; import { EmployeesTrackReportComponent } from './pages/employees-track-report/employees-track-report.component';
...@@ -19,6 +19,9 @@ import { ProjectSubjectiveComponent } from './componenets/project-report-layout/ ...@@ -19,6 +19,9 @@ import { ProjectSubjectiveComponent } from './componenets/project-report-layout/
import { EmployeeTrakTableComponent } from './componenets/tracks-components/employee-trak-table/employee-trak-table.component'; import { EmployeeTrakTableComponent } from './componenets/tracks-components/employee-trak-table/employee-trak-table.component';
import { StepTrakTableComponent } from './componenets/tracks-components/step-trak-table/step-trak-table.component'; import { StepTrakTableComponent } from './componenets/tracks-components/step-trak-table/step-trak-table.component';
import { EmployeeContributionTableComponent } from './componenets/employee-contribution-table/employee-contribution-table.component'; import { EmployeeContributionTableComponent } from './componenets/employee-contribution-table/employee-contribution-table.component';
import { TrackRowItemComponent } from './componenets/tracks-components/track-row-item/track-row-item.component';
import { EmployeeWorkTrackComponent } from './pages/employee-work-track/employee-work-track.component';
import { ProjectSubjectivUnformalComponent } from './componenets/project-report-layout/project-subjectiv-unformal/project-subjectiv-unformal.component';
@NgModule({ @NgModule({
...@@ -38,7 +41,10 @@ import { EmployeeContributionTableComponent } from './componenets/employee-contr ...@@ -38,7 +41,10 @@ import { EmployeeContributionTableComponent } from './componenets/employee-contr
ProjectSubjectiveComponent, ProjectSubjectiveComponent,
EmployeeTrakTableComponent, EmployeeTrakTableComponent,
StepTrakTableComponent, StepTrakTableComponent,
EmployeeContributionTableComponent EmployeeContributionTableComponent,
TrackRowItemComponent,
EmployeeWorkTrackComponent,
ProjectSubjectivUnformalComponent
], ],
imports: [ imports: [
CommonModule, CommonModule,
......
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
import { ProjectDefinitionComponent } from './pages/project-definition/project-definition.component'; import { EmployeeTrackHistoryComponent } from '../../tracks/pages/employee-track-history/employee-track-history.component';
import { ProjectTimeLineComponent } from './pages/project-time-line/project-time-line.component'; import { EmployeesTrackReportComponent } from '../pages/employees-track-report/employees-track-report.component';
import { ProjectCompletionComponent } from './pages/project-completion/project-completion.component'; import { ProjectCompletionComponent } from '../pages/project-completion/project-completion.component';
import { EmployeesTrackReportComponent } from './pages/employees-track-report/employees-track-report.component'; import { ProjectDefinitionComponent } from '../pages/project-definition/project-definition.component';
import { StepsTrackReportComponent } from './pages/steps-track-report/steps-track-report.component'; import { ProjectTimeLineComponent } from '../pages/project-time-line/project-time-line.component';
import { ProjectTrackHistoryComponent } from '../pages/project-track-history/project-track-history.component';
import { StepsTrackReportComponent } from '../pages/steps-track-report/steps-track-report.component';
import { EmployeeWorkTrackComponent } from '../pages/employee-work-track/employee-work-track.component';
const routes: Routes = [ const routes: Routes = [
{path: 'definition/:id',component:ProjectDefinitionComponent}, {path: 'definition/:id',component:ProjectDefinitionComponent},
{path: 'timeline/:id',component:ProjectTimeLineComponent}, {path: 'timeline/:id',component:ProjectTimeLineComponent},
{path: 'completion/:id',component:ProjectCompletionComponent}, {path: 'completion/:id',component:ProjectCompletionComponent},
{path: 'employees-tracks/:projectId/track/:id',component:EmployeesTrackReportComponent} , {path: 'employees-tracks/:projectId/track/:id',component:EmployeesTrackReportComponent} ,
{path: 'steps-tracks/:projectId/track/:id',component:StepsTrackReportComponent} {path: 'steps-tracks/:projectId/track/:id',component:StepsTrackReportComponent},
{path: 'history/:projectId',component:ProjectTrackHistoryComponent} ,
{path: 'contributions/:projectId/employee/:employeeId',component:EmployeeWorkTrackComponent}
]; ];
......
...@@ -10,5 +10,5 @@ export class StepTrack { ...@@ -10,5 +10,5 @@ export class StepTrack {
executionState :string executionState :string
trackExecutionRatio :number trackExecutionRatio :number
oldExecutionRatio : number oldExecutionRatio : number
stepWeight : number
} }
\ No newline at end of file
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
<h4 class="h4 mb-0 page-title"> قائمة عمليات المتابعة للسيد : {{employee.personalInfo | fullname}} <br>{{projectInfo.name}} </h4> <h4 class="h4 mb-0 page-title"> قائمة عمليات المتابعة للسيد : {{employee.personalInfo | fullname}} <br>{{projectInfo.name}} </h4>
</div> </div>
<div class="col-auto"> <div class="col-auto">
<button type="button" class="btn btn-secondary"><span class="fe fe-file-plus fe-12 mr-2"></span>تقرير تاريخ متابعة </button> <button type="button"
[routerLink]="['/reports/contributions',projectId,'employee',employeeId]" class="btn btn-secondary"><span class="fe fe-file-plus fe-12 mr-2"></span>تقرير تاريخ متابعة </button>
</div> </div>
</div> </div>
<hr> <hr>
......
...@@ -191,10 +191,11 @@ export class TrackDetailsComponent implements OnInit { ...@@ -191,10 +191,11 @@ export class TrackDetailsComponent implements OnInit {
stepName :'', stepName :'',
NumberOfWorker:0, NumberOfWorker:0,
description:'', description:'',
duration:0 duration:0,
},
stepId: s?.id??0
},
stepId: s?.id??0,
stepWeight:s?.weight ??0
} }
......
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
import { TracksListComponent } from './pages/tracks-list/tracks-list.component'; import { EmployeeTrackHistoryComponent } from '../pages/employee-track-history/employee-track-history.component';
import { TrackDetailsComponent } from './pages/track-details/track-details.component'; import { ProjectTrackHistoryComponent } from '../pages/project-track-history/project-track-history.component';
import { StepTrackHistoryComponent } from './pages/step-track-history/step-track-history.component'; import { StepTrackHistoryComponent } from '../pages/step-track-history/step-track-history.component';
import { EmployeeTrackHistoryComponent } from './pages/employee-track-history/employee-track-history.component'; import { TrackDetailsComponent } from '../pages/track-details/track-details.component';
import { TracksUncompleteComponent } from './pages/tracks-uncomplete/tracks-uncomplete.component'; import { TracksListComponent } from '../pages/tracks-list/tracks-list.component';
import { ProjectTrackHistoryComponent } from './pages/project-track-history/project-track-history.component'; import { TracksUncompleteComponent } from '../pages/tracks-uncomplete/tracks-uncomplete.component';
const routes: Routes = [ const routes: Routes = [
{path:'project/:id',component:ProjectTrackHistoryComponent}, {path:'project/:id',component:ProjectTrackHistoryComponent},
......
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