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
e38f46f9
Commit
e38f46f9
authored
Mar 18, 2025
by
Ooh-Ao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
stock projectr
parent
0987f285
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
144 additions
and
68 deletions
+144
-68
project_equipment_controller.cpython-312.pyc
.../__pycache__/project_equipment_controller.cpython-312.pyc
+0
-0
project_equipment_controller.py
API-Fast/src/controllers/project_equipment_controller.py
+23
-20
project_equipment.cpython-312.pyc
.../src/models/__pycache__/project_equipment.cpython-312.pyc
+0
-0
project_equipment.py
API-Fast/src/models/project_equipment.py
+2
-2
project_equipment_routes.cpython-312.pyc
...utes/__pycache__/project_equipment_routes.cpython-312.pyc
+0
-0
project_equipment_routes.py
API-Fast/src/routes/project_equipment_routes.py
+12
-1
project_equipment_schema.cpython-312.pyc
...emas/__pycache__/project_equipment_schema.cpython-312.pyc
+0
-0
project_equipment_schema.py
API-Fast/src/schemas/project_equipment_schema.py
+5
-1
5bc2ebf9-bff5-4672-aa99-bc6f37c18024.jpg
.../uploaded_images/5bc2ebf9-bff5-4672-aa99-bc6f37c18024.jpg
+0
-0
admin-project-equirement.component.html
...roject-equirement/admin-project-equirement.component.html
+0
-0
admin-project-equirement.component.ts
...-project-equirement/admin-project-equirement.component.ts
+81
-21
project-equipments.ts
Web-Manage/src/app/DPU/models/project-equipments.ts
+12
-10
project-equipments.service.ts
...Manage/src/app/DPU/services/project-equipments.service.ts
+8
-12
project-members.service.ts
Web-Manage/src/app/DPU/services/project-members.service.ts
+1
-1
No files found.
API-Fast/src/controllers/__pycache__/project_equipment_controller.cpython-312.pyc
View file @
e38f46f9
No preview for this file type
API-Fast/src/controllers/project_equipment_controller.py
View file @
e38f46f9
# myproject/controllers/project_equipment_controller.py
from
fastapi
import
HTTPException
from
sqlalchemy.ext.asyncio
import
AsyncSession
from
sqlalchemy
import
select
from
sqlalchemy.exc
import
SQLAlchemyError
from
sqlalchemy.orm
import
selectinload
from
uuid
import
UUID
from
..models.project_equipment
import
ProjectEquipment
from
..models.project
import
Project
from
..models.equipment
import
Equipment
from
..schemas.project_equipment_schema
import
(
ProjectEquipmentCreate
)
from
..schemas.project_equipment_schema
import
ProjectEquipmentCreate
# CREATE
async
def
create_project_equipment
(
db
:
AsyncSession
,
pe_in
:
ProjectEquipmentCreate
):
# ถ้าต้องการตรวจสอบว่ามี project/equipment จริงหรือไม่
# project = await db.get(Project, pe_in.projectId)
# if not project:
# raise HTTPException(status_code=400, detail="Invalid projectId")
#
# equipment = await db.get(Equipment, pe_in.equipmentId)
# if not equipment:
# raise HTTPException(status_code=400, detail="Invalid equipmentId")
new_pe
=
ProjectEquipment
(
projectId
=
pe_in
.
projectId
,
equipmentId
=
pe_in
.
equipmentId
,
quantity_in_project
=
pe_in
.
quantity_in_project
)
try
:
db
.
add
(
new_pe
)
await
db
.
commit
()
...
...
@@ -39,15 +26,23 @@ async def create_project_equipment(db: AsyncSession, pe_in: ProjectEquipmentCrea
raise
HTTPException
(
status_code
=
400
,
detail
=
str
(
e
.
orig
))
return
new_pe
# READ ALL
# READ ALL
(แสดงข้อมูล Project และ Equipment แบบ nested)
async
def
get_all_project_equipments
(
db
:
AsyncSession
):
result
=
await
db
.
execute
(
select
(
ProjectEquipment
))
stmt
=
select
(
ProjectEquipment
)
.
options
(
selectinload
(
ProjectEquipment
.
project
),
selectinload
(
ProjectEquipment
.
equipment
)
)
result
=
await
db
.
execute
(
stmt
)
return
result
.
scalars
()
.
all
()
# READ ONE
# READ ONE
(แสดงข้อมูล Project และ Equipment แบบ nested)
async
def
get_project_equipment_by_id
(
db
:
AsyncSession
,
pe_id
:
UUID
):
pe_db
=
await
db
.
get
(
ProjectEquipment
,
pe_id
)
# สั้นลง
return
pe_db
stmt
=
select
(
ProjectEquipment
)
.
options
(
selectinload
(
ProjectEquipment
.
project
),
selectinload
(
ProjectEquipment
.
equipment
)
)
.
where
(
ProjectEquipment
.
peId
==
pe_id
)
result
=
await
db
.
execute
(
stmt
)
return
result
.
scalar_one_or_none
()
# UPDATE
async
def
update_project_equipment
(
db
:
AsyncSession
,
pe_id
:
UUID
,
pe_in
:
ProjectEquipmentCreate
):
...
...
@@ -85,3 +80,11 @@ async def delete_project_equipment(db: AsyncSession, pe_id: UUID):
raise
HTTPException
(
status_code
=
400
,
detail
=
str
(
e
.
orig
))
return
{
"message"
:
"ProjectEquipment deleted successfully"
}
# GET Equipment by ProjectId
async
def
get_equipment_by_project_id
(
db
:
AsyncSession
,
project_id
:
UUID
):
stmt
=
select
(
ProjectEquipment
)
.
options
(
selectinload
(
ProjectEquipment
.
equipment
)
)
.
where
(
ProjectEquipment
.
projectId
==
project_id
)
result
=
await
db
.
execute
(
stmt
)
return
result
.
scalars
()
.
all
()
API-Fast/src/models/__pycache__/project_equipment.cpython-312.pyc
View file @
e38f46f9
No preview for this file type
API-Fast/src/models/project_equipment.py
View file @
e38f46f9
...
...
@@ -28,8 +28,8 @@ class ProjectEquipment(Base):
quantity_in_project
=
Column
(
Integer
,
nullable
=
False
,
default
=
0
)
# Relationship กลับไปยัง Project และ Equipment
project
=
relationship
(
"Project"
,
back_populates
=
"project_equipment"
)
equipment
=
relationship
(
"Equipment"
,
back_populates
=
"project_equipment
"
)
project
=
relationship
(
"Project"
,
back_populates
=
"project_equipment"
,
lazy
=
"joined"
)
equipment
=
relationship
(
"Equipment"
,
lazy
=
"joined
"
)
# เชื่อมโยงกับ BorrowTransaction
borrow_transactions
=
relationship
(
...
...
API-Fast/src/routes/__pycache__/project_equipment_routes.cpython-312.pyc
View file @
e38f46f9
No preview for this file type
API-Fast/src/routes/project_equipment_routes.py
View file @
e38f46f9
...
...
@@ -11,7 +11,8 @@ from ..controllers.project_equipment_controller import (
get_all_project_equipments
,
get_project_equipment_by_id
,
update_project_equipment
,
delete_project_equipment
delete_project_equipment
,
get_equipment_by_project_id
)
from
..schemas.project_equipment_schema
import
(
ProjectEquipmentCreate
,
...
...
@@ -63,3 +64,12 @@ async def delete_pe_endpoint(
db
:
AsyncSession
=
Depends
(
get_db
)
):
return
await
delete_project_equipment
(
db
,
peId
)
@router.get
(
"/project/{projectId}"
,
response_model
=
List
[
ProjectEquipmentResponse
])
async
def
get_equipment_for_project
(
projectId
:
UUID
,
db
:
AsyncSession
=
Depends
(
get_db
)
):
pes
=
await
get_equipment_by_project_id
(
db
,
projectId
)
return
pes
\ No newline at end of file
API-Fast/src/schemas/__pycache__/project_equipment_schema.cpython-312.pyc
View file @
e38f46f9
No preview for this file type
API-Fast/src/schemas/project_equipment_schema.py
View file @
e38f46f9
# myproject/schemas/project_equipment_schema.py
from
pydantic
import
BaseModel
from
typing
import
Optional
from
uuid
import
UUID
from
.project_schema
import
ProjectResponse
from
.equipment_schema
import
EquipmentResponse
class
ProjectEquipmentBase
(
BaseModel
):
quantity_in_project
:
int
=
0
...
...
@@ -14,6 +16,8 @@ class ProjectEquipmentResponse(ProjectEquipmentBase):
peId
:
UUID
projectId
:
UUID
equipmentId
:
UUID
project
:
Optional
[
ProjectResponse
]
=
None
equipment
:
Optional
[
EquipmentResponse
]
=
None
class
Config
:
orm_mode
=
True
API-Fast/uploaded_images/5bc2ebf9-bff5-4672-aa99-bc6f37c18024.jpg
0 → 100644
View file @
e38f46f9
3.65 KB
Web-Manage/src/app/DPU/company-management/admin-project-equirement/admin-project-equirement.component.html
View file @
e38f46f9
This diff is collapsed.
Click to expand it.
Web-Manage/src/app/DPU/company-management/admin-project-equirement/admin-project-equirement.component.ts
View file @
e38f46f9
import
{
ProjectEquipmentService
}
from
'./../../services/project-equipments.service'
;
import
{
CommonModule
}
from
"@angular/common"
;
import
{
ChangeDetectionStrategy
,
Component
,
ElementRef
,
ViewChild
}
from
'@angular/core'
;
import
{
NgSelectModule
}
from
"@ng-select/ng-select"
;
import
{
TranslateModule
,
TranslateService
}
from
"@ngx-translate/core"
;
import
{
FormsModule
}
from
"@angular/forms"
;
import
swal
from
'sweetalert'
;
import
{
MatPaginator
,
PageEvent
}
from
"@angular/material/paginator"
;
import
{
SharedModule
}
from
"../../../shared/shared.module"
;
import
{
UserProfileModel
}
from
"../../models/user.model"
;
import
{
UserService
}
from
"../../services/user.service"
;
import
{
TokenService
}
from
"../../../shared/services/token.service"
;
import
{
FileUploadModule
}
from
'ng2-file-upload'
;
import
{
FileItem
,
FileUploader
,
ParsedResponseHeaders
}
from
"ng2-file-upload"
;
import
{
environment
}
from
"../../../../environments/environment"
;
import
{
EquipmentModel
,
EquipmentStockModel
}
from
"../../models/equipments.model"
;
import
{
EquipmentService
}
from
"../../services/equirement.service"
;
import
{
HttpClient
}
from
"@angular/common/http"
;
import
{
ChangeDetectionStrategy
,
Component
,
ElementRef
,
ViewChild
}
from
'@angular/core'
;
import
{
NgSelectModule
}
from
"@ng-select/ng-select"
;
import
{
TranslateModule
,
TranslateService
}
from
"@ngx-translate/core"
;
import
{
FormsModule
}
from
"@angular/forms"
;
import
swal
from
'sweetalert'
;
import
{
MatPaginator
,
PageEvent
}
from
"@angular/material/paginator"
;
import
{
SharedModule
}
from
"../../../shared/shared.module"
;
import
{
UserProfileModel
}
from
"../../models/user.model"
;
import
{
UserService
}
from
"../../services/user.service"
;
import
{
TokenService
}
from
"../../../shared/services/token.service"
;
import
{
FileUploadModule
}
from
'ng2-file-upload'
;
import
{
FileItem
,
FileUploader
,
ParsedResponseHeaders
}
from
"ng2-file-upload"
;
import
{
environment
}
from
"../../../../environments/environment"
;
import
{
EquipmentModel
,
EquipmentStockModel
}
from
"../../models/equipments.model"
;
import
{
EquipmentService
}
from
"../../services/equirement.service"
;
import
{
HttpClient
}
from
"@angular/common/http"
;
import
{
ProjectEquipmentModel
}
from
'../../models/project-equipments'
;
@
Component
({
selector
:
'app-admin-project-equirement'
,
...
...
@@ -38,8 +40,12 @@ export class AdminProjectEquirementComponent {
someSelected
=
false
;
uploaderProfile
:
FileUploader
|
undefined
;
uploadErrorMsg
:
string
=
""
;
itemsList
:
EquipmentModel
[]
=
[]
filterList
:
EquipmentModel
[]
=
[]
itemsList
:
ProjectEquipmentModel
[]
=
[]
filterList
:
ProjectEquipmentModel
[]
=
[]
itemsListAll
:
EquipmentModel
[]
=
[]
filterListAll
:
EquipmentModel
[]
=
[]
selectModel
:
EquipmentModel
=
new
EquipmentModel
()
selectStock
?:
EquipmentStockModel
selectedItems
=
new
Map
<
string
,
boolean
>
();
...
...
@@ -60,7 +66,7 @@ export class AdminProjectEquirementComponent {
projectId
=
""
_searchTerm
=
""
;
isEdit
=
false
;
constructor
(
private
http
:
HttpClient
,
private
eqService
:
EquipmentService
,
public
translate
:
TranslateService
,
private
tokenService
:
Token
Service
)
{
constructor
(
private
http
:
HttpClient
,
private
eqService
:
EquipmentService
,
public
translate
:
TranslateService
,
private
tokenService
:
TokenService
,
private
projectEquipmentService
:
ProjectEquipment
Service
)
{
this
.
uploadConfig
()
this
.
projectId
=
this
.
tokenService
.
getSelectCompany
().
projectId
!
;
}
...
...
@@ -126,7 +132,19 @@ export class AdminProjectEquirementComponent {
}
ngOnInit
():
void
{
this
.
getCompanyEquirment
()
this
.
getProjectEquirment
()
}
getCompanyEquirment
(){
this
.
eqService
.
getLists
().
subscribe
(
result
=>
{
this
.
itemsListAll
=
result
.
filter
(
e
=>
e
.
quantity
>
0
)
this
.
updatePagedItemsAll
()
})
}
getProjectEquirment
(){
this
.
projectEquipmentService
.
getLists
(
this
.
projectId
).
subscribe
(
result
=>
{
this
.
itemsList
=
result
this
.
updatePagedItems
()
})
...
...
@@ -136,8 +154,8 @@ export class AdminProjectEquirementComponent {
this
.
pageIndex
=
0
;
return
this
.
itemsList
?.
filter
(
(
x
)
=>
x
.
equipmentName
.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
description
?.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
x
.
equipment
.
equipmentName
.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
||
x
.
equipment
.
description
?.
toLowerCase
().
indexOf
(
v
.
toLowerCase
())
!==
-
1
);
}
...
...
@@ -247,6 +265,13 @@ export class AdminProjectEquirementComponent {
this
.
filterList
=
this
.
itemsList
}
updatePagedItemsAll
()
{
const
startIndex
=
this
.
pageIndex
*
10
;
const
endIndex
=
startIndex
+
10
;
// this.filterList = this.itemsList.slice(startIndex, endIndex);
this
.
filterListAll
=
this
.
itemsListAll
}
saveStock
()
{
console
.
log
(
this
.
selectStock
)
swal
({
...
...
@@ -270,5 +295,40 @@ export class AdminProjectEquirementComponent {
}
stock
(
item
:
EquipmentModel
)
{
if
(
item
.
quantity
>
0
)
{
swal
({
title
:
"Are you sure?"
,
text
:
"คุณต้องการบันทึกหรือไม่"
,
icon
:
"warning"
,
dangerMode
:
false
,
buttons
:
[
"Cancel"
,
"Confirm"
],
})
.
then
((
willDelete
:
any
)
=>
{
if
(
willDelete
)
{
this
.
projectEquipmentService
.
save
({
"quantity_in_project"
:
item
.
quantity
,
"projectId"
:
this
.
projectId
,
"equipmentId"
:
item
.
equipmentId
}).
subscribe
(
result
=>
{
this
.
selectStock
=
new
EquipmentStockModel
()
this
.
selectStock
.
quantity
=
item
.
quantity
this
.
selectStock
.
equipmentId
=
item
.
equipmentId
this
.
selectStock
.
created_by
=
this
.
tokenService
.
getUser
().
member
.
memberId
this
.
selectStock
.
action
=
"OUTBOUND"
,
this
.
selectStock
.
remark
=
"ย้ายเข้าสู่โครงการ "
+
this
.
tokenService
.
getSelectCompany
().
projectId
+
" ("
+
this
.
tokenService
.
getSelectCompany
().
project_code
+
")"
this
.
eqService
.
stock
(
this
.
selectStock
!
).
subscribe
(
result
=>
{
swal
(
"Save Success!!"
,
"บันทึกข้อมูลสำเร็จ"
,
"success"
);
this
.
getProjectEquirment
()
this
.
getCompanyEquirment
()
this
.
childModal
?.
nativeElement
.
click
()
})
})
}
});
}
}
}
Web-Manage/src/app/DPU/models/project-equipments.ts
View file @
e38f46f9
import
{
TranslateService
}
from
"@ngx-translate/core"
;
import
{
BaseModel
}
from
"./base.model"
;
import
{
ProjectModel
}
from
"./project.model"
;
import
{
EquipmentModel
}
from
"./equipments.model"
;
export
class
ProjectEquipmentModel
extends
BaseModel
{
pe_id
:
string
;
project_id
:
string
;
equipment_id
?:
string
;
quantity_in_project
:
number
;
created_at
:
string
;
updated_at
:
string
;
peId
:
string
;
projectId
:
string
;
equipmentId
:
string
;
project
:
ProjectModel
;
equipment
:
EquipmentModel
;
constructor
(
data
?:
Partial
<
ProjectEquipmentModel
>
,
translateService
?:
TranslateService
)
{
super
(
data
,
translateService
);
this
.
pe
_id
=
data
?.
pe_i
d
??
''
;
this
.
project
_id
=
data
?.
project_i
d
??
''
;
this
.
equipment
_id
=
data
?.
equipment_i
d
??
''
;
this
.
pe
Id
=
data
?.
peI
d
??
''
;
this
.
project
Id
=
data
?.
projectI
d
??
''
;
this
.
equipment
Id
=
data
?.
equipmentI
d
??
''
;
this
.
quantity_in_project
=
data
?.
quantity_in_project
??
0
;
this
.
created_at
=
data
?.
created_at
??
new
Date
().
toISOString
();
this
.
updated_at
=
data
?.
updated_at
??
new
Date
().
toISOString
();
this
.
project
=
data
?.
project
||
new
ProjectModel
();
this
.
equipment
=
data
?.
equipment
?
new
EquipmentModel
(
data
.
equipment
)
:
new
EquipmentModel
();
}
}
Web-Manage/src/app/DPU/services/project-equipments.service.ts
View file @
e38f46f9
import
{
HttpClient
}
from
'@angular/common/http'
;
import
{
Injectable
}
from
'@angular/core'
;
import
{
environment
}
from
'src/environments/environment'
;
import
{
map
,
tap
,
switchMap
,
filter
,
reduce
}
from
"rxjs/operators"
;
import
{
ProjectEquipmentModel
}
from
'../models/project-equipments'
;
import
{
environment
}
from
'../../../environments/environment'
;
@
Injectable
({
providedIn
:
'root'
})
export
class
ProjectEquipmentService
{
apiBaseUrl
=
environment
.
baseUrl
+
"/project-equipments"
;
apiBaseUrl
=
environment
.
baseUrl
+
"/project-equipments"
;
constructor
(
private
http
:
HttpClient
)
{
}
...
...
@@ -19,34 +19,30 @@ apiBaseUrl = environment.baseUrl + "/project-equipments";
.
get
<
ProjectEquipmentModel
>
(
this
.
apiBaseUrl
+
"/"
+
id
)
.
pipe
(
map
((
e
)
=>
new
ProjectEquipmentModel
(
e
)));
}
getLists
()
{
getLists
(
projectId
:
string
)
{
return
this
.
http
.
get
<
ProjectEquipmentModel
[]
>
(
this
.
apiBaseUrl
)
.
get
<
ProjectEquipmentModel
[]
>
(
this
.
apiBaseUrl
+
"/project/"
+
projectId
)
.
pipe
(
map
((
e
)
=>
e
.
map
((
e
)
=>
new
ProjectEquipmentModel
(
e
)))
);
}
save
(
body
:
ProjectEquipmentModel
)
{
return
this
.
http
.
post
<
{
"message"
:
string
,
"user"
:
ProjectEquipmentModel
}
>
(
this
.
apiBaseUrl
,
new
ProjectEquipmentModel
(
body
));
save
(
body
:
any
)
{
return
this
.
http
.
post
<
ProjectEquipmentModel
>
(
this
.
apiBaseUrl
,
body
);
}
update
(
body
:
ProjectEquipmentModel
)
{
return
this
.
http
.
put
<
{
"message"
:
string
,
"user"
:
ProjectEquipmentModel
}
>
(
this
.
apiBaseUrl
+
"/"
+
body
.
equipment
_i
d
,
new
ProjectEquipmentModel
(
body
));
}
>
(
this
.
apiBaseUrl
+
"/"
+
body
.
equipment
I
d
,
new
ProjectEquipmentModel
(
body
));
}
delete
(
body
:
ProjectEquipmentModel
)
{
return
this
.
http
.
delete
<
{
"message"
:
string
,
"user"
:
ProjectEquipmentModel
}
>
(
this
.
apiBaseUrl
+
"/"
+
body
.
equipment
_i
d
);
}
>
(
this
.
apiBaseUrl
+
"/"
+
body
.
equipment
I
d
);
}
...
...
Web-Manage/src/app/DPU/services/project-members.service.ts
View file @
e38f46f9
...
...
@@ -21,7 +21,7 @@ export class ProjectMemberService {
getLists
(
projectId
:
string
)
{
return
this
.
http
.
get
<
ProjectMemberModel
[]
>
(
this
.
apiBaseUrl
)
.
get
<
ProjectMemberModel
[]
>
(
this
.
apiBaseUrl
+
"/project/"
+
projectId
)
.
pipe
(
map
((
e
)
=>
e
.
map
((
e
)
=>
new
ProjectMemberModel
(
e
)))
);
...
...
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