Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
BookingMyHrManagement
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
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
Chanachai
BookingMyHrManagement
Commits
3c3ffaf1
Commit
3c3ffaf1
authored
Mar 15, 2025
by
Ooh-Ao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sss
parent
3f337714
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
349 additions
and
146 deletions
+349
-146
project_member_controller.cpython-312.pyc
...ers/__pycache__/project_member_controller.cpython-312.pyc
+0
-0
project_member_controller.py
API-Fast/src/controllers/project_member_controller.py
+10
-0
project.cpython-312.pyc
API-Fast/src/models/__pycache__/project.cpython-312.pyc
+0
-0
project_member_routes.cpython-312.pyc
.../routes/__pycache__/project_member_routes.cpython-312.pyc
+0
-0
project_member_routes.py
API-Fast/src/routes/project_member_routes.py
+14
-1
02135c78-74b2-4e27-b466-02bbb4fb79f0.jpg
.../uploaded_images/02135c78-74b2-4e27-b466-02bbb4fb79f0.jpg
+0
-0
b274b298-1305-4fd3-a096-d21aaa38f289.png
.../uploaded_images/b274b298-1305-4fd3-a096-d21aaa38f289.png
+0
-0
b7bfa8cf-583b-4b46-ad7c-8dbf7f10cc88.jpg
.../uploaded_images/b7bfa8cf-583b-4b46-ad7c-8dbf7f10cc88.jpg
+0
-0
company-manage.component.html
...p/DPU/common/company-manage/company-manage.component.html
+40
-45
company-manage.component.ts
...app/DPU/common/company-manage/company-manage.component.ts
+66
-73
project-members.ts
Web-Manage/src/app/DPU/models/project-members.ts
+21
-0
project.model.ts
Web-Manage/src/app/DPU/models/project.model.ts
+27
-0
project-members.service.ts
Web-Manage/src/app/DPU/services/project-members.service.ts
+60
-0
project.service.ts
Web-Manage/src/app/DPU/services/project.service.ts
+51
-0
login.component.ts
Web-Manage/src/app/authentication/login/login.component.ts
+7
-8
nav.service.ts
Web-Manage/src/app/shared/services/nav.service.ts
+53
-19
No files found.
API-Fast/src/controllers/__pycache__/project_member_controller.cpython-312.pyc
View file @
3c3ffaf1
No preview for this file type
API-Fast/src/controllers/project_member_controller.py
View file @
3c3ffaf1
...
...
@@ -71,3 +71,12 @@ async def delete_project_member(db: AsyncSession, pmId: UUID):
await
db
.
commit
()
return
{
"message"
:
"ProjectMember deleted successfully"
}
async
def
get_projects_by_member_id
(
db
:
AsyncSession
,
memberId
:
UUID
):
"""
ดึงรายการ ProjectMember ทั้งหมดที่ memberId นี้สังกัดอยู่
"""
result
=
await
db
.
execute
(
select
(
ProjectMember
)
.
where
(
ProjectMember
.
memberId
==
memberId
)
)
return
result
.
scalars
()
.
all
()
\ No newline at end of file
API-Fast/src/models/__pycache__/project.cpython-312.pyc
View file @
3c3ffaf1
No preview for this file type
API-Fast/src/routes/__pycache__/project_member_routes.cpython-312.pyc
View file @
3c3ffaf1
No preview for this file type
API-Fast/src/routes/project_member_routes.py
View file @
3c3ffaf1
...
...
@@ -11,7 +11,8 @@ from ..controllers.project_member_controller import (
get_all_project_members
,
get_project_member_by_id
,
update_project_member
,
delete_project_member
delete_project_member
,
get_projects_by_member_id
)
from
..schemas.project_member_schema
import
(
ProjectMemberCreate
,
...
...
@@ -64,3 +65,14 @@ async def delete_pm_endpoint(
db
:
AsyncSession
=
Depends
(
get_db
)
):
return
await
delete_project_member
(
db
,
pmId
)
@router.get
(
"/member/{memberId}"
,
response_model
=
List
[
ProjectMemberResponse
])
async
def
get_projects_for_member
(
memberId
:
UUID
,
db
:
AsyncSession
=
Depends
(
get_db
)
):
"""
ดึงรายการ ProjectMember ทั้งหมดที่ memberId คนนี้สังกัดอยู่
"""
pms
=
await
get_projects_by_member_id
(
db
,
memberId
)
return
pms
\ No newline at end of file
API-Fast/uploaded_images/02135c78-74b2-4e27-b466-02bbb4fb79f0.jpg
0 → 100644
View file @
3c3ffaf1
37.7 KB
API-Fast/uploaded_images/b274b298-1305-4fd3-a096-d21aaa38f289.png
0 → 100644
View file @
3c3ffaf1
520 KB
API-Fast/uploaded_images/b7bfa8cf-583b-4b46-ad7c-8dbf7f10cc88.jpg
0 → 100644
View file @
3c3ffaf1
31.4 KB
Web-Manage/src/app/DPU/common/company-manage/company-manage.component.html
View file @
3c3ffaf1
<app-page-header
[
title
]="'จัดการ
บริษัท'"
[
activeTitle
]="'ผู้ดูแลระบบ'"
[
title1
]="'จัดการบริษัท
'"
></app-page-header>
<app-page-header
[
title
]="'จัดการ
โครงการ'"
[
activeTitle
]="'ผู้ดูแลระบบ'"
[
title1
]="'จัดการโครงการ
'"
></app-page-header>
<div
class=
"grid grid-cols-12 gap-6"
>
...
...
@@ -15,15 +15,15 @@
translate}}
</a>
<a
href=
"javascript:void(0);"
class=
"hs-dropdown-toggle ti-btn ti-btn-success-full me-2"
*
ngIf=
"someSelected"
<
!-- <
a href="javascript:void(0);" class="hs-dropdown-toggle ti-btn ti-btn-success-full me-2" *ngIf="someSelected"
(click)="adjustSelect(1)"><i class="ri-user-follow-line font-semibold align-middle"></i>{{ 'Active' |
translate}}
</a>
<a
href=
"javascript:void(0);"
class=
"hs-dropdown-toggle ti-btn ti-btn-secondary-full me-2"
</a>
-->
<
!-- <
a href="javascript:void(0);" class="hs-dropdown-toggle ti-btn ti-btn-secondary-full me-2"
*ngIf="someSelected" (click)="adjustSelect(0)"><i
class="ri-user-unfollow-line font-semibold align-middle"></i>{{ 'Unactive' |
translate}}
</a>
</a>
-->
<a
href=
"javascript:void(0);"
class=
"hs-dropdown-toggle ti-btn ti-btn-danger-full me-2"
*
ngIf=
"someSelected"
...
...
@@ -31,11 +31,11 @@
translate}}
</a>
<div>
<input
class=
"form-control form-control"
type=
"text"
placeholder=
"ค้นหา
บริษัท
"
<input
class=
"form-control form-control"
type=
"text"
placeholder=
"ค้นหา
โครงการ
"
aria-label=
".form-control-sm example"
[(
ngModel
)]='
searchTerm
'
>
</div>
<!-- <div>
<input class="form-control form-control" type="text" placeholder="กรองตาม
บริษัท
"
<input class="form-control form-control" type="text" placeholder="กรองตาม
โครงการ
"
aria-label=".form-control-sm example" [(ngModel)]='searchTerm'>
</div> -->
<!-- <a href="javascript:void(0);" class="ti-btn ti-btn-primary-full !py-1 !px-2" aria-expanded="false">
...
...
@@ -56,11 +56,11 @@
<input
class=
"form-check-input check-all"
type=
"checkbox"
id=
"all-products"
(
change
)="
toggleAll
($
event
)"
[
checked
]="
allSelected
"
aria-label=
"..."
>
</th>
<th
scope=
"col"
class=
"text-start"
>
บริษัท
</th>
<
th
scope=
"col"
class=
"text-start"
>
รหัสย่อบริษัท
</th
>
<th
scope=
"col"
class=
"text-start"
>
ข้อมูล
บริษัท
</th>
<th
scope=
"col"
class=
"text-start"
>
{{"Status" | translate}}
</th>
<th
scope=
"col"
class=
"text-start"
>
{{"Update Date" | translate}}
</th>
<th
scope=
"col"
class=
"text-start"
>
โครงการ
</th>
<
!-- <th scope="col" class="text-start">รหัสย่อโครงการ</th> --
>
<th
scope=
"col"
class=
"text-start"
>
ข้อมูล
โครงการ
</th>
<
!-- <
th scope="col" class="text-start">{{"Status" | translate}}</th>
<th scope="col" class="text-start">{{"Update Date" | translate}}</th>
-->
<th
scope=
"col"
class=
"text-start"
></th>
</tr>
</thead>
...
...
@@ -69,7 +69,7 @@
<tr
class=
"border border-defaultborder dark:border-defaultborder/10"
>
<td
class=
"product-checkbox"
><input
class=
"form-check-input"
type=
"checkbox"
[
checked
]="
selectedItems
.
get
(
item
.
companyId
)"
(
change
)="
onCheckboxChange
(
item
.
companyId
)"
[
checked
]="
selectedItems
.
get
(
item
.
projectId
!)"
(
change
)="
onCheckboxChange
(
item
.
projectId
!
)"
aria-label=
"..."
value=
""
>
</td>
<td>
...
...
@@ -79,34 +79,34 @@
</span>
<div
class=
"ms-2"
>
<p
class=
"font-semibold mb-0 flex items-center text-primary"
><a
routerLink=
"/company/home/{{item.
company
Id}}"
routerLinkActive=
"active"
>
{{item.
companyN
ame}}
</a></p>
<p
class=
"text-[0.75rem] text-muted mb-0"
>
{{item.
company
Id}}
</p>
routerLink=
"/company/home/{{item.
project
Id}}"
routerLinkActive=
"active"
>
{{item.
project_n
ame}}
</a></p>
<p
class=
"text-[0.75rem] text-muted mb-0"
>
{{item.
project
Id}}
</p>
</div>
</div>
</td>
<!-- <td>
<div class="flex">
<div class="ms-2">
<p class="font-semibold mb-0 flex items-center text-primary"><a routerLink="/company/home/{{item.
company
Id}}" routerLinkActive="active">
{{item.
companyN
ame}}</a></p>
<p class="text-[0.75rem] text-muted mb-0">{{item.
company
Id}}</p>
<p class="font-semibold mb-0 flex items-center text-primary"><a routerLink="/company/home/{{item.
project
Id}}" routerLinkActive="active">
{{item.
project_n
ame}}</a></p>
<p class="text-[0.75rem] text-muted mb-0">{{item.
project
Id}}</p>
</div>
</div>
</td> -->
<
td>
{{item.companyCode}}
</td
>
<
!-- <td> {{item.companyCode}}</td> --
>
<td>
<div>
<span
class=
"block mb-1"
><i
class=
"ri-home-line me-2 align-middle text-[.875rem] text-[#8c9097] dark:text-white/50 inline-flex"
></i>
{{item.
companyInfo
}}
</span>
class=
"ri-home-line me-2 align-middle text-[.875rem] text-[#8c9097] dark:text-white/50 inline-flex"
></i>
{{item.
project_desc
}}
</span>
</div>
</td>
<td>
<span
<
!-- <
td> <span
class="badge bg-{{ item.status == 1 ? 'primary' : 'danger'}} text-white">{{item.getStatus()}}</span>
</td>
<td><span
class=
"badge bg-info/10 text-primary"
><i
class=
"bi bi-clock me-1"
></i>
{{item.updatedAt | date
</td>
-->
<
!-- <
td><span class="badge bg-info/10 text-primary"><i class="bi bi-clock me-1"></i>{{item.updatedAt | date
: 'medium'}}</span></td>
<td>
<td>
-->
<td>
<div
class=
"flex flex-row items-center !gap-2 "
>
...
...
@@ -202,58 +202,53 @@
</div>
<div
class=
"xl:col-span-12 col-span-12"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{'ชื่อ
บริษัท
' | translate}}
</label>
<label
for=
"deal-title"
class=
"form-label"
>
{{'ชื่อ
โครงการ
' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectModel
.
companyN
ame
"
>
<div
class=
"text-danger"
*
ngIf=
"!selectModel.
companyN
ame"
>
[(
ngModel
)]="
selectModel
.
project_n
ame
"
>
<div
class=
"text-danger"
*
ngIf=
"!selectModel.
project_n
ame"
>
{{'Please fill in information' | translate}}
</div>
</div>
<div
class=
"xl:col-span-12 col-span-12"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{'รหัส
บริษัท
' | translate}}
</label>
<
!-- <
div class="xl:col-span-12 col-span-12">
<label for="deal-title" class="form-label">{{'รหัส
โครงการ
' | translate}}</label>
<input type="text" class="form-control" id="deal-title" placeholder=""
[(ngModel)]="selectModel.companyCode">
<div class="text-danger" *ngIf="!selectModel.companyCode">
{{'Please fill in information' | translate}}
</div>
</div>
</div>
-->
<div
class=
"xl:col-span-12 col-span-12"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{'ข้อมูล
บริษัท
' | translate}}
</label>
<label
for=
"deal-title"
class=
"form-label"
>
{{'ข้อมูล
โครงการ
' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectModel
.
companyInfo
"
>
<div
class=
"text-danger"
*
ngIf=
"!selectModel.
companyInfo
"
>
[(
ngModel
)]="
selectModel
.
project_desc
"
>
<div
class=
"text-danger"
*
ngIf=
"!selectModel.
project_desc
"
>
{{'Please fill in information' | translate}}
</div>
</div>
<div
class=
"xl:col-span-12 col-span-12"
>
<
!-- <
div class="xl:col-span-12 col-span-12">
<label for="deal-title" class="form-label">{{'ที่อยู่' | translate}}</label>
<textarea type="text" class="form-control" id="deal-title" placeholder=""
[(ngModel)]="selectModel.address"></textarea>
</div>
<div
class=
"xl:col-span-12 col-span-12"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{'เจ้าของ' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectModel
.
ownerName
"
>
</div>
</div> -->
<div
class=
"xl:col-span-12 col-span-12"
>
<
!-- <
div class="xl:col-span-12 col-span-12">
<label for="deal-title" class="form-label">{{'เบอร๋ติดต่อ' | translate}}</label>
<input type="text" class="form-control" id="deal-title" placeholder="" [(ngModel)]="selectModel.contact">
</div>
</div>
-->
<div
class=
"xl:col-span-12 col-span-12"
>
<
!-- <
div class="xl:col-span-12 col-span-12">
<label class="form-label">{{'Status' | translate}}</label>
<ng-select name="choices-multiple-remove-button2" id="choices-multiple-remove-button2" placeholder=""
[(ngModel)]="selectModel.status">
<ng-option [value]="0">{{'Pending' | translate}}</ng-option>
<ng-option [value]="1" selected>{{'Public' | translate}}</ng-option>
</ng-select>
</div>
</div>
-->
</div>
</div>
...
...
Web-Manage/src/app/DPU/common/company-manage/company-manage.component.ts
View file @
3c3ffaf1
...
...
@@ -3,7 +3,6 @@ import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
import
{
RouterModule
}
from
'@angular/router'
;
import
{
SharedModule
}
from
'../../../shared/shared.module'
;
import
{
TranslateModule
,
TranslateService
}
from
'@ngx-translate/core'
;
import
{
CompanyModel
}
from
'../../models/company.model'
;
import
swal
from
'sweetalert'
;
import
{
CompanyService
}
from
'../../services/company.service'
;
import
{
MatPaginator
}
from
'@angular/material/paginator'
;
...
...
@@ -14,6 +13,8 @@ import { FileUploadModule } from 'ng2-file-upload';
import
{
FileItem
,
FileUploader
,
ParsedResponseHeaders
}
from
"ng2-file-upload"
;
import
{
environment
}
from
'../../../../environments/environment'
;
import
{
TokenService
}
from
'../../../shared/services/token.service'
;
import
{
ProjectService
}
from
'../../services/project.service'
;
import
{
ProjectModel
}
from
'../../models/project.model'
;
@
Component
({
selector
:
'app-company-manage'
,
...
...
@@ -37,11 +38,11 @@ export class CompanyManageComponent {
action
=
"new"
;
allSelected
=
false
;
someSelected
=
false
;
itemsList
:
Company
Model
[]
=
[]
filterList
:
Company
Model
[]
=
[]
selectModel
:
CompanyModel
=
new
Company
Model
()
itemsList
:
Project
Model
[]
=
[]
filterList
:
Project
Model
[]
=
[]
selectModel
:
ProjectModel
=
new
Project
Model
()
selectedItems
=
new
Map
<
string
,
boolean
>
();
empList
:
Company
Model
[]
=
[]
empList
:
Project
Model
[]
=
[]
descName
=
'engName'
pageIndex
=
0
;
uploaderProfile
:
FileUploader
|
undefined
;
...
...
@@ -61,7 +62,7 @@ export class CompanyManageComponent {
}
_searchTerm
=
""
;
constructor
(
private
comService
:
Company
Service
,
public
translate
:
TranslateService
,
private
tokenService
:
TokenService
)
{
constructor
(
private
projectService
:
Project
Service
,
public
translate
:
TranslateService
,
private
tokenService
:
TokenService
)
{
this
.
uploadConfig
()
}
...
...
@@ -117,7 +118,7 @@ export class CompanyManageComponent {
}
ngOnInit
():
void
{
this
.
com
Service
.
getLists
().
subscribe
(
result
=>
{
this
.
project
Service
.
getLists
().
subscribe
(
result
=>
{
this
.
itemsList
=
result
this
.
updatePagedItems
()
})
...
...
@@ -126,17 +127,13 @@ export class CompanyManageComponent {
filter
(
v
:
string
)
{
return
this
.
itemsList
?.
filter
(
(
x
)
=>
x
.
companyId
?.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
companyName
?.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
companyCode
?.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
companyInfo
?.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
address
.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
ownerName
.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
getStatus
().
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
x
.
projectId
?.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
project_name
?.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
project_desc
?.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
);
}
delete
(
item
:
Company
Model
)
{
delete
(
item
:
Project
Model
)
{
swal
({
title
:
"Are you sure?"
,
text
:
"You won't be able to revert this!"
,
...
...
@@ -147,7 +144,7 @@ export class CompanyManageComponent {
})
.
then
((
willDelete
:
any
)
=>
{
if
(
willDelete
)
{
this
.
com
Service
.
delete
(
item
).
subscribe
(
result
=>
{
this
.
project
Service
.
delete
(
item
).
subscribe
(
result
=>
{
swal
(
"Save Success!!"
,
"บันทึกข้อมูลสำเร็จ"
,
"success"
);
this
.
ngOnInit
()
})
...
...
@@ -158,17 +155,13 @@ export class CompanyManageComponent {
new
()
{
this
.
action
=
'add'
this
.
selectModel
=
new
CompanyModel
()
this
.
selectModel
.
status
=
1
;
this
.
selectModel
.
address
=
""
;
this
.
selectModel
.
latitude
=
0.00
this
.
selectModel
.
longitude
=
0.00
this
.
selectModel
=
new
ProjectModel
()
this
.
selectModel
.
picture
=
""
}
view
(
item
:
Company
Model
)
{
view
(
item
:
Project
Model
)
{
this
.
action
=
'edit'
this
.
selectModel
=
new
Company
Model
(
item
)
this
.
selectModel
=
new
Project
Model
(
item
)
console
.
log
(
this
.
selectModel
)
}
...
...
@@ -183,14 +176,14 @@ export class CompanyManageComponent {
.
then
((
willDelete
:
any
)
=>
{
if
(
willDelete
)
{
if
(
this
.
action
==
'add'
)
{
this
.
com
Service
.
save
(
this
.
selectModel
).
subscribe
(
result
=>
{
this
.
project
Service
.
save
(
this
.
selectModel
).
subscribe
(
result
=>
{
console
.
log
(
result
)
swal
(
"Save Success!!"
,
"บันทึกข้อมูลสมาชิก"
,
"success"
);
this
.
ngOnInit
()
this
.
childModal
?.
nativeElement
.
click
()
})
}
else
if
(
this
.
action
==
'edit'
)
{
this
.
com
Service
.
update
(
this
.
selectModel
).
subscribe
(
result
=>
{
this
.
project
Service
.
update
(
this
.
selectModel
).
subscribe
(
result
=>
{
console
.
log
(
result
)
swal
(
"Update Success!!"
,
"บันทึกข้อมูลสมาชิก"
,
"success"
);
this
.
ngOnInit
()
...
...
@@ -215,25 +208,25 @@ export class CompanyManageComponent {
this
.
allSelected
=
event
.
target
.
checked
;
this
.
selectedItems
.
clear
();
this
.
itemsList
.
forEach
(
item
=>
{
this
.
selectedItems
.
set
(
item
.
companyId
,
this
.
allSelected
);
this
.
selectedItems
.
set
(
item
.
projectId
!
,
this
.
allSelected
);
});
this
.
someSelected
=
this
.
itemsList
.
some
(
item
=>
this
.
selectedItems
.
get
(
item
.
companyId
));
this
.
someSelected
=
this
.
itemsList
.
some
(
item
=>
this
.
selectedItems
.
get
(
item
.
projectId
!
));
}
onCheckboxChange
(
company
Id
:
string
)
{
const
isSelected
=
this
.
selectedItems
.
get
(
company
Id
)
||
false
;
this
.
selectedItems
.
set
(
company
Id
,
!
isSelected
);
this
.
allSelected
=
this
.
itemsList
.
every
(
item
=>
this
.
selectedItems
.
get
(
item
.
companyId
));
this
.
someSelected
=
this
.
itemsList
.
some
(
item
=>
this
.
selectedItems
.
get
(
item
.
companyId
));
onCheckboxChange
(
project
Id
:
string
)
{
const
isSelected
=
this
.
selectedItems
.
get
(
project
Id
)
||
false
;
this
.
selectedItems
.
set
(
project
Id
,
!
isSelected
);
this
.
allSelected
=
this
.
itemsList
.
every
(
item
=>
this
.
selectedItems
.
get
(
item
.
projectId
!
));
this
.
someSelected
=
this
.
itemsList
.
some
(
item
=>
this
.
selectedItems
.
get
(
item
.
projectId
!
));
}
deleteSelect
()
{
let
employeeInfo
=
''
;
this
.
selectedItems
.
forEach
((
isSelected
,
company
Id
)
=>
{
this
.
selectedItems
.
forEach
((
isSelected
,
project
Id
)
=>
{
if
(
isSelected
)
{
const
item
=
this
.
itemsList
.
find
(
item
=>
item
.
companyId
===
company
Id
);
const
item
=
this
.
itemsList
.
find
(
item
=>
item
.
projectId
===
project
Id
);
if
(
item
)
{
employeeInfo
+=
`
${
this
.
translate
.
instant
(
'บริษัท'
)}
:
${
item
.
companyN
ame
}
\n`
;
employeeInfo
+=
`
${
this
.
translate
.
instant
(
'บริษัท'
)}
:
${
item
.
project_n
ame
}
\n`
;
}
}
});
...
...
@@ -247,11 +240,11 @@ export class CompanyManageComponent {
})
.
then
((
willDelete
:
any
)
=>
{
if
(
willDelete
)
{
this
.
selectedItems
.
forEach
((
isSelected
,
company
Id
)
=>
{
this
.
selectedItems
.
forEach
((
isSelected
,
project
Id
)
=>
{
if
(
isSelected
)
{
const
item
=
this
.
itemsList
.
find
(
item
=>
item
.
companyId
===
company
Id
);
const
item
=
this
.
itemsList
.
find
(
item
=>
item
.
projectId
===
project
Id
);
if
(
item
)
{
this
.
com
Service
.
delete
(
item
).
subscribe
(
result
=>
{
this
.
project
Service
.
delete
(
item
).
subscribe
(
result
=>
{
swal
(
"Save Success!!"
,
"บันทึกข้อมูลสำเร็จ"
,
"success"
);
this
.
ngOnInit
();
});
...
...
@@ -262,41 +255,41 @@ export class CompanyManageComponent {
});
}
adjustSelect
(
status
:
number
)
{
let
title
=
"Are you sure?"
let
employeeInfo
=
''
;
// ตัวแปรสำหรับเก็บข้อมูลพนักงาน
this
.
selectedItems
.
forEach
((
isSelected
,
memberId
)
=>
{
if
(
isSelected
)
{
const
company
=
this
.
itemsList
.
find
(
company
=>
company
.
company
Id
===
memberId
);
if
(
company
)
{
employeeInfo
+=
`
${
this
.
translate
.
instant
(
'Fullname'
)}
:
${
company
.
company
Name
}
\n`
;
}
}
});
swal
({
title
:
title
,
text
:
employeeInfo
,
icon
:
"warning"
,
dangerMode
:
false
,
buttons
:
[
"Cancel"
,
"Confirm"
],
})
.
then
((
willDelete
:
any
)
=>
{
if
(
willDelete
)
{
this
.
selectedItems
.
forEach
((
isSelected
,
company
Id
)
=>
{
if
(
isSelected
)
{
const
company
=
this
.
itemsList
.
find
(
company
=>
company
.
companyId
===
company
Id
);
if
(
company
)
{
company
.
status
=
status
this
.
comService
.
update
(
company
).
subscribe
(
result
=>
{
swal
(
"Save Success!!"
,
"บันทึกข้อมูลสำเร็จ"
,
"success"
);
this
.
ngOnInit
();
});
}
}
});
}
//
adjustSelect(status: number) {
//
let title = "Are you sure?"
//
let employeeInfo = ''; // ตัวแปรสำหรับเก็บข้อมูลพนักงาน
//
this.selectedItems.forEach((isSelected, memberId) => {
//
if (isSelected) {
// const company = this.itemsList.find(project => project.project
Id === memberId);
// if (project
) {
// employeeInfo += `${this.translate.instant('Fullname')}: ${project.project
Name}\n`;
//
}
//
}
//
});
//
swal({
//
title: title,
//
text: employeeInfo,
//
icon: "warning",
//
dangerMode: false,
//
buttons: ["Cancel", "Confirm"],
//
})
//
.then((willDelete: any) => {
//
if (willDelete) {
// this.selectedItems.forEach((isSelected, project
Id) => {
//
if (isSelected) {
// const project = this.itemsList.find(project => project.projectId === project
Id);
// if (project
) {
// project
.status = status
// this.projectService.update(project
).subscribe(result => {
//
swal("Save Success!!", "บันทึกข้อมูลสำเร็จ", "success");
//
this.ngOnInit();
//
});
//
}
//
}
//
});
//
}
});
}
//
});
//
}
}
Web-Manage/src/app/DPU/models/project-members.ts
0 → 100644
View file @
3c3ffaf1
import
{
TranslateService
}
from
"@ngx-translate/core"
;
import
{
BaseModel
}
from
"./base.model"
;
export
class
ProjectMemberModel
extends
BaseModel
{
pm_id
:
string
;
user_id
:
string
;
projectId
:
string
;
role_in_project
:
string
;
created_at
:
string
;
updated_at
:
string
;
constructor
(
data
?:
Partial
<
ProjectMemberModel
>
,
translateService
?:
TranslateService
)
{
super
(
data
,
translateService
);
this
.
pm_id
=
data
?.
pm_id
??
''
;
this
.
user_id
=
data
?.
user_id
??
''
;
this
.
projectId
=
data
?.
projectId
??
''
;
this
.
role_in_project
=
data
?.
role_in_project
??
''
;
this
.
created_at
=
data
?.
created_at
??
new
Date
().
toISOString
();
this
.
updated_at
=
data
?.
updated_at
??
new
Date
().
toISOString
();
}
}
Web-Manage/src/app/DPU/models/project.model.ts
0 → 100644
View file @
3c3ffaf1
import
{
environment
}
from
"../../../environments/environment"
;
export
class
ProjectModel
{
projectId
?:
string
;
picture
:
string
;
project_name
:
string
;
project_desc
?:
string
;
start_date
:
string
;
end_date
:
string
;
// created_at: string;
// updated_at: string;
constructor
(
data
?:
Partial
<
ProjectModel
>
)
{
this
.
picture
=
data
?.
picture
??
''
;
this
.
projectId
=
data
?.
projectId
this
.
project_name
=
data
?.
project_name
??
''
;
this
.
project_desc
=
data
?.
project_desc
??
''
;
this
.
start_date
=
data
?.
start_date
!
this
.
end_date
=
data
?.
end_date
!
// this.created_at = data?.created_at!
// this.updated_at = data?.updated_at!
}
getPicture
():
string
{
return
this
.
picture
?
environment
.
baseUrl
+
'/images/'
+
this
.
picture
:
'./assets/images/faces/9.jpg'
}
}
Web-Manage/src/app/DPU/services/project-members.service.ts
0 → 100644
View file @
3c3ffaf1
import
{
HttpClient
}
from
'@angular/common/http'
;
import
{
Injectable
}
from
'@angular/core'
;
import
{
map
,
tap
,
switchMap
,
filter
,
reduce
}
from
"rxjs/operators"
;
import
{
ProjectMemberModel
}
from
'../models/project-members'
;
@
Injectable
({
providedIn
:
'root'
})
export
class
ProjectMemberService
{
apiBaseUrl
=
"/project-members"
;
constructor
(
private
http
:
HttpClient
)
{
}
getById
(
id
:
string
)
{
return
this
.
http
.
get
<
ProjectMemberModel
>
(
this
.
apiBaseUrl
+
"/"
+
id
)
.
pipe
(
map
((
e
)
=>
new
ProjectMemberModel
(
e
)));
}
getLists
()
{
return
this
.
http
.
get
<
ProjectMemberModel
[]
>
(
this
.
apiBaseUrl
)
.
pipe
(
map
((
e
)
=>
e
.
map
((
e
)
=>
new
ProjectMemberModel
(
e
)))
);
}
save
(
body
:
ProjectMemberModel
)
{
return
this
.
http
.
post
<
{
"message"
:
string
,
"user"
:
ProjectMemberModel
}
>
(
this
.
apiBaseUrl
,
new
ProjectMemberModel
(
body
));
}
update
(
body
:
ProjectMemberModel
)
{
return
this
.
http
.
put
<
{
"message"
:
string
,
"user"
:
ProjectMemberModel
}
>
(
this
.
apiBaseUrl
+
"/"
+
body
.
user_id
,
new
ProjectMemberModel
(
body
));
}
delete
(
body
:
ProjectMemberModel
)
{
return
this
.
http
.
delete
<
{
"message"
:
string
,
"user"
:
ProjectMemberModel
}
>
(
this
.
apiBaseUrl
+
"/"
+
body
.
user_id
);
}
getCompanyAdmin
(
memberId
:
string
)
{
return
this
.
http
.
get
<
ProjectMemberModel
[]
>
(
this
.
apiBaseUrl
+
"/member/"
+
memberId
)
.
pipe
(
map
((
e
)
=>
e
.
map
((
e
)
=>
new
ProjectMemberModel
(
e
)))
);
}
}
Web-Manage/src/app/DPU/services/project.service.ts
0 → 100644
View file @
3c3ffaf1
import
{
HttpClient
}
from
'@angular/common/http'
;
import
{
Injectable
}
from
'@angular/core'
;
import
{
map
,
tap
,
switchMap
,
filter
,
reduce
}
from
"rxjs/operators"
;
import
{
ProjectModel
}
from
'../models/project.model'
;
@
Injectable
({
providedIn
:
'root'
})
export
class
ProjectService
{
apiBaseUrl
=
"/projects"
;
constructor
(
private
http
:
HttpClient
)
{
}
getById
(
id
:
string
)
{
return
this
.
http
.
get
<
ProjectModel
>
(
this
.
apiBaseUrl
+
"/"
+
id
)
.
pipe
(
map
((
e
)
=>
new
ProjectModel
(
e
)));
}
getLists
()
{
return
this
.
http
.
get
<
ProjectModel
[]
>
(
this
.
apiBaseUrl
)
.
pipe
(
map
((
e
)
=>
e
.
map
((
e
)
=>
new
ProjectModel
(
e
)))
);
}
save
(
body
:
ProjectModel
)
{
return
this
.
http
.
post
<
{
"message"
:
string
,
"user"
:
ProjectModel
}
>
(
this
.
apiBaseUrl
,
new
ProjectModel
(
body
));
}
update
(
body
:
ProjectModel
)
{
return
this
.
http
.
put
<
{
"message"
:
string
,
"user"
:
ProjectModel
}
>
(
this
.
apiBaseUrl
+
"/"
+
body
.
projectId
,
new
ProjectModel
(
body
));
}
delete
(
body
:
ProjectModel
)
{
return
this
.
http
.
delete
<
{
"message"
:
string
,
"user"
:
ProjectModel
}
>
(
this
.
apiBaseUrl
+
"/"
+
body
.
projectId
);
}
}
Web-Manage/src/app/authentication/login/login.component.ts
View file @
3c3ffaf1
...
...
@@ -18,6 +18,7 @@ import { LoginModel } from '../../shared/user-auth.model';
import
{
HttpClientModule
}
from
'@angular/common/http'
;
import
{
Validators
}
from
'ngx-editor'
;
import
{
EmployeeService
}
from
'../../DPU/services/employee.service'
;
import
{
ProjectMemberService
}
from
'../../DPU/services/project-members.service'
;
@
Component
({
selector
:
'app-login'
,
...
...
@@ -44,7 +45,7 @@ export class LoginComponent {
private
routes
:
Router
,
private
formBuilder
:
FormBuilder
,
public
authService
:
AuthService
,
private
empServie
:
Employee
Service
private
projectMember
:
ProjectMember
Service
)
{
localStorage
.
clear
()
}
...
...
@@ -123,15 +124,13 @@ export class LoginComponent {
this
.
tokenService
.
saveToken
(
result
.
access_token
);
// this.tokenService.saveRefreshToken(result.refreshToken);
this
.
tokenService
.
saveUser
(
result
);
if
(
result
.
member
.
status
==
1
)
{
if
(
result
.
member
.
role
==
99
)
{
if
(
result
.
member
.
role
==
99
||
result
.
member
.
role
==
1
)
{
this
.
routes
.
navigate
([
'/admin/member-manage'
])
}
else
{
this
.
adminCompanyList
(
result
.
member
.
memberId
)
}
}
else
{
this
.
error
=
'ไม่สามารถใช้งานได้กรุณาติดต่อผู้ให้บริการ'
}
// this.routes.navigate(['/admin/member-manage'])
},
(
error
)
=>
{
this
.
showLoader
=
false
;
...
...
@@ -141,9 +140,9 @@ export class LoginComponent {
}
adminCompanyList
(
memberId
:
string
)
{
this
.
empServie
.
getCompanyAdmin
(
memberId
).
subscribe
(
result
=>
{
this
.
projectMember
.
getCompanyAdmin
(
memberId
).
subscribe
(
result
=>
{
if
(
result
.
length
>
0
)
{
this
.
routes
.
navigate
([
'/company/home/'
+
result
[
0
].
company
Id
])
this
.
routes
.
navigate
([
'/company/home/'
+
result
[
0
].
project
Id
])
}
else
{
this
.
error
=
'คุณไม่มีสิทธิ์ใช้งานในส่วนนี้'
...
...
Web-Manage/src/app/shared/services/nav.service.ts
View file @
3c3ffaf1
...
...
@@ -54,7 +54,7 @@ export class NavService implements OnDestroy {
public
fullScreen
=
false
;
active
:
any
;
constructor
(
private
router
:
Router
,
private
tokenService
:
TokenService
)
{
constructor
(
private
router
:
Router
,
private
tokenService
:
TokenService
)
{
this
.
setScreenWidth
(
window
.
innerWidth
);
fromEvent
(
window
,
'resize'
)
.
pipe
(
debounceTime
(
1000
),
takeUntil
(
this
.
unsubscriber
))
...
...
@@ -91,32 +91,66 @@ export class NavService implements OnDestroy {
MENUITEMS
:
Menu
[]
=
[]
getCommonMenu
()
{
return
[
// Dashboard
{
headTitle
:
'ผู้ดูแลระบบ'
},
// return [
// // Dashboard
// { headTitle: 'ผู้ดูแลระบบ' },
// {
// icon: 'user',
// path: '/admin/member-manage',
// title: 'จัดการสมาชิก',
// type: 'link',
// },
// {
// icon: 'buildings',
// path: '/admin/manage-companys',
// title: 'จัดการบริษัท',
// type: 'link',
// },
// {
// icon: 'user-check',
// path: '/admin/admin-manage',
// title: 'จัดการสิทธิ์ผู้ดูแลระบบ',
// type: 'link',
// },
// // { headTitle: 'User Management' },
// ];
return
[{
headTitle
:
'Admin'
},
{
path
:
'/admin/home'
,
title
:
'หน้าแรก'
,
type
:
'link'
},
{
icon
:
'user'
,
path
:
'/admin/member-manage'
,
title
:
'จัดการสมาชิก'
,
type
:
'link'
,
},
title
:
'การจัดการ'
,
type
:
'sub'
,
selected
:
false
,
Menusub
:
true
,
active
:
false
,
children
:
[
{
path
:
'/admin/member-manage'
,
title
:
'การจัดการสมาชิก'
,
type
:
'link'
},
{
path
:
'/admin/product-management'
,
title
:
'การจัดการอุปกรณ์'
,
type
:
'link'
},
{
icon
:
'buildings'
,
path
:
'/admin/manage-companys'
,
title
:
'จัดการบริษัท
'
,
title
:
'การจัดการโครงการ
'
,
type
:
'link'
,
},
],
},
{
title
:
'การเบิกคืนอุปกรณ์'
,
type
:
'sub'
,
selected
:
false
,
Menusub
:
true
,
active
:
false
,
children
:
[
{
path
:
'/admin/borrow-management'
,
title
:
'การจัดการการเบิก'
,
type
:
'link'
},
{
path
:
'/admin/approve-borrow'
,
title
:
'อนุมัติการเบิก'
,
type
:
'link'
},
{
path
:
'/admin/return-borrow'
,
title
:
'อนุมัติการคืน'
,
type
:
'link'
},
{
icon
:
'user-check'
,
path
:
'/admin/admin-manage'
,
title
:
'จัดการสิทธิ์ผู้ดูแลระบบ'
,
path
:
'/admin/history-product'
,
title
:
'ประวัติการทำรายการ'
,
type
:
'link'
,
},
// { headTitle: 'User Management' },
];
],
}]
}
getCompanyMenu
()
{
...
...
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