Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
PSManagementUI
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hasan.bahjat
PSManagementUI
Commits
ae05a203
Commit
ae05a203
authored
Sep 01, 2024
by
hasan khaddour
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
تعديل
parent
ea758d92
Changes
18
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
329 additions
and
127 deletions
+329
-127
info-controll.component.html
...oject-controll/info-controll/info-controll.component.html
+12
-5
info-controll.component.ts
...project-controll/info-controll/info-controll.component.ts
+11
-1
header.component.html
src/app/shared/sharedLayout/header/header.component.html
+2
-2
header.component.ts
src/app/shared/sharedLayout/header/header.component.ts
+2
-0
sidebar.component.html
src/app/shared/sharedLayout/sidebar/sidebar.component.html
+12
-12
add-employee-track-modal.component.html
...loyee-track-modal/add-employee-track-modal.component.html
+14
-17
add-employee-track-modal.component.ts
...mployee-track-modal/add-employee-track-modal.component.ts
+24
-11
add-step-track-modal.component.html
.../add-step-track-modal/add-step-track-modal.component.html
+8
-10
add-step-track-modal.component.ts
...ls/add-step-track-modal/add-step-track-modal.component.ts
+27
-16
update-step-track-modal.component.html
...e-step-track-modal/update-step-track-modal.component.html
+30
-1
update-step-track-modal.component.ts
...ate-step-track-modal/update-step-track-modal.component.ts
+78
-1
step-track.component.html
...pp/tracks/components/step-track/step-track.component.html
+1
-1
step-track.component.ts
src/app/tracks/components/step-track/step-track.component.ts
+7
-1
updateStepTrack.ts
src/app/tracks/models/requests/updateStepTrack.ts
+1
-1
project-track-history.component.html
...roject-track-history/project-track-history.component.html
+2
-2
project-track-history.component.ts
.../project-track-history/project-track-history.component.ts
+5
-7
track-details.component.html
...p/tracks/pages/track-details/track-details.component.html
+8
-8
track-details.component.ts
...app/tracks/pages/track-details/track-details.component.ts
+85
-31
No files found.
src/app/projects/components/project-controll/info-controll/info-controll.component.html
View file @
ae05a203
...
...
@@ -29,7 +29,7 @@
<div
class=
"d-flex align-items-center"
>
<div
class=
"text-center"
>
<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>
...
...
@@ -66,11 +66,15 @@
</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-body file-list"
>
<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>
</div>
<div
class=
"flex-fill ml-4 fname"
>
...
...
@@ -81,11 +85,14 @@
</div>
<!-- .card -->
</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-body file-list"
>
<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>
</div>
<div
class=
"flex-fill ml-4 fname"
>
...
...
src/app/projects/components/project-controll/info-controll/info-controll.component.ts
View file @
ae05a203
import
{
Component
,
EventEmitter
,
Input
,
Output
}
from
'@angular/core'
;
import
{
Project
}
from
'../../../models/responses/project'
;
import
{
UserService
}
from
'../../../../core/services/authentication/user.service'
;
import
{
ROLES
}
from
'../../../../core/constants/roles'
;
@
Component
({
selector
:
'info-controll'
,
...
...
@@ -7,10 +9,14 @@ import { Project } from '../../../models/responses/project';
styleUrl
:
'./info-controll.component.css'
})
export
class
InfoControllComponent
{
@
Input
()
project
:
Project
@
Output
()
changeLeader
=
new
EventEmitter
<
void
>
()
@
Output
()
changeManager
=
new
EventEmitter
<
void
>
()
constructor
(
private
userService
:
UserService
){}
onChangeManger
(){
this
.
changeManager
.
emit
();
...
...
@@ -18,5 +24,9 @@ export class InfoControllComponent {
onChangeLeader
(){
this
.
changeLeader
.
emit
();
}
canSee
():
boolean
{
return
this
.
userService
.
hasRole
(
ROLES
.
SCIENTIFIC_DEPUTY
)
}
}
src/app/shared/sharedLayout/header/header.component.html
View file @
ae05a203
...
...
@@ -3,7 +3,7 @@
<ul
class=
"d-flex align-items-center"
>
<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>
</a>
</li>
<!-- End Search Icon-->
...
...
@@ -61,7 +61,7 @@
<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=
""
>
</a>
...
...
src/app/shared/sharedLayout/header/header.component.ts
View file @
ae05a203
...
...
@@ -5,6 +5,7 @@ import { Router, RouterLink } from '@angular/router';
import
{
UserService
}
from
'../../../core/services/authentication/user.service'
;
import
{
ToastrService
}
from
'ngx-toastr'
;
import
{
AuthenticationService
}
from
'../../../core/services/authentication/authentication.service'
;
import
{
ConfigurationService
}
from
'../../../core/services/configuration/configuration.service'
;
@
Component
({
selector
:
'app-header'
,
...
...
@@ -16,6 +17,7 @@ export class HeaderComponent implements OnInit {
@
Input
()
isToggled
:
Boolean
;
appName
=
ConfigurationService
.
AppName
fullName
:
string
email
:
string
constructor
(
...
...
src/app/shared/sharedLayout/sidebar/sidebar.component.html
View file @
ae05a203
...
...
@@ -57,7 +57,7 @@
<li
class=
"nav-item"
*
ngIf=
"hasRole(alroles.SCIENTIFIC_DEPUTY)"
>
<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>
</li>
<li
class=
"nav-item"
*
ngIf=
"hasRole(alroles.SCIENTIFIC_DEPUTY)"
>
...
...
@@ -66,7 +66,7 @@
[
queryParams
]="{
listType:
'
all
'
}"
class=
"nav-link collapsed"
>
<i
class=
"
bi bi-circle
"
></i><span>
استعراض المشاريع
</span>
<i
class=
"
fe fe-clipboard
"
></i><span>
استعراض المشاريع
</span>
</a>
</li>
<li
class=
"nav-item"
>
...
...
@@ -75,7 +75,7 @@
[
queryParams
]="{
listType:
'
managed
'
}"
class=
"nav-link collapsed"
>
<i
class=
"
bi bi-circl
e"
></i><span>
المشاريع التي أديرها
</span>
<i
class=
"
fe fe-briefcas
e"
></i><span>
المشاريع التي أديرها
</span>
</a>
</li>
<li
class=
"nav-item"
>
...
...
@@ -84,7 +84,7 @@
[
queryParams
]="{
listType:
'
leaded
'
}"
class=
"nav-link collapsed"
>
<i
class=
"
bi bi-circl
e"
></i><span>
المشاريع التي أرأسها
</span>
<i
class=
"
fe fe-briefcas
e"
></i><span>
المشاريع التي أرأسها
</span>
</a>
</li>
...
...
@@ -92,30 +92,30 @@
<li
[
routerLink
]="['/
employees
/
participates
',
id
]"
class=
"nav-item"
>
<a
class=
"nav-link collapsed"
>
<i
class=
"
bi bi-layout-text-window-reverse
"
></i
><span>
استعراض مساهماتي
</span>
<i
class=
"bi bi-chevron-down ms-auto"
></i>
<i
class=
"
fe fe-folder
"
></i
><span>
استعراض مساهماتي
</span>
</a>
</li>
<li
class=
"nav-item"
>
<a
class=
"nav-link collapsed"
[
routerLink
]="['/
employees
/
profile
']"
>
<i
class=
"
bi bi-layout-text-window-reverse
"
></i><span>
ملفي الشخصي
</span
><i
class=
"bi bi-chevron-down ms-auto"
></i
>
<i
class=
"
fe fe-compass
"
></i><span>
ملفي الشخصي
</span
>
</a>
</li>
<li
class=
"nav-heading"
>
متفرقات
</li>
<li
class=
"nav-item"
>
<a
[
routerLink
]="['/
Project-FAQ
']"
class=
"nav-link collapsed"
>
<i
class=
"
bi bi-layout-text-window-reverse
"
></i
><span>
ملامح المشروع
</span>
<i
class=
"bi bi-chevron-down ms-auto"
></i>
<i
class=
"
fe fe-target
"
></i
><span>
ملامح المشروع
</span>
</a>
</li>
<li
class=
"nav-item"
>
<a
[
routerLink
]="['/
Help
']"
class=
"nav-link collapsed"
>
<i
class=
"
bi bi-layout-text-window-reverse
"
></i><span>
مساعدة
</span
>
<i
class=
"bi bi-chevron-down ms-auto"
></i>
<i
class=
"
fe fe-codepen
"
></i><span>
مساعدة
</span
>
</a>
</li>
</ul>
...
...
src/app/tracks/components/modals/add-employee-track-modal/add-employee-track-modal.component.html
View file @
ae05a203
<div
class=
"modal modal-md fade"
id=
"addEmployeeTrackModal"
tabindex=
"-1"
aria-labelledby=
"addEmployeeTrackModalLable"
aria-hidden=
"true"
>
<div
class=
"modal-dialog"
>
<div
class=
"modal-content"
>
<div
class=
"modal-header"
>
<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
class=
"modal-body"
>
<form
[
formGroup
]="
stepTrackForm
"
(
ngSubmit
)="
onSubmit
()"
>
...
...
@@ -21,12 +18,6 @@
</div>
<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"
>
<label
for=
"assignedWork"
class=
"form-label"
>
العمل المسند
</label>
...
...
@@ -38,6 +29,15 @@
<input
id=
"performedWork"
formControlName=
"performedWork"
class=
"form-control"
>
</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"
>
<label
for=
"assignedWorkEnd"
class=
"form-label"
>
تاريخ تنفيذ العمل المسند
</label>
<input
type=
"date"
id=
"assignedWorkEnd"
formControlName=
"assignedWorkEnd"
class=
"form-control"
>
...
...
@@ -61,11 +61,8 @@
</div>
<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>
</div>
</div>
</div>
</div>
\ No newline at end of file
src/app/tracks/components/modals/add-employee-track-modal/add-employee-track-modal.component.ts
View file @
ae05a203
...
...
@@ -11,7 +11,8 @@ import { ProjectService } from '../../../../projects/services/project.service';
import
{
EmployeeParticipate
}
from
'../../../../employees/models/responses/employeeParticipate'
;
import
{
EmployeeTrack
}
from
'../../../models/responses/employeeTrack'
;
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
({
selector
:
'add-employee-track-modal'
,
...
...
@@ -19,7 +20,7 @@ import { NgbTypeaheadSelectItemEvent } from '@ng-bootstrap/ng-bootstrap';
styleUrl
:
'./add-employee-track-modal.component.css'
})
export
class
AddEmployeeTrackModalComponent
{
@
Input
()
isVisible
=
false
;
participants
:
EmployeeParticipate
[]
=
[];
// All steps available for the project
@
Input
()
trackedParticipants
:
EmployeeTrack
[]
=
[];
// Steps that are already tracked
@
Input
()
projectId
:
number
...
...
@@ -30,8 +31,11 @@ export class AddEmployeeTrackModalComponent {
filteredParticipants
:
Employee
[]
=
[];
constructor
(
private
fb
:
FormBuilder
,
private
projectService
:
ProjectService
constructor
(
private
fb
:
FormBuilder
,
private
projectService
:
ProjectService
,
private
activeModal
:
NgbActiveModal
,
private
trackService
:
TrackService
)
{
this
.
stepTrackForm
=
this
.
fb
.
group
({
id
:
[],
...
...
@@ -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 {
}
closeModal
():
void
{
const
modal
=
document
.
getElementById
(
'addEmployeeTrackModal'
);
if
(
modal
)
{
const
bootstrapModal
=
new
Modal
(
modal
);
bootstrapModal
.
hide
();
}
this
.
activeModal
.
close
();
}
...
...
src/app/tracks/components/modals/add-step-track-modal/add-step-track-modal.component.html
View file @
ae05a203
<div
class=
"modal fade"
id=
"addStepTrackModal"
tabindex=
"-1"
aria-labelledby=
"addStepTrackModalLabel"
aria-hidden=
"true"
>
<div
class=
"modal-dialog"
>
<div
class=
"modal-content"
>
<div
class=
"modal-header"
>
<div
class=
"modal-header"
>
<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
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"
[
ngbTypeahead
]="
search
"
(
selectItem
)="
onStepSelected
($
event
.
item
)"
>
<input
type=
"text"
id=
"stepName"
formControlName=
"stepName"
class=
"form-control"
[
ngbTypeahead
]="
search
"
(
selectItem
)="
onStepSelected
($
event
.
item
)"
>
</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"
>
...
...
@@ -23,10 +23,8 @@
<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
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>
</div>
</div>
</div>
</div>
\ No newline at end of file
src/app/tracks/components/modals/add-step-track-modal/add-step-track-modal.component.ts
View file @
ae05a203
...
...
@@ -18,6 +18,7 @@ import { StepService } from '../../../../projects/services/step.service';
styleUrl
:
'./add-step-track-modal.component.css'
})
export
class
AddStepTrackModalComponent
{
@
Input
()
isVisible
=
false
;
steps
:
Step
[]
=
[];
// All steps available for the project
@
Input
()
trackedSteps
:
Step
[]
=
[];
// Steps that are already tracked
...
...
@@ -30,13 +31,16 @@ export class AddStepTrackModalComponent {
constructor
(
private
fb
:
FormBuilder
,
private
stepService
:
StepService
,
private
toastr
:
ToastrService
private
trackService
:
TrackService
,
private
toastr
:
ToastrService
,
private
activeModal
:
NgbActiveModal
)
{}
ngOnInit
():
void
{
this
.
stepTrackForm
=
this
.
fb
.
group
({
id
:
[],
stepName
:
[
''
,
Validators
.
required
],
stepName1
:
[
''
],
executionState
:
[
''
,
Validators
.
required
],
trackExecutionRatio
:
[
0
,
[
Validators
.
required
,
Validators
.
min
(
0
),
Validators
.
max
(
100
)]],
});
...
...
@@ -61,12 +65,14 @@ export class AddStepTrackModalComponent {
search
=
(
text
$
:
Observable
<
string
>
)
=>
text$
.
pipe
(
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
{
this
.
stepTrackForm
.
patchValue
({
stepName
:
step
.
stepInfo
?.
stepName
});
debugger
// this.stepTrackForm.patchValue({ stepName1: step.stepInfo?.stepName });
//this.stepTrackForm.patchValue({id: step.id});
...
...
@@ -75,8 +81,7 @@ export class AddStepTrackModalComponent {
onSubmit
():
void
{
if
(
this
.
stepTrackForm
.
valid
)
{
debugger
const
selectedStep
=
this
.
filteredSteps
.
find
(
step
=>
step
.
stepInfo
.
stepName
==
this
.
stepTrackForm
.
value
.
stepName
);
const
selectedStep
=
this
.
filteredSteps
.
find
(
step
=>
step
.
id
==
this
.
stepTrackForm
.
value
.
id
);
if
(
selectedStep
)
{
if
(
selectedStep
.
currentCompletionRatio
+
this
.
stepTrackForm
.
value
.
trackExecutionRatio
>
100
){
this
.
toastr
.
error
(
'نسبة التنفيذ غير صحيحة '
)
...
...
@@ -88,11 +93,21 @@ export class AddStepTrackModalComponent {
stepId
:
selectedStep
.
id
,
trackId
:
this
.
trackId
,
executionState
:
this
.
stepTrackForm
.
value
.
executionState
,
trackExecutionRatio
:
this
.
stepTrackForm
.
value
.
trackExecutionRatio
,
};
this
.
closeModal
();
this
.
addStepTrack
.
emit
(
newStepTrack
);
this
.
trackService
.
addStepTrack
(
newStepTrack
)
.
subscribe
({
next
:()
=>
{
this
.
activeModal
.
close
({
data
:
newStepTrack
.
stepId
,
request
:
newStepTrack
})
},
error
:(
err
)
=>
{
this
.
toastr
.
error
(
'لقد حدث خطاء'
)
this
.
activeModal
.
close
();
}
})
}
...
...
@@ -100,10 +115,6 @@ export class AddStepTrackModalComponent {
}
closeModal
():
void
{
const
modal
=
document
.
getElementById
(
'addStepTrackModal'
);
if
(
modal
)
{
const
bootstrapModal
=
new
Modal
(
modal
);
bootstrapModal
.
hide
();
}
this
.
activeModal
.
close
();
}
}
src/app/tracks/components/modals/update-step-track-modal/update-step-track-modal.component.html
View file @
ae05a203
<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>
src/app/tracks/components/modals/update-step-track-modal/update-step-track-modal.component.ts
View file @
ae05a203
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
({
selector
:
'update-step-track-modal'
,
...
...
@@ -6,5 +17,71 @@ import { Component } from '@angular/core';
styleUrl
:
'./update-step-track-modal.component.css'
})
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
();
}
}
src/app/tracks/components/step-track/step-track.component.html
View file @
ae05a203
...
...
@@ -24,7 +24,7 @@
<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"
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>
...
...
src/app/tracks/components/step-track/step-track.component.ts
View file @
ae05a203
import
{
Component
,
In
put
}
from
'@angular/core'
;
import
{
Component
,
EventEmitter
,
Input
,
Out
put
}
from
'@angular/core'
;
import
{
StepTrack
}
from
'../../models/responses/steptrack'
;
@
Component
({
...
...
@@ -10,4 +10,10 @@ export class StepTrackComponent {
@
Input
()
projectId
:
number
@
Input
()
stepTrack
:
StepTrack
@
Output
()
edit
=
new
EventEmitter
<
StepTrack
>
();
onEdit
(){
this
.
edit
.
emit
(
this
.
stepTrack
);
}
}
src/app/tracks/models/requests/updateStepTrack.ts
View file @
ae05a203
...
...
@@ -2,7 +2,7 @@ export class UpdateStepTrack {
stepTrackId
:
number
;
trackId
:
number
;
stepId
:
number
;
executionState
:
S
tring
;
executionState
:
s
tring
;
trackDate
:
Date
;
trackExecutionRatio
:
number
;
}
src/app/tracks/pages/project-track-history/project-track-history.component.html
View file @
ae05a203
...
...
@@ -39,8 +39,8 @@
<!-- Delete Confirmation -->
<div
*
ngIf=
"modalMode === 'delete'"
>
<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-secondary"
data-bs-dismiss=
"modal"
>
Cancel
</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"
>
إلغاء
</button>
</div>
</div>
</div>
...
...
src/app/tracks/pages/project-track-history/project-track-history.component.ts
View file @
ae05a203
...
...
@@ -54,8 +54,7 @@ export class ProjectTrackHistoryComponent {
next
:
(
data
)
=>
{
this
.
toastr
.
success
(
"تم تحميل عمليات المتابعة بنجاح"
);
this
.
tracks
=
data
.
sort
((
e1
,
e2
)
=>
Number
(
e1
.
trackInfo
.
trackDate
>
e2
.
trackInfo
.
trackDate
));
this
.
tracks
=
data
.
reverse
()
}
,
error
:(
err
)
=>
{
...
...
@@ -76,7 +75,9 @@ export class ProjectTrackHistoryComponent {
modalRef
.
result
.
then
((
result
)
=>
{
if
(
result
)
{
this
.
tracks
.
push
(
result
);
let
t
=
[
result
];
t
.
push
(...
this
.
tracks
);
this
.
tracks
=
t
;
this
.
toastr
.
success
(
"تمت الإضافة بنجاح"
)
}
},
(
reason
)
=>
{
...
...
@@ -127,10 +128,7 @@ export class ProjectTrackHistoryComponent {
}
closeModal
():
void
{
const
modalElement
=
document
.
getElementById
(
'trackModal'
);
if
(
modalElement
)
{
new
Modal
(
modalElement
).
hide
();
// Close the modal
}
this
.
modalService
.
dismissAll
()
}
}
src/app/tracks/pages/track-details/track-details.component.html
View file @
ae05a203
...
...
@@ -69,7 +69,7 @@
<step-track
*
ngFor=
"let stepTrack of stepTracks"
[
projectId
]="
track
.
projectId
"
(
edit
)="
openeditStepTrack
(
stepTrack
)"
[
stepTrack
]="
stepTrack
"
></step-track>
<div
class=
"offset-2 text-center text-secondary"
*
ngIf=
"stepTracks.length ==0 "
>
لم تقم بمتابعة اية مراحل
...
...
@@ -106,26 +106,26 @@
</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
[
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>
<add-step-track-modal
<
!-- <
add-step-track-modal
[trackId]="trackId"
[projectId]="track.projectId"
[
trackedSteps
]="
trackedSteps
"
[]="trackedSteps"
(addStepTrack)="handleAddStepTrack($event)">
</add-step-track-modal>
<add-employee-track-modal
</add-step-track-modal>
-->
<
!-- <
add-employee-track-modal
[trackId]="trackId"
[projectId]="track.projectId"
[trackedParticipants]="employeesTracks"
(addEmployeeTrack)="handleEmployeeTrack($event)">
</add-employee-track-modal>
</add-employee-track-modal>
-->
</section>
\ No newline at end of file
src/app/tracks/pages/track-details/track-details.component.ts
View file @
ae05a203
...
...
@@ -7,7 +7,7 @@ import { EmployeeTrack } from '../../models/responses/employeeTrack';
import
{
ActivatedRoute
}
from
'@angular/router'
;
import
{
Step
}
from
'../../../projects/models/responses/Step'
;
import
{
AddStepTrackRequest
}
from
'../../models/requests/AddStepTrackRequest'
;
import
{
error
}
from
'jquery'
;
import
{
data
,
error
}
from
'jquery'
;
import
{
StepService
}
from
'../../../projects/services/step.service'
;
import
{
forkJoin
}
from
'rxjs'
;
import
{
AddEmployeeTrackRequest
}
from
'../../models/requests/AddEmployeeTrackRequest'
;
...
...
@@ -15,6 +15,11 @@ import { ProjectService } from '../../../projects/services/project.service';
import
{
EmployeeParticipate
}
from
'../../../employees/models/responses/employeeParticipate'
;
import
{
NgbModal
}
from
'@ng-bootstrap/ng-bootstrap'
;
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
({
selector
:
'track-details'
,
...
...
@@ -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
(){
const
modalRef
=
this
.
modalService
.
open
(
CompleteTrackModalComponent
);
...
...
@@ -141,23 +217,11 @@ export class TrackDetailsComponent implements OnInit {
this
.
isAddStepTrackModalVisible
=
false
;
}
handleAddStepTrack
(
stepTrackRequest
:
AddStepTrackRequest
):
void
{
this
.
trackService
.
addStepTrack
(
stepTrackRequest
).
subscribe
({
next
:
(
data
)
=>
{
handleAddStepTrack
(
data
:
number
,
stepTrackRequest
:
AddStepTrackRequest
):
void
{
this
.
loadTheNewStep
(
data
,
stepTrackRequest
);
this
.
toastr
.
success
(
'تمت إضافة متالعة المرحلة '
)
}
,
error
:(
err
)
=>
{
this
.
toastr
.
error
(
'لقد حدث خطاء ما'
)
}
});
}
openComplete
(){
...
...
@@ -168,7 +232,7 @@ export class TrackDetailsComponent implements OnInit {
modalRef
.
result
.
then
((
result
)
=>
{
if
(
result
)
{
// Add the new project to the list
this
.
load
Participants
();
this
.
load
Track
();
}
},
(
reason
)
=>
{
...
...
@@ -206,23 +270,13 @@ export class TrackDetailsComponent implements OnInit {
}
handleEmployeeTrack
(
request
:
AddEmployeeTrackRequest
):
void
{
handleEmployeeTrack
(
data
:
number
,
request
:
AddEmployeeTrackRequest
):
void
{
debugger
this
.
trackService
.
addEmployeeTrack
(
request
).
subscribe
({
next
:
(
data
)
=>
{
this
.
loadTheNewParticipant
(
data
,
request
);
this
.
toastr
.
success
(
'تمت إضافة متالعة المرحلة '
)
this
.
_canComplete
();
}
,
error
:(
err
)
=>
{
this
.
toastr
.
error
(
'لقد حدث خطاء ما'
)
}
});
}
loadTheNewParticipant
(
empTrackId
:
number
,
request
:
AddEmployeeTrackRequest
){
let
s
=
this
.
participants
.
find
(
s
=>
s
.
employeeId
==
request
.
employeeId
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment