Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Q
QLNS_N01
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nguyễn Văn Hiếu
QLNS_N01
Commits
4755371a
Commit
4755371a
authored
Jun 16, 2019
by
đinh thị đầm
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
t
parent
fcb6432d
Changes
58
Hide whitespace changes
Inline
Side-by-side
Showing
58 changed files
with
2032 additions
and
758 deletions
+2032
-758
src/main/java/com/itsol/quantrivanphong/manager/project/project/bussiness/ProjectBussiness.java
...g/manager/project/project/bussiness/ProjectBussiness.java
+16
-9
src/main/java/com/itsol/quantrivanphong/manager/project/project/bussiness/ProjectBussinessImpl.java
...nager/project/project/bussiness/ProjectBussinessImpl.java
+78
-45
src/main/java/com/itsol/quantrivanphong/manager/project/project/controller/ProjectController.java
...manager/project/project/controller/ProjectController.java
+14
-23
src/main/java/com/itsol/quantrivanphong/manager/project/project/dto/ProjectDTO.java
...antrivanphong/manager/project/project/dto/ProjectDTO.java
+1
-3
src/main/java/com/itsol/quantrivanphong/manager/project/project/repository/ProjectRepository.java
...manager/project/project/repository/ProjectRepository.java
+6
-2
src/main/java/com/itsol/quantrivanphong/manager/project/project/repository/ProjectRepositoryImpl.java
...ger/project/project/repository/ProjectRepositoryImpl.java
+0
-9
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/bussiness/ProjectGroupBussiness.java
...project/projectgroup/bussiness/ProjectGroupBussiness.java
+15
-9
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/bussiness/ProjectGroupBussinessImpl.java
...ect/projectgroup/bussiness/ProjectGroupBussinessImpl.java
+104
-37
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/common/EmployeeProject.java
.../manager/project/projectgroup/common/EmployeeProject.java
+9
-0
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/common/EmployeeRepositoryImpl.java
...r/project/projectgroup/common/EmployeeRepositoryImpl.java
+0
-23
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/common/ProjectGroupUtils.java
...anager/project/projectgroup/common/ProjectGroupUtils.java
+7
-6
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/controller/ProjectGroupController.java
...oject/projectgroup/controller/ProjectGroupController.java
+24
-19
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/dto/ProjectGroupDTO.java
...ong/manager/project/projectgroup/dto/ProjectGroupDTO.java
+3
-3
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/repository/ProjectGroupRepository.java
...oject/projectgroup/repository/ProjectGroupRepository.java
+6
-2
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/repository/ProjectGroupRepositoryImpl.java
...t/projectgroup/repository/ProjectGroupRepositoryImpl.java
+0
-9
src/main/java/com/itsol/quantrivanphong/manager/project/test.java
.../java/com/itsol/quantrivanphong/manager/project/test.java
+0
-4
src/main/java/com/itsol/quantrivanphong/model/Eproject.java
src/main/java/com/itsol/quantrivanphong/model/Eproject.java
+7
-6
src/main/java/com/itsol/quantrivanphong/model/Issues.java
src/main/java/com/itsol/quantrivanphong/model/Issues.java
+18
-6
src/main/java/com/itsol/quantrivanphong/model/IssuesComment.java
...n/java/com/itsol/quantrivanphong/model/IssuesComment.java
+32
-0
src/main/java/com/itsol/quantrivanphong/model/Project.java
src/main/java/com/itsol/quantrivanphong/model/Project.java
+6
-5
src/main/java/com/itsol/quantrivanphong/report/issue/bussiness/IssueBussinesImpl.java
...trivanphong/report/issue/bussiness/IssueBussinesImpl.java
+132
-0
src/main/java/com/itsol/quantrivanphong/report/issue/bussiness/IssueBussiness.java
...uantrivanphong/report/issue/bussiness/IssueBussiness.java
+15
-0
src/main/java/com/itsol/quantrivanphong/report/issue/common/AbstractDaoPage.java
.../quantrivanphong/report/issue/common/AbstractDaoPage.java
+62
-0
src/main/java/com/itsol/quantrivanphong/report/issue/common/AbstractEntityManagerDao.java
...anphong/report/issue/common/AbstractEntityManagerDao.java
+0
-188
src/main/java/com/itsol/quantrivanphong/report/issue/common/GennericeEntityManagerDao.java
...nphong/report/issue/common/GennericeEntityManagerDao.java
+0
-14
src/main/java/com/itsol/quantrivanphong/report/issue/common/WrapperResult.java
...ol/quantrivanphong/report/issue/common/WrapperResult.java
+27
-0
src/main/java/com/itsol/quantrivanphong/report/issue/common/WrapperResultObject.java
...ntrivanphong/report/issue/common/WrapperResultObject.java
+55
-0
src/main/java/com/itsol/quantrivanphong/report/issue/controller/IssueController.java
...ntrivanphong/report/issue/controller/IssueController.java
+43
-0
src/main/java/com/itsol/quantrivanphong/report/issue/dto/IssueDTO.java
.../com/itsol/quantrivanphong/report/issue/dto/IssueDTO.java
+21
-0
src/main/java/com/itsol/quantrivanphong/report/issue/repository/IssueRepository.java
...ntrivanphong/report/issue/repository/IssueRepository.java
+3
-2
src/main/java/com/itsol/quantrivanphong/report/issue/repository/IssueRepositoryImpl.java
...vanphong/report/issue/repository/IssueRepositoryImpl.java
+0
-9
src/main/java/com/itsol/quantrivanphong/report/issue/test.java
...ain/java/com/itsol/quantrivanphong/report/issue/test.java
+0
-4
src/main/java/com/itsol/quantrivanphong/report/issuescomment/bussiness/IssuesCommentBussiness.java
...eport/issuescomment/bussiness/IssuesCommentBussiness.java
+15
-0
src/main/java/com/itsol/quantrivanphong/report/issuescomment/bussiness/IssuesCommentBussinessImpl.java
...t/issuescomment/bussiness/IssuesCommentBussinessImpl.java
+84
-0
src/main/java/com/itsol/quantrivanphong/report/issuescomment/controller/IssuesControllers.java
...ng/report/issuescomment/controller/IssuesControllers.java
+27
-0
src/main/java/com/itsol/quantrivanphong/report/issuescomment/dto/IssuesCommentDTO.java
...rivanphong/report/issuescomment/dto/IssuesCommentDTO.java
+19
-0
src/main/java/com/itsol/quantrivanphong/report/issuescomment/repository/IssuesCommentRepository.java
...ort/issuescomment/repository/IssuesCommentRepository.java
+11
-0
src/main/resources/public/index.html
src/main/resources/public/index.html
+10
-1
src/main/resources/public/js/app.js
src/main/resources/public/js/app.js
+193
-9
src/main/resources/public/layout/layout1.html
src/main/resources/public/layout/layout1.html
+18
-7
src/main/resources/public/pages/issue/IssueAdd.html
src/main/resources/public/pages/issue/IssueAdd.html
+28
-5
src/main/resources/public/pages/issue/IssueView.html
src/main/resources/public/pages/issue/IssueView.html
+41
-19
src/main/resources/public/pages/project/groupproject/groupProjectAddView.html
...ublic/pages/project/groupproject/groupProjectAddView.html
+27
-21
src/main/resources/public/pages/project/groupproject/groupProjectEditView.html
...blic/pages/project/groupproject/groupProjectEditView.html
+4
-6
src/main/resources/public/pages/project/groupproject/groupProjectView.html
...s/public/pages/project/groupproject/groupProjectView.html
+32
-20
src/main/resources/public/pages/project/project/projectAddViews.html
...sources/public/pages/project/project/projectAddViews.html
+21
-15
src/main/resources/public/pages/project/project/projectController.js
...sources/public/pages/project/project/projectController.js
+0
-24
src/main/resources/public/pages/project/project/projectEditViews.html
...ources/public/pages/project/project/projectEditViews.html
+24
-21
src/main/resources/public/pages/project/project/projectListViews.html
...ources/public/pages/project/project/projectListViews.html
+47
-25
src/main/resources/public/pages/report/employeeListViews.html
...main/resources/public/pages/report/employeeListViews.html
+43
-0
src/main/resources/public/pages/report/employeeListViews1.html
...ain/resources/public/pages/report/employeeListViews1.html
+74
-0
src/main/resources/public/pages/report/report.html
src/main/resources/public/pages/report/report.html
+0
-91
src/main/resources/public/pages/report/reportController.js
src/main/resources/public/pages/report/reportController.js
+319
-57
src/main/resources/public/pages/report/reportDetailPage.html
src/main/resources/public/pages/report/reportDetailPage.html
+23
-0
src/main/resources/public/pages/report/reportListPage.html
src/main/resources/public/pages/report/reportListPage.html
+46
-0
src/main/resources/public/pages/report/reportPage.html
src/main/resources/public/pages/report/reportPage.html
+126
-0
src/main/resources/public/pages/report/timeSheetListViews.html
...ain/resources/public/pages/report/timeSheetListViews.html
+50
-0
src/main/resources/public/pages/report/timeSheetReport.html
src/main/resources/public/pages/report/timeSheetReport.html
+46
-0
No files found.
src/main/java/com/itsol/quantrivanphong/manager/project/project/bussiness/ProjectBussiness.java
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.project.bussiness
;
package
com.itsol.quantrivanphong.manager.project.project.bussiness
;
import
com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO
;
import
com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO
;
import
com.itsol.quantrivanphong.report.issue.common.AbstractDaoPage
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
java.util.List
;
import
java.util.List
;
public
interface
ProjectBussiness
{
public
interface
ProjectBussiness
{
// Danh sách dự án tất cả các dự án
// Danh sách dự án tất cả các dự án
List
<
ProjectDTO
>
findAllProject
();
List
<
ProjectDTO
>
findAllProject
();
// upload thông tin dự án
String
updateProject
(
ProjectDTO
dto
);
// upload thông tin dự án
// thêm dự án mới
WrapperResult
updateProject
(
ProjectDTO
dto
);
String
saveProject
(
ProjectDTO
dto
);
// tìm kiếm dự án theo id
// thêm dự án mới
WrapperResult
saveProject
(
ProjectDTO
dto
);
// tìm kiếm dự án theo id
ProjectDTO
findByProjectId
(
Integer
id
);
ProjectDTO
findByProjectId
(
Integer
id
);
// xóa list dự án theo arr ids
String
deleteProject
(
Integer
[]
ids
);
// xóa một project
// xóa một project
String
deleteProjectById
(
Integer
ids
);
WrapperResult
deleteProjectById
(
Integer
ids
);
AbstractDaoPage
<
ProjectDTO
>
getPageProject
(
int
page
,
int
pageSize
);
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/project/bussiness/ProjectBussinessImpl.java
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.project.bussiness
;
package
com.itsol.quantrivanphong.manager.project.project.bussiness
;
import
com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO
;
import
com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO
;
import
com.itsol.quantrivanphong.model.Project
;
import
com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository
;
import
com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository
;
import
com.itsol.quantrivanphong.model.Project
;
import
com.itsol.quantrivanphong.report.issue.common.AbstractDaoPage
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
org.apache.log4j.Logger
;
import
org.apache.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -13,14 +18,13 @@ import java.util.List;
...
@@ -13,14 +18,13 @@ import java.util.List;
@Service
@Service
public
class
ProjectBussinessImpl
implements
ProjectBussiness
{
public
class
ProjectBussinessImpl
implements
ProjectBussiness
{
private
Logger
logger
=
Logger
.
getLogger
(
ProjectBussinessImpl
.
class
);
private
Logger
logger
=
Logger
.
getLogger
(
ProjectBussinessImpl
.
class
);
private
String
views
=
""
;
@Autowired
@Autowired
private
ProjectRepository
projectRepository
;
private
ProjectRepository
projectRepository
;
@Override
@Override
public
List
<
ProjectDTO
>
findAllProject
()
{
public
List
<
ProjectDTO
>
findAllProject
()
{
try
{
try
{
return
lstDTO
(
projectRepository
.
fin
AllEntity
());
return
lstDTO
(
projectRepository
.
fin
dAll
());
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
info
(
"Lỗi findAll "
+
e
.
getMessage
());
logger
.
info
(
"Lỗi findAll "
+
e
.
getMessage
());
}
}
...
@@ -28,17 +32,22 @@ public class ProjectBussinessImpl implements ProjectBussiness {
...
@@ -28,17 +32,22 @@ public class ProjectBussinessImpl implements ProjectBussiness {
}
}
@Override
@Override
public
String
updateProject
(
ProjectDTO
dto
)
{
public
WrapperResult
updateProject
(
ProjectDTO
dto
)
{
String
views
=
null
;
int
status
=
113
;
try
{
try
{
ProjectDTO
projectDTO
=
findByProjectId
(
dto
.
getId
());
ProjectDTO
projectDTO
=
findByProjectId
(
dto
.
getId
());
dto
.
setStartDate
(
projectDTO
.
getStartDate
());
dto
.
setEndDate
(
projectDTO
.
getEndDate
());
if
(
dto
.
getStartDate
()
==
null
)
{
if
(
dto
.
getStartDate
()
==
null
)
{
views
=
"ngày bắt đầu dự án không được null"
;
views
=
"ngày bắt đầu dự án không được null"
;
}
else
if
(
dto
.
getEndDate
()
==
null
)
{
}
else
if
(
dto
.
getEndDate
()
==
null
)
{
views
=
"ngày dự kiếm kết thúc dự án không được null"
;
views
=
"ngày dự kiếm kết thúc dự án không được null"
;
}
else
if
(
projectDTO
!=
null
)
{
}
else
if
(
projectDTO
!=
null
)
{
ProjectDTO
updateProject
=
modelparseDto
(
projectRepository
.
updateEntity
(
dtoParseModels
(
dto
)));
ProjectDTO
updateProject
=
modelparseDto
(
projectRepository
.
save
(
dtoParseModels
(
dto
)));
if
(
updateProject
!=
null
)
{
if
(
updateProject
!=
null
)
{
views
=
"sửa thành công project"
;
views
=
"sửa thành công project"
;
status
=
200
;
}
}
}
else
{
}
else
{
views
=
"không tìm thấy project phù hợp"
;
views
=
"không tìm thấy project phù hợp"
;
...
@@ -47,32 +56,44 @@ public class ProjectBussinessImpl implements ProjectBussiness {
...
@@ -47,32 +56,44 @@ public class ProjectBussinessImpl implements ProjectBussiness {
logger
.
info
(
"Lỗi update"
+
e
.
getMessage
());
logger
.
info
(
"Lỗi update"
+
e
.
getMessage
());
views
=
"lỗi update project"
;
views
=
"lỗi update project"
;
}
}
return
views
;
return
new
WrapperResult
(
status
,
views
)
;
}
}
@Override
@Override
public
String
saveProject
(
ProjectDTO
dto
)
{
public
WrapperResult
saveProject
(
ProjectDTO
dto
)
{
try
{
String
views
=
null
;
if
(
dto
.
getStartDate
()
==
null
)
{
int
status
=
113
;
views
=
"ngày bắt đầu dự án không được null"
;
if
(
projectRepository
.
findByName
(
dto
.
getName
())
==
null
)
{
}
else
if
(
dto
.
getEndDate
()
==
null
)
{
try
{
views
=
"ngày dự kiếm kết thúc dự án không được null"
;
if
(
dto
.
getStartDate
()
==
null
)
{
}
else
{
views
=
"ngày bắt đầu dự án không được null"
;
dto
.
setStatusPost
(
0
);
}
else
if
(
dto
.
getEndDate
()
==
null
)
{
projectRepository
.
saveEntity
(
dtoParseModels
(
dto
));
views
=
"ngày dự kiếm kết thúc dự án không được null"
;
views
=
"thêm thành công project !"
;
}
else
{
dto
.
setStatus
(
0
);
// projectRepository.saveEntity(dtoParseModels(dto));
ProjectDTO
saveProject
=
modelparseDto
(
projectRepository
.
save
(
dtoParseModels
(
dto
)));
if
(
saveProject
!=
null
)
{
views
=
"thêm thành công project !"
;
status
=
200
;
}
else
{
views
=
"thêm project không thành công!"
;
}
}
}
catch
(
Exception
e
)
{
logger
.
info
(
"Lỗi insert "
+
e
.
getMessage
());
views
=
"Lỗi thêm dữ liệu"
;
}
}
}
catch
(
Exception
e
)
{
}
else
{
logger
.
info
(
"Lỗi insert "
+
e
.
getMessage
());
views
=
"Đã tồn tại Dự Án"
;
views
=
"thêm project không thành công!"
;
}
}
return
views
;
return
new
WrapperResult
(
status
,
views
)
;
}
}
@Override
@Override
public
ProjectDTO
findByProjectId
(
Integer
id
)
{
public
ProjectDTO
findByProjectId
(
Integer
id
)
{
try
{
try
{
ProjectDTO
projectDTO
=
modelparseDto
(
projectRepository
.
find
ByEmtit
yId
(
id
));
ProjectDTO
projectDTO
=
modelparseDto
(
projectRepository
.
find
ProjectB
yId
(
id
));
if
(
projectDTO
!=
null
)
{
if
(
projectDTO
!=
null
)
{
return
projectDTO
;
return
projectDTO
;
}
}
...
@@ -82,30 +103,48 @@ public class ProjectBussinessImpl implements ProjectBussiness {
...
@@ -82,30 +103,48 @@ public class ProjectBussinessImpl implements ProjectBussiness {
return
null
;
return
null
;
}
}
@Override
@Override
public
String
deleteProject
(
Integer
[]
ids
)
{
public
WrapperResult
deleteProjectById
(
Integer
id
)
{
int
count
=
0
;
String
views
=
null
;
count
=
projectRepository
.
deleteEntity
(
ids
);
int
status
=
113
;
if
(
count
!=
0
)
{
logger
.
info
(
"deleteProjectById"
);
views
=
"xóa thành công "
+
count
+
" project"
;
if
(
findByProjectId
(
id
)
!=
null
)
{
try
{
projectRepository
.
deleteById
(
id
);
views
=
"xóa thành công project"
;
status
=
200
;
}
catch
(
Exception
e
)
{
logger
.
info
(
"lỗi :"
+
e
.
getMessage
());
views
=
"Lỗi xóa"
;
}
}
else
{
}
else
{
views
=
"
project
không tồn tại"
;
views
=
"
dự án không tồn tại
không tồn tại"
;
}
}
return
views
;
return
new
WrapperResult
(
status
,
views
)
;
}
}
@Override
@Override
public
String
deleteProjectById
(
Integer
id
)
{
public
AbstractDaoPage
<
ProjectDTO
>
getPageProject
(
int
page
,
int
pageSize
)
{
logger
.
info
(
"deleteProjectById"
);
AbstractDaoPage
<
ProjectDTO
>
abstractDaoPage
=
new
AbstractDaoPage
<
ProjectDTO
>();
int
count
=
0
;
List
<
Project
>
lstM
=
getListPage
(
page
,
pageSize
);
count
=
projectRepository
.
deleteEntityByID
(
id
);
List
<
ProjectDTO
>
listDTO
=
lstDTO
(
lstM
);
if
(
count
!=
0
)
{
abstractDaoPage
.
setLstResult
(
listDTO
);
views
=
"xóa thành công "
+
count
+
" project"
;
abstractDaoPage
.
setPage
(
page
);
abstractDaoPage
.
setMaxPageItem
(
pageSize
);
abstractDaoPage
.
setTotalItem
(
findAllProject
().
size
());
abstractDaoPage
.
setTotalPage
((
int
)
Math
.
ceil
((
double
)
abstractDaoPage
.
getTotalItem
()/
abstractDaoPage
.
getMaxPageItem
()));
return
abstractDaoPage
;
}
public
List
<
Project
>
getListPage
(
int
page
,
int
pageSize
)
{
Pageable
paging
=
PageRequest
.
of
(
page
,
pageSize
);
Page
<
Project
>
pagedResult
=
projectRepository
.
findAll
(
paging
);
if
(
pagedResult
.
hasContent
())
{
return
pagedResult
.
getContent
();
}
else
{
}
else
{
views
=
"project không tồn tại"
;
return
new
ArrayList
<
Project
>()
;
}
}
return
views
;
}
}
public
List
<
ProjectDTO
>
lstDTO
(
List
<
Project
>
lstModels
)
{
public
List
<
ProjectDTO
>
lstDTO
(
List
<
Project
>
lstModels
)
{
...
@@ -123,13 +162,7 @@ public class ProjectBussinessImpl implements ProjectBussiness {
...
@@ -123,13 +162,7 @@ public class ProjectBussinessImpl implements ProjectBussiness {
dto
.
setDescriptions
(
model
.
getDescriptions
());
dto
.
setDescriptions
(
model
.
getDescriptions
());
dto
.
setStartDate
(
model
.
getStartDate
());
dto
.
setStartDate
(
model
.
getStartDate
());
dto
.
setEndDate
(
model
.
getEndDate
());
dto
.
setEndDate
(
model
.
getEndDate
());
if
(
model
.
getStatus
()==
0
){
dto
.
setStatus
(
model
.
getStatus
());
dto
.
setStatusGet
(
"Dự Kiến"
);
}
else
if
(
model
.
getStatus
()==
1
){
dto
.
setStatusGet
(
"Đang Tiến Hành"
);
}
else
{
dto
.
setStatusGet
(
"Đã Hoàn Thành"
);
}
return
dto
;
return
dto
;
}
}
...
@@ -141,7 +174,7 @@ public class ProjectBussinessImpl implements ProjectBussiness {
...
@@ -141,7 +174,7 @@ public class ProjectBussinessImpl implements ProjectBussiness {
project
.
setDescriptions
(
projectDTO
.
getDescriptions
());
project
.
setDescriptions
(
projectDTO
.
getDescriptions
());
project
.
setStartDate
(
projectDTO
.
getStartDate
());
project
.
setStartDate
(
projectDTO
.
getStartDate
());
project
.
setEndDate
(
projectDTO
.
getEndDate
());
project
.
setEndDate
(
projectDTO
.
getEndDate
());
project
.
setStatus
(
projectDTO
.
getStatus
Post
());
project
.
setStatus
(
projectDTO
.
getStatus
());
return
project
;
return
project
;
}
}
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/project/controller/ProjectController.java
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.project.controller
;
package
com.itsol.quantrivanphong.manager.project.project.controller
;
import
com.itsol.quantrivanphong.report.issue.common.SystemConstants
;
import
com.itsol.quantrivanphong.manager.project.project.bussiness.ProjectBussiness
;
import
com.itsol.quantrivanphong.manager.project.project.bussiness.ProjectBussiness
;
import
com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO
;
import
com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO
;
import
com.itsol.quantrivanphong.report.issue.common.SystemConstants
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
...
@@ -16,43 +17,33 @@ public class ProjectController {
...
@@ -16,43 +17,33 @@ public class ProjectController {
@Autowired
@Autowired
private
ProjectBussiness
projectBussiness
;
private
ProjectBussiness
projectBussiness
;
@GetMapping
(
value
=
"/danh-sach-du-an"
)
@GetMapping
(
value
=
"/danh-sach-du-an"
)
public
ResponseEntity
<
List
<
ProjectDTO
>>
getAllProject
(){
public
ResponseEntity
<
List
<
ProjectDTO
>>
getAllProject
(){
return
ResponseEntity
.
ok
(
projectBussiness
.
findAllProject
());
return
ResponseEntity
.
ok
(
projectBussiness
.
findAllProject
());
}
}
@GetMapping
(
value
=
"/danh-sach-du-an/{page}/{pageSize}"
)
public
ResponseEntity
getPageProject
(
@PathVariable
(
"page"
)
int
page
,
@PathVariable
(
"pageSize"
)
int
pageSize
){
return
ResponseEntity
.
ok
(
projectBussiness
.
getPageProject
(
page
,
pageSize
));
}
@GetMapping
(
value
=
"/chi-tiet-du-an/{id}"
,
produces
=
SystemConstants
.
TYPE_JSON
)
@GetMapping
(
value
=
"/chi-tiet-du-an/{id}"
,
produces
=
SystemConstants
.
TYPE_JSON
)
public
ResponseEntity
<
ProjectDTO
>
findProjectId
(
@PathVariable
Integer
id
){
public
ResponseEntity
findProjectId
(
@PathVariable
Integer
id
){
ProjectDTO
projectDTO
=
projectBussiness
.
findByProjectId
(
id
);
ProjectDTO
projectDTO
=
projectBussiness
.
findByProjectId
(
id
);
return
ResponseEntity
.
ok
(
projectDTO
);
return
ResponseEntity
.
ok
(
projectDTO
);
}
}
@PostMapping
(
value
=
"/them-du-an"
,
consumes
=
SystemConstants
.
TYPE_JSON
)
@PostMapping
(
value
=
"/them-du-an"
,
consumes
=
SystemConstants
.
TYPE_JSON
)
public
ResponseEntity
saveProject
(
@RequestBody
ProjectDTO
projectDTO
){
public
ResponseEntity
saveProject
(
@RequestBody
ProjectDTO
projectDTO
){
String
views
=
projectBussiness
.
saveProject
(
projectDTO
);
WrapperResult
wrapperResult
=
projectBussiness
.
saveProject
(
projectDTO
);
return
ResponseEntity
.
ok
(
views
);
return
ResponseEntity
.
ok
(
wrapperResult
);
}
}
@PutMapping
(
value
=
"/sua-du-an"
,
consumes
=
SystemConstants
.
TYPE_JSON
)
@PutMapping
(
value
=
"/sua-du-an"
,
consumes
=
SystemConstants
.
TYPE_JSON
)
public
ResponseEntity
updateProject
(
@RequestBody
ProjectDTO
projectDTO
){
public
ResponseEntity
updateProject
(
@RequestBody
ProjectDTO
projectDTO
){
String
views
=
projectBussiness
.
updateProject
(
projectDTO
);
WrapperResult
wrapperResult
=
projectBussiness
.
updateProject
(
projectDTO
);
return
ResponseEntity
.
ok
(
views
);
return
ResponseEntity
.
ok
(
wrapperResult
);
}
@DeleteMapping
(
value
=
"/xoa-danh-sach-du-an"
,
consumes
=
SystemConstants
.
TYPE_JSON
)
public
ResponseEntity
deleteProject
(
@RequestBody
ProjectDTO
projectDTO
){
String
views
=
""
;
if
(
projectDTO
.
getIds
()!=
null
){
views
=
projectBussiness
.
deleteProject
(
projectDTO
.
getIds
());
}
else
{
views
=
"không tồn tại"
;
}
return
ResponseEntity
.
ok
(
views
);
}
}
@DeleteMapping
(
value
=
"/xoa-du-an"
,
consumes
=
SystemConstants
.
TYPE_JSON
)
@DeleteMapping
(
value
=
"/xoa-du-an"
,
consumes
=
SystemConstants
.
TYPE_JSON
)
public
ResponseEntity
deleteProjectById
(
@RequestBody
ProjectDTO
projectDTO
){
public
ResponseEntity
deleteProjectById
(
@RequestBody
ProjectDTO
projectDTO
){
String
views
=
""
;
WrapperResult
wrapperResult
=
projectBussiness
.
deleteProjectById
(
projectDTO
.
getId
());
if
(
projectDTO
.
getId
()!=
null
){
return
ResponseEntity
.
ok
(
wrapperResult
);
views
=
projectBussiness
.
deleteProjectById
(
projectDTO
.
getId
());
}
else
{
views
=
"không tồn tại"
;
}
return
ResponseEntity
.
ok
(
views
);
}
}
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/project/dto/ProjectDTO.java
View file @
4755371a
...
@@ -20,9 +20,7 @@ public class ProjectDTO {
...
@@ -20,9 +20,7 @@ public class ProjectDTO {
//ngày kết thúc dự án
//ngày kết thúc dự án
private
Timestamp
endDate
;
private
Timestamp
endDate
;
//trạng thái thêm vào dataBase
//trạng thái thêm vào dataBase
private
Integer
statusPost
;
private
Integer
status
;
//trạng thái lấy dữ liệu lên cline
private
String
statusGet
;
// danh sách id
// danh sách id
private
Integer
[]
ids
;
private
Integer
[]
ids
;
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/project/repository/ProjectRepository.java
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.project.repository
;
package
com.itsol.quantrivanphong.manager.project.project.repository
;
import
com.itsol.quantrivanphong.report.issue.common.GennericeEntityManagerDao
;
import
com.itsol.quantrivanphong.model.Project
;
import
com.itsol.quantrivanphong.model.Project
;
import
org.springframework.data.jpa.repository.JpaRepository
;
public
interface
ProjectRepository
extends
GennericeEntityManagerDao
<
Integer
,
Project
>
{
public
interface
ProjectRepository
extends
JpaRepository
<
Project
,
Integer
>
{
Project
findProjectById
(
Integer
id
);
Project
findProjectByName
(
String
nameProject
);
Project
findByName
(
String
nameProject
);
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/project/repository/ProjectRepositoryImpl.java
deleted
100644 → 0
View file @
fcb6432d
package
com.itsol.quantrivanphong.manager.project.project.repository
;
import
com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao
;
import
com.itsol.quantrivanphong.model.Project
;
import
org.springframework.stereotype.Repository
;
@Repository
public
class
ProjectRepositoryImpl
extends
AbstractEntityManagerDao
<
Integer
,
Project
>
implements
ProjectRepository
{
}
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/bussiness/ProjectGroupBussiness.java
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.projectgroup.bussiness
;
package
com.itsol.quantrivanphong.manager.project.projectgroup.bussiness
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
java.util.List
;
import
java.util.List
;
public
interface
ProjectGroupBussiness
{
public
interface
ProjectGroupBussiness
{
// chi tiết nhóm dự án
// chi tiết nhóm dự án
List
<
ProjectGroupDTO
>
getGroupByProjectId
(
Integer
projectId
);
List
<
ProjectGroupDTO
>
getGroupByProjectId
(
Integer
projectId
);
// thêm thành viên vào nhóm dự án
String
saveEmployeeProject
(
ProjectGroupDTO
dto
);
// thêm thành viên vào nhóm dự án
// sửa thông tin nhóm dự án, các thành viên out nhóm
WrapperResult
saveEmployeeProject
(
ProjectGroupDTO
dto
);
String
updateEmployeeProject
(
ProjectGroupDTO
dto
);
// Tìm kiếm thành viên trong nhóm theo tên đăng nhập
// sửa thông tin nhóm dự án, các thành viên out nhóm
ProjectGroupDTO
findEmployeeProject
(
String
username
);
WrapperResult
updateEmployeeProject
(
ProjectGroupDTO
dto
);
// thành viên out dự án
String
outProjectGroup
(
Integer
[]
ids
);
// thành viên out dự án
WrapperResult
deleteEmployeeProject
(
Integer
id
);
WrapperResult
updateEmployeeOutGroup
(
ProjectGroupDTO
dto
);
ProjectGroupDTO
findEmployeeProjectById
(
Integer
id
);
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/bussiness/ProjectGroupBussinessImpl.java
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.projectgroup.bussiness
;
package
com.itsol.quantrivanphong.manager.project.projectgroup.bussiness
;
import
com.itsol.quantrivanphong.model.Project
;
import
com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository
;
import
com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.common.Employee
RepositoryImpl
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.common.Employee
Project
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.common.ProjectGroupUtils
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.common.ProjectGroupUtils
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO
;
import
com.itsol.quantrivanphong.model.Eproject
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.repository.ProjectGroupRepository
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.repository.ProjectGroupRepository
;
import
com.itsol.quantrivanphong.model.Employee
;
import
com.itsol.quantrivanphong.model.Eproject
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
org.apache.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.sql.Timestamp
;
import
java.util.List
;
import
java.util.List
;
@Service
@Service
public
class
ProjectGroupBussinessImpl
implements
ProjectGroupBussiness
{
public
class
ProjectGroupBussinessImpl
implements
ProjectGroupBussiness
{
private
Logger
logger
=
Logger
.
getLogger
(
ProjectGroupBussinessImpl
.
class
);
@Autowired
@Autowired
private
ProjectGroupRepository
projectGroupRepository
;
private
ProjectGroupRepository
projectGroupRepository
;
...
@@ -22,64 +26,127 @@ public class ProjectGroupBussinessImpl implements ProjectGroupBussiness {
...
@@ -22,64 +26,127 @@ public class ProjectGroupBussinessImpl implements ProjectGroupBussiness {
private
ProjectRepository
projectRepository
;
private
ProjectRepository
projectRepository
;
@Autowired
@Autowired
private
EmployeeRepositoryImpl
employeeRepository
;
private
ProjectGroupUtils
utils
;
@Autowired
@Autowired
private
ProjectGroupUtils
utils
;
private
EmployeeProject
employeeProject
;
@Override
@Override
public
List
<
ProjectGroupDTO
>
getGroupByProjectId
(
Integer
projectId
)
{
public
List
<
ProjectGroupDTO
>
getGroupByProjectId
(
Integer
projectId
)
{
Project
project
=
projectRepository
.
findByEmtityId
(
projectId
);
logger
.
info
(
"getGroupByProjectId"
);
if
(
project
!=
null
)
{
List
<
Eproject
>
lstModels
=
projectGroupRepository
.
findByProjectId
(
projectId
);
List
<
Eproject
>
lstModels
=
projectGroupRepository
.
finByProperty
(
"project"
,
project
,
"joinDate"
,
"DESC"
);
List
<
ProjectGroupDTO
>
lstDTO
=
utils
.
getListDTO
(
lstModels
);
List
<
ProjectGroupDTO
>
lstDTO
=
utils
.
getListDTO
(
lstModels
);
return
lstDTO
;
return
lstDTO
;
}
}
return
null
;
public
boolean
checkEmployeeInGroupProject
(
ProjectGroupDTO
dto
)
{
if
(
dto
.
getProjectId
()!=
null
)
{
List
<
Eproject
>
lst
=
projectGroupRepository
.
findByProjectId
(
dto
.
getProjectId
());
for
(
Eproject
eproject
:
lst
)
{
if
(
eproject
.
getEmployee
().
getUsername
().
equals
(
dto
.
getUserName
()))
{
return
true
;
}
}
}
return
false
;
}
}
@Override
@Override
public
String
saveEmployeeProject
(
ProjectGroupDTO
dto
)
{
public
WrapperResult
saveEmployeeProject
(
ProjectGroupDTO
dto
)
{
String
views
=
""
;
String
views
=
""
;
try
{
int
status
=
113
;
projectGroupRepository
.
saveEntity
(
utils
.
Model
(
dto
));
logger
.
info
(
"saveEmployeeProject"
);
views
=
"thêm thành công nhân viên vào nhóm dự án"
;
Employee
employee
=
employeeProject
.
findByUsername
(
dto
.
getUserName
());
}
catch
(
Exception
e
){
if
(
employee
==
null
)
{
views
=
"thêm không thành công!"
;
views
=
"Nhân viên không tồn tại !"
;
}
else
if
(!
checkEmployeeInGroupProject
(
dto
))
{
try
{
dto
.
setStatus
(
1
);
dto
.
setUserId
(
employee
.
getId
());
dto
.
setJoinDate
(
new
Timestamp
(
System
.
currentTimeMillis
()));
Eproject
eproject
=
projectGroupRepository
.
save
(
utils
.
Model
(
dto
));
if
(
eproject
!=
null
)
{
views
=
"thêm thành công nhân viên vào nhóm dự án"
;
status
=
200
;
}
else
{
views
=
"thêm không thành công!"
;
}
}
catch
(
Exception
e
)
{
logger
.
info
(
"Lỗi "
+
e
.
getMessage
());
}
}
else
{
status
=
113
;
views
=
"thành viên đã tồn tại"
;
}
}
return
views
;
return
new
WrapperResult
(
status
,
views
)
;
}
}
@Override
@Override
public
String
updateEmployeeProject
(
ProjectGroupDTO
dto
)
{
public
WrapperResult
updateEmployeeProject
(
ProjectGroupDTO
dto
)
{
String
views
=
""
;
String
views
=
""
;
Eproject
eproject
=
projectGroupRepository
.
findByEmtityId
(
dto
.
getId
());
int
status
=
113
;
if
(
eproject
!=
null
){
logger
.
info
(
"updateEmployeeProject"
);
Eproject
updateProjectGroup
=
projectGroupRepository
.
updateEntity
(
utils
.
Model
(
dto
));
if
(
updateProjectGroup
!=
null
){
Eproject
eproject
=
projectGroupRepository
.
findEprojectById
(
dto
.
getId
());
views
=
"Sửa thành công"
;
if
(
eproject
!=
null
)
{
eproject
.
setPosition
(
dto
.
getPosition
());
Eproject
updateProjectGroup
=
projectGroupRepository
.
save
(
eproject
);
if
(
updateProjectGroup
!=
null
)
{
views
=
"cập nhật chức vụ thành viên thành công"
;
status
=
200
;
}
}
}
else
{
}
else
{
views
=
"đối tượng không tồn tại"
;
views
=
"đối tượng không tồn tại"
;
}
}
return
null
;
return
new
WrapperResult
(
status
,
views
);
}
}
@Override
@Override
public
ProjectGroupDTO
findEmployeeProject
(
String
username
)
{
public
ProjectGroupDTO
findEmployeeProjectById
(
Integer
id
)
{
try
{
ProjectGroupDTO
projectGroupDTO
=
utils
.
DTO
(
projectGroupRepository
.
findEprojectById
(
id
));
if
(
projectGroupDTO
!=
null
)
{
return
projectGroupDTO
;
}
}
catch
(
Exception
e
)
{
logger
.
info
(
"Lỗi update EProject "
+
e
.
getMessage
());
}
return
null
;
return
null
;
}
}
@Override
@Override
public
String
outProjectGroup
(
Integer
[]
ids
)
{
public
WrapperResult
deleteEmployeeProject
(
Integer
id
)
{
String
views
=
""
;
String
views
=
""
;
int
count
=
0
;
int
status
=
113
;
count
=
projectGroupRepository
.
deleteEntity
(
ids
);
logger
.
info
(
"deleteEmployeeProject"
);
if
(
count
!=
0
){
if
(
projectGroupRepository
.
findEprojectById
(
id
)
!=
null
)
{
views
=
"Bạn đã cho "
+
count
+
" thoát ra khỏi nhóm"
;
projectGroupRepository
.
deleteById
(
id
);
}
else
{
views
=
"Bạn đã cho thoát ra khỏi nhóm"
;
views
=
" thành viên không tồn tại"
;
status
=
200
;
}
else
{
views
=
"Thành viên không tồn tại trong nhóm"
;
}
return
new
WrapperResult
(
status
,
views
);
}
@Override
public
WrapperResult
updateEmployeeOutGroup
(
ProjectGroupDTO
dto
)
{
String
views
=
""
;
int
status
=
113
;
logger
.
info
(
"updateEmployeeOutGroup"
);
Eproject
eproject
=
projectGroupRepository
.
findEprojectById
(
dto
.
getId
());
if
(
eproject
!=
null
)
{
eproject
.
setStatus
(
2
);
eproject
.
setOutDate
(
new
Timestamp
(
System
.
currentTimeMillis
()));
Eproject
updateProjectGroup
=
projectGroupRepository
.
save
(
eproject
);
if
(
updateProjectGroup
!=
null
)
{
views
=
"thành viên đã out nhóm"
;
status
=
200
;
}
}
else
{
views
=
"đối tượng không tồn tại"
;
}
}
return
views
;
return
new
WrapperResult
(
status
,
views
)
;
}
}
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/common/EmployeeProject.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.projectgroup.common
;
import
com.itsol.quantrivanphong.model.Employee
;
import
org.springframework.data.jpa.repository.JpaRepository
;
public
interface
EmployeeProject
extends
JpaRepository
<
Employee
,
Integer
>
{
Employee
findEmployeeById
(
Integer
employeeId
);
Employee
findByUsername
(
String
username
);
}
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/common/EmployeeRepositoryImpl.java
deleted
100644 → 0
View file @
fcb6432d
package
com.itsol.quantrivanphong.manager.project.projectgroup.common
;
import
com.itsol.quantrivanphong.model.Employee
;
import
com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao
;
import
org.apache.log4j.Logger
;
import
org.springframework.stereotype.Service
;
@Service
public
class
EmployeeRepositoryImpl
extends
AbstractEntityManagerDao
<
Integer
,
Employee
>
{
private
Logger
logger
=
Logger
.
getLogger
(
EmployeeRepositoryImpl
.
class
);
public
Employee
getEmployeeById
(
Integer
employeeId
)
{
try
{
Employee
employee
=
findByEmtityId
(
employeeId
);
if
(
employee
!=
null
)
{
return
employee
;
}
}
catch
(
Exception
e
)
{
logger
.
info
(
"( Lỗi tìm employee theo ID: )"
+
e
.
getMessage
());
}
return
null
;
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/common/ProjectGroupUtils.java
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.projectgroup.common
;
package
com.itsol.quantrivanphong.manager.project.projectgroup.common
;
import
com.itsol.quantrivanphong.access.login.dto.EmployeeDTO
;
import
com.itsol.quantrivanphong.access.login.dto.EmployeeDTO
;
import
com.itsol.quantrivanphong.model.Employee
;
import
com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO
;
import
com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO
;
import
com.itsol.quantrivanphong.model.Project
;
import
com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository
;
import
com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO
;
import
com.itsol.quantrivanphong.model.Employee
;
import
com.itsol.quantrivanphong.model.Eproject
;
import
com.itsol.quantrivanphong.model.Eproject
;
import
com.itsol.quantrivanphong.model.Project
;
import
org.apache.log4j.Logger
;
import
org.apache.log4j.Logger
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -18,9 +18,9 @@ import java.util.List;
...
@@ -18,9 +18,9 @@ import java.util.List;
public
class
ProjectGroupUtils
{
public
class
ProjectGroupUtils
{
private
static
Logger
logger
=
Logger
.
getLogger
(
ProjectGroupUtils
.
class
);
private
static
Logger
logger
=
Logger
.
getLogger
(
ProjectGroupUtils
.
class
);
@Autowired
@Autowired
private
Employee
RepositoryImpl
employeeRepository
;
private
Employee
Project
employeeRepository
;
@Autowired
@Autowired
private
ProjectRepository
projectRepository
;
private
ProjectRepository
projectRepository
;
public
Eproject
Model
(
ProjectGroupDTO
dto
){
public
Eproject
Model
(
ProjectGroupDTO
dto
){
...
@@ -29,8 +29,9 @@ public class ProjectGroupUtils {
...
@@ -29,8 +29,9 @@ public class ProjectGroupUtils {
model
.
setJoinDate
(
dto
.
getJoinDate
());
model
.
setJoinDate
(
dto
.
getJoinDate
());
model
.
setOutDate
(
dto
.
getOutDate
());
model
.
setOutDate
(
dto
.
getOutDate
());
model
.
setPosition
(
dto
.
getPosition
());
model
.
setPosition
(
dto
.
getPosition
());
model
.
setStatus
(
dto
.
getStatus
());
try
{
try
{
Employee
findEmployee
=
employeeRepository
.
get
EmployeeById
(
dto
.
getUserId
());
Employee
findEmployee
=
employeeRepository
.
find
EmployeeById
(
dto
.
getUserId
());
if
(
findEmployee
!=
null
){
if
(
findEmployee
!=
null
){
model
.
setEmployee
(
findEmployee
);
model
.
setEmployee
(
findEmployee
);
}
}
...
@@ -38,7 +39,7 @@ public class ProjectGroupUtils {
...
@@ -38,7 +39,7 @@ public class ProjectGroupUtils {
logger
.
info
(
"(Lỗi không tìm thấy Employee) "
+
e
.
getMessage
());
logger
.
info
(
"(Lỗi không tìm thấy Employee) "
+
e
.
getMessage
());
}
}
try
{
try
{
Project
project
=
projectRepository
.
find
ByEmtit
yId
(
dto
.
getProjectId
());
Project
project
=
projectRepository
.
find
ProjectB
yId
(
dto
.
getProjectId
());
if
(
project
!=
null
){
if
(
project
!=
null
){
model
.
setProject
(
project
);
model
.
setProject
(
project
);
}
}
...
...
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/controller/ProjectGroupController.java
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.projectgroup.controller
;
package
com.itsol.quantrivanphong.manager.project.projectgroup.controller
;
import
com.itsol.quantrivanphong.report.issue.common.SystemConstants
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.bussiness.ProjectGroupBussiness
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.bussiness.ProjectGroupBussiness
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO
;
import
com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@RestController
@RestController
public
class
ProjectGroupController
{
public
class
ProjectGroupController
{
...
@@ -17,33 +15,40 @@ public class ProjectGroupController {
...
@@ -17,33 +15,40 @@ public class ProjectGroupController {
// thông tin của 1 nhóm dư án theo id của dự án
// thông tin của 1 nhóm dư án theo id của dự án
// Team lead,Hr
// Team lead,Hr
@GetMapping
(
value
=
"/thong-tin-du-an/{id}"
,
produces
=
SystemConstants
.
TYPE_JSON
)
@GetMapping
(
value
=
"/thong-tin-du-an/{id}"
)
public
ResponseEntity
<
List
<
ProjectGroupDTO
>>
getOneProjectGroup
(
@PathVariable
(
"id"
)
Integer
projectId
)
{
public
ResponseEntity
getOneProjectGroup
(
@PathVariable
(
"id"
)
Integer
projectId
)
{
return
ResponseEntity
.
ok
(
projectGroupBussiness
.
getGroupByProjectId
(
projectId
));
return
ResponseEntity
.
ok
(
projectGroupBussiness
.
getGroupByProjectId
(
projectId
));
}
}
@GetMapping
(
value
=
"/chi-tiet-thanh-vien-du-an/{id}"
)
public
ResponseEntity
getOneEmployeeProject
(
@PathVariable
(
"id"
)
Integer
employeeProjectId
)
{
return
ResponseEntity
.
ok
(
projectGroupBussiness
.
findEmployeeProjectById
(
employeeProjectId
));
}
// thêm thành viên vào dự án
// thêm thành viên vào dự án
// hr,manager, teamlead thêm thành viên
// hr,manager, teamlead thêm thành viên
@PostMapping
(
value
=
"/them-thanh-vien"
,
consumes
=
SystemConstants
.
TYPE_JSON
,
produces
=
SystemConstants
.
TYPE_JSON
)
@PostMapping
(
value
=
"/them-thanh-vien"
)
public
ResponseEntity
addMemberProject
(
@RequestBody
ProjectGroupDTO
projectGroupDTO
)
{
public
ResponseEntity
addMemberProject
(
@RequestBody
ProjectGroupDTO
projectGroupDTO
)
{
String
views
=
projectGroupBussiness
.
saveEmployeeProject
(
projectGroupDTO
);
WrapperResult
wrapperResult
=
projectGroupBussiness
.
saveEmployeeProject
(
projectGroupDTO
);
return
ResponseEntity
.
ok
(
views
);
return
ResponseEntity
.
ok
(
wrapperResult
);
}
}
// cập nhật thông tin thành viên
// cập nhật thông tin thành viên
// manager cập nhật chức vụ cho nhân viên vào xét duyệt vào dự án
// manager cập nhật chức vụ cho nhân viên vào xét duyệt vào dự án
@PutMapping
(
value
=
"/cap-nhat-
thong-tin-thanh-vien"
,
consumes
=
SystemConstants
.
TYPE_JSON
,
produces
=
SystemConstants
.
TYPE_JSON
)
@PutMapping
(
value
=
"/cap-nhat-
chuc-vu-thanh-vien"
)
public
ResponseEntity
update
Member
Project
(
@RequestBody
ProjectGroupDTO
projectGroupDTO
)
{
public
ResponseEntity
update
Position
Project
(
@RequestBody
ProjectGroupDTO
projectGroupDTO
)
{
String
views
=
projectGroupBussiness
.
updateEmployeeProject
(
projectGroupDTO
);
WrapperResult
wrapperResult
=
projectGroupBussiness
.
updateEmployeeProject
(
projectGroupDTO
);
return
ResponseEntity
.
ok
(
views
);
return
ResponseEntity
.
ok
(
wrapperResult
);
}
}
@PutMapping
(
value
=
"/thanh-vien-out-nhom"
)
public
ResponseEntity
updateMemberOutProject
(
@RequestBody
ProjectGroupDTO
projectGroupDTO
)
{
// xóa thành viên ra khỏi dự án
WrapperResult
wrapperResult
=
projectGroupBussiness
.
updateEmployeeOutGroup
(
projectGroupDTO
);
@DeleteMapping
(
value
=
"/thanh-vien-out-du-an"
)
return
ResponseEntity
.
ok
(
wrapperResult
);
}
@DeleteMapping
(
value
=
"/xoa-thanh-vien-du-an"
)
public
ResponseEntity
deleteMemberProject
(
@RequestBody
ProjectGroupDTO
projectGroupDTO
){
public
ResponseEntity
deleteMemberProject
(
@RequestBody
ProjectGroupDTO
projectGroupDTO
){
String
views
=
projectGroupBussiness
.
outProjectGroup
(
projectGroupDTO
.
getIds
());
WrapperResult
wrapperResult
=
projectGroupBussiness
.
deleteEmployeeProject
(
projectGroupDTO
.
getId
());
return
ResponseEntity
.
ok
(
views
);
return
ResponseEntity
.
ok
(
wrapperResult
);
}
}
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/dto/ProjectGroupDTO.java
View file @
4755371a
...
@@ -19,11 +19,11 @@ public class ProjectGroupDTO {
...
@@ -19,11 +19,11 @@ public class ProjectGroupDTO {
private
Timestamp
joinDate
;
private
Timestamp
joinDate
;
// ngày ra dự án
// ngày ra dự án
private
Timestamp
outDate
;
private
Timestamp
outDate
;
private
int
status
;
private
Integer
userId
;
private
Integer
userId
;
private
Integer
projectId
;
private
Integer
projectId
;
private
String
userName
;
private
String
nameProject
;
private
EmployeeDTO
employeeDTO
;
private
EmployeeDTO
employeeDTO
;
private
ProjectDTO
projectDTO
;
private
ProjectDTO
projectDTO
;
private
Integer
[]
ids
;
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/repository/ProjectGroupRepository.java
View file @
4755371a
package
com.itsol.quantrivanphong.manager.project.projectgroup.repository
;
package
com.itsol.quantrivanphong.manager.project.projectgroup.repository
;
import
com.itsol.quantrivanphong.report.issue.common.GennericeEntityManagerDao
;
import
com.itsol.quantrivanphong.model.Eproject
;
import
com.itsol.quantrivanphong.model.Eproject
;
import
org.springframework.data.jpa.repository.JpaRepository
;
public
interface
ProjectGroupRepository
extends
GennericeEntityManagerDao
<
Integer
,
Eproject
>
{
import
java.util.List
;
public
interface
ProjectGroupRepository
extends
JpaRepository
<
Eproject
,
Integer
>
{
List
<
Eproject
>
findByProjectId
(
Integer
projectId
);
Eproject
findEprojectById
(
Integer
eProjectId
);
}
}
src/main/java/com/itsol/quantrivanphong/manager/project/projectgroup/repository/ProjectGroupRepositoryImpl.java
deleted
100644 → 0
View file @
fcb6432d
package
com.itsol.quantrivanphong.manager.project.projectgroup.repository
;
import
com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao
;
import
com.itsol.quantrivanphong.model.Eproject
;
import
org.springframework.stereotype.Repository
;
@Repository
public
class
ProjectGroupRepositoryImpl
extends
AbstractEntityManagerDao
<
Integer
,
Eproject
>
implements
ProjectGroupRepository
{
}
src/main/java/com/itsol/quantrivanphong/manager/project/test.java
deleted
100644 → 0
View file @
fcb6432d
package
com.itsol.quantrivanphong.manager.project
;
public
class
test
{
}
src/main/java/com/itsol/quantrivanphong/model/Eproject.java
View file @
4755371a
package
com.itsol.quantrivanphong.model
;
package
com.itsol.quantrivanphong.model
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.itsol.quantrivanphong.model.Employee
;
import
com.itsol.quantrivanphong.model.TimeSheet
;
import
com.itsol.quantrivanphong.model.Project
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
...
@@ -24,16 +21,19 @@ public class Eproject {
...
@@ -24,16 +21,19 @@ public class Eproject {
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"id"
,
nullable
=
false
,
unique
=
true
)
@Column
(
name
=
"id"
,
nullable
=
false
,
unique
=
true
)
private
int
id
;
private
int
id
;
// chức vụ trong project
// chức vụ trong project
@Column
(
name
=
"position"
,
nullable
=
false
)
@Column
(
name
=
"position"
,
nullable
=
false
)
private
String
position
;
private
String
position
;
//ngày vào dự án
//ngày vào dự án
@Column
(
name
=
"join_date"
,
nullable
=
false
)
@Column
(
name
=
"join_date"
,
nullable
=
false
)
private
Timestamp
joinDate
;
private
Timestamp
joinDate
;
// ngày ra dự án
// ngày ra dự án
@Column
(
name
=
"out_date"
,
nullable
=
true
)
@Column
(
name
=
"out_date"
,
nullable
=
true
)
private
Timestamp
outDate
;
private
Timestamp
outDate
;
@Column
(
name
=
"status"
,
nullable
=
false
)
private
int
status
;
@ManyToOne
(
fetch
=
FetchType
.
EAGER
)
@ManyToOne
(
fetch
=
FetchType
.
EAGER
)
private
Employee
employee
;
private
Employee
employee
;
...
@@ -43,4 +43,5 @@ public class Eproject {
...
@@ -43,4 +43,5 @@ public class Eproject {
@JsonIgnore
@JsonIgnore
@OneToMany
(
mappedBy
=
"eproject"
,
fetch
=
FetchType
.
LAZY
,
cascade
=
CascadeType
.
ALL
)
@OneToMany
(
mappedBy
=
"eproject"
,
fetch
=
FetchType
.
LAZY
,
cascade
=
CascadeType
.
ALL
)
private
List
<
TimeSheet
>
timeSheetList
=
new
ArrayList
<>();
private
List
<
TimeSheet
>
timeSheetList
=
new
ArrayList
<>();
}
}
src/main/java/com/itsol/quantrivanphong/model/Issues.java
View file @
4755371a
package
com.itsol.quantrivanphong.model
;
package
com.itsol.quantrivanphong.model
;
import
com.
itsol.quantrivanphong.model.Project
;
import
com.
fasterxml.jackson.annotation.JsonIgnore
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
javax.persistence.*
;
import
javax.persistence.*
;
import
java.sql.Timestamp
;
import
java.util.ArrayList
;
import
java.util.List
;
@Data
@Data
@AllArgsConstructor
@AllArgsConstructor
@NoArgsConstructor
@NoArgsConstructor
@Entity
@Entity
@Table
(
name
=
"issues"
)
@Table
(
name
=
"issues"
)
public
class
Issues
{
public
class
Issues
{
@Id
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"id"
,
nullable
=
false
,
unique
=
true
)
@Column
(
name
=
"id"
,
nullable
=
false
,
unique
=
true
)
private
int
id
;
private
Integer
id
;
// tiêu đề liên quan
// tiêu đề liên quan
@Column
(
name
=
"title"
)
@Column
(
name
=
"title"
)
private
String
title
;
private
String
title
;
//nội dung
//nội dung
@Column
(
name
=
"content"
)
@Column
(
name
=
"content"
)
private
String
actionCode
;
private
String
actionCode
;
// trạng thái vấn đề đó trong project
// trạng thái vấn đề đó trong project
@Column
(
name
=
"status"
)
@Column
(
name
=
"status"
)
private
boolean
status
;
private
int
status
;
@Column
(
name
=
"startdate"
)
private
Timestamp
startDate
;
@ManyToOne
(
fetch
=
FetchType
.
EAGER
)
@ManyToOne
(
fetch
=
FetchType
.
EAGER
)
private
Project
project
;
private
Project
project
;
@JsonIgnore
@OneToMany
(
mappedBy
=
"issues"
,
fetch
=
FetchType
.
LAZY
,
cascade
=
CascadeType
.
ALL
)
private
List
<
IssuesComment
>
issuesCommentList
=
new
ArrayList
<>();
}
}
src/main/java/com/itsol/quantrivanphong/model/IssuesComment.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.model
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.persistence.*
;
import
java.sql.Timestamp
;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table
(
name
=
"issuescomment"
)
public
class
IssuesComment
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"id"
,
nullable
=
false
,
unique
=
true
)
private
Integer
id
;
//nội dung
@Column
(
name
=
"content"
)
private
String
contentIssuse
;
@Column
(
name
=
"usercreate"
)
private
String
userCreate
;
@Column
(
name
=
"createdate"
)
private
Timestamp
createDate
;
@ManyToOne
(
fetch
=
FetchType
.
EAGER
)
private
Issues
issues
;
}
src/main/java/com/itsol/quantrivanphong/model/Project.java
View file @
4755371a
...
@@ -18,25 +18,26 @@ import java.util.List;
...
@@ -18,25 +18,26 @@ import java.util.List;
@Table
(
name
=
"project"
)
@Table
(
name
=
"project"
)
public
class
Project
{
public
class
Project
{
@Id
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"id"
,
nullable
=
false
,
unique
=
true
)
@Column
(
name
=
"id"
,
nullable
=
false
,
unique
=
true
)
private
Integer
id
;
private
Integer
id
;
// tên project
// tên project
@Column
(
name
=
"name"
,
nullable
=
false
)
@Column
(
name
=
"name"
,
nullable
=
false
)
private
String
name
;
private
String
name
;
//mô tả ngắn
//mô tả ngắn
@Column
(
name
=
"descriptions"
)
@Column
(
name
=
"descriptions"
)
private
String
descriptions
;
private
String
descriptions
;
//ngày bắt đầu của dự án
//ngày bắt đầu của dự án
@Column
(
name
=
"start_date"
,
nullable
=
false
)
@Column
(
name
=
"start_date"
,
nullable
=
false
)
private
Timestamp
startDate
;
private
Timestamp
startDate
;
//ngày kết thúc dự án
//ngày kết thúc dự án
@Column
(
name
=
"end_date"
)
@Column
(
name
=
"end_date"
)
private
Timestamp
endDate
;
private
Timestamp
endDate
;
//trạng thái
//trạng thái
@Column
(
name
=
"status"
,
nullable
=
false
)
@Column
(
name
=
"status"
,
nullable
=
false
)
private
Integer
status
;
private
Integer
status
;
...
...
src/main/java/com/itsol/quantrivanphong/report/issue/bussiness/IssueBussinesImpl.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issue.bussiness
;
import
com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository
;
import
com.itsol.quantrivanphong.model.Issues
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
com.itsol.quantrivanphong.report.issue.dto.IssueDTO
;
import
com.itsol.quantrivanphong.report.issue.repository.IssueRepository
;
import
org.apache.log4j.Logger
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.sql.Timestamp
;
import
java.util.ArrayList
;
import
java.util.List
;
@Service
public
class
IssueBussinesImpl
implements
IssueBussiness
{
Logger
logger
=
Logger
.
getLogger
(
IssueBussinesImpl
.
class
);
@Autowired
private
IssueRepository
issueRepository
;
@Autowired
private
ProjectRepository
projectRepository
;
@Override
public
List
<
Issues
>
getAllIssue
()
{
return
issueRepository
.
findAll
();
}
@Override
public
WrapperResult
saveIssue
(
IssueDTO
issueDTO
)
{
String
views
=
null
;
int
status
=
113
;
try
{
issueDTO
.
setStatus
(
0
);
issueDTO
.
setStartDate
(
new
Timestamp
(
System
.
currentTimeMillis
()));
Issues
saveIssues
=
issueRepository
.
save
(
dtoParseModels
(
issueDTO
));
if
(
saveIssues
!=
null
)
{
views
=
"thêm thành công Issues !"
;
status
=
200
;
}
else
{
views
=
"thêm Issues không thành công!"
;
}
}
catch
(
Exception
e
)
{
logger
.
info
(
"Lỗi insert "
+
e
.
getMessage
());
views
=
"Lỗi thêm dữ liệu"
;
}
return
new
WrapperResult
(
status
,
views
);
}
@Override
public
WrapperResult
updateIssue
(
IssueDTO
issueDTO
)
{
String
views
=
null
;
int
status
=
113
;
try
{
Issues
issues
=
issueRepository
.
findIssuesById
(
issueDTO
.
getId
());
if
(
issues
!=
null
)
{
if
(
issues
.
getStatus
()
==
0
)
{
issues
.
setStatus
(
1
);
}
else
{
issues
.
setStatus
(
0
);
}
Issues
saveIssues
=
issueRepository
.
save
(
issues
);
if
(
saveIssues
!=
null
)
{
views
=
"Cập nhật thành công Issues !"
;
status
=
200
;
}
else
{
views
=
"không thành công!"
;
}
}
else
{
views
=
"Issue không tồn tại!"
;
}
}
catch
(
Exception
e
)
{
logger
.
info
(
"Lỗi Cập nhật "
+
e
.
getMessage
());
views
=
"Lỗi Cập nhật dữ liệu"
;
}
return
new
WrapperResult
(
status
,
views
);
}
@Override
public
WrapperResult
deleteIssue
(
IssueDTO
issueDTO
)
{
String
views
=
null
;
int
status
=
113
;
try
{
Issues
issues
=
issueRepository
.
findIssuesById
(
issueDTO
.
getId
());
if
(
issues
!=
null
)
{
issueRepository
.
deleteById
(
issueDTO
.
getId
());
views
=
"Xóa thành công Issues !"
;
status
=
200
;
}
else
{
views
=
"Issue không tồn tại!"
;
}
}
catch
(
Exception
e
)
{
logger
.
info
(
"Lỗi Delete "
+
e
.
getMessage
());
views
=
"Lỗi xóa dữ liệu"
;
}
return
new
WrapperResult
(
status
,
views
);
}
@Override
public
Issues
findIssueById
(
Integer
id
)
{
return
issueRepository
.
findIssuesById
(
id
);
}
public
IssueDTO
modelsParseDTO
(
Issues
models
)
{
IssueDTO
issueDTO
=
new
IssueDTO
();
BeanUtils
.
copyProperties
(
models
,
issueDTO
);
return
issueDTO
;
}
public
Issues
dtoParseModels
(
IssueDTO
dto
)
{
Issues
issues
=
new
Issues
();
BeanUtils
.
copyProperties
(
dto
,
issues
);
issues
.
setProject
(
projectRepository
.
findProjectById
(
dto
.
getProjectId
()));
return
issues
;
}
public
List
<
IssueDTO
>
lstModel
(
List
<
Issues
>
lstModel
)
{
if
(
lstModel
.
size
()
!=
0
&&
!
lstModel
.
isEmpty
())
{
List
<
IssueDTO
>
lstDTO
=
new
ArrayList
<
IssueDTO
>();
for
(
Issues
issues
:
lstModel
)
{
lstDTO
.
add
(
modelsParseDTO
(
issues
));
}
return
lstDTO
;
}
return
null
;
}
}
src/main/java/com/itsol/quantrivanphong/report/issue/bussiness/IssueBussiness.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issue.bussiness
;
import
com.itsol.quantrivanphong.model.Issues
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
com.itsol.quantrivanphong.report.issue.dto.IssueDTO
;
import
java.util.List
;
public
interface
IssueBussiness
{
List
<
Issues
>
getAllIssue
();
WrapperResult
saveIssue
(
IssueDTO
issueDTO
);
WrapperResult
updateIssue
(
IssueDTO
issueDTO
);
WrapperResult
deleteIssue
(
IssueDTO
issueDTO
);
Issues
findIssueById
(
Integer
id
);
}
src/main/java/com/itsol/quantrivanphong/report/issue/common/AbstractDaoPage.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issue.common
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
AbstractDaoPage
<
T
>
{
private
List
<
T
>
lstResult
=
new
ArrayList
<
T
>();
// Số page đang đứng
private
int
page
;
// Tổng sô page trong 1 item
private
Integer
maxPageItem
;
// Tổng số page hiện tại
private
int
totalPage
;
// Tổng số item
private
int
totalItem
;
private
int
Count
;
public
List
<
T
>
getLstResult
()
{
return
lstResult
;
}
public
void
setLstResult
(
List
<
T
>
lstResult
)
{
this
.
lstResult
=
lstResult
;
}
public
int
getPage
()
{
return
page
;
}
public
void
setPage
(
int
page
)
{
this
.
page
=
page
;
}
public
Integer
getMaxPageItem
()
{
return
maxPageItem
;
}
public
void
setMaxPageItem
(
Integer
maxPageItem
)
{
this
.
maxPageItem
=
maxPageItem
;
}
public
int
getTotalPage
()
{
return
totalPage
;
}
public
void
setTotalPage
(
int
totalPage
)
{
this
.
totalPage
=
totalPage
;
}
public
int
getTotalItem
()
{
return
totalItem
;
}
public
void
setTotalItem
(
int
totalItem
)
{
this
.
totalItem
=
totalItem
;
}
public
int
getCount
()
{
return
(
lstResult
!=
null
)?
lstResult
.
size
():
0
;
}
}
src/main/java/com/itsol/quantrivanphong/report/issue/common/AbstractEntityManagerDao.java
deleted
100644 → 0
View file @
fcb6432d
package
com.itsol.quantrivanphong.report.issue.common
;
import
org.apache.log4j.Logger
;
import
org.hibernate.HibernateException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManagerFactory
;
import
javax.persistence.TypedQuery
;
import
java.io.Serializable
;
import
java.lang.reflect.ParameterizedType
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
AbstractEntityManagerDao
<
ID
extends
Serializable
,
T
>
implements
GennericeEntityManagerDao
<
ID
,
T
>
{
@Autowired
EntityManager
entityManager
;
@Autowired
EntityManagerFactory
entityManagerFactory
;
private
final
static
Logger
log
=
Logger
.
getLogger
(
AbstractEntityManagerDao
.
class
);
private
Class
<
T
>
persistenceClass
;
// Lấy Entity T trong Generic
public
AbstractEntityManagerDao
()
{
this
.
persistenceClass
=
(
Class
<
T
>)
((
ParameterizedType
)
getClass
().
getGenericSuperclass
()).
getActualTypeArguments
()[
1
];
}
// get persistenceClass
public
String
getPersistenceClass
()
{
return
persistenceClass
.
getSimpleName
();
}
public
List
<
T
>
finAllEntity
()
{
log
.
info
(
"find All record from db"
);
List
<
T
>
list
=
new
ArrayList
<
T
>();
try
{
entityManager
=
entityManagerFactory
.
createEntityManager
();
entityManager
.
getTransaction
().
begin
();
StringBuilder
sql
=
new
StringBuilder
(
" from "
);
sql
.
append
(
this
.
getPersistenceClass
());
list
=
entityManager
.
createQuery
(
sql
.
toString
(),
persistenceClass
).
getResultList
();
}
catch
(
HibernateException
e
)
{
log
.
info
(
e
.
getMessage
());
}
finally
{
if
(
entityManager
!=
null
)
{
entityManager
.
close
();
}
}
return
list
;
}
public
void
saveEntity
(
T
t
)
{
log
.
info
(
"save object"
);
try
{
entityManager
=
entityManagerFactory
.
createEntityManager
();
entityManager
.
getTransaction
().
begin
();
entityManager
.
persist
(
t
);
entityManager
.
getTransaction
().
commit
();
}
catch
(
HibernateException
e
)
{
entityManager
.
getTransaction
().
rollback
();
log
.
info
(
e
.
getMessage
());
}
finally
{
if
(
entityManager
!=
null
)
{
entityManager
.
close
();
}
}
}
public
T
updateEntity
(
T
t
)
{
log
.
info
(
"update object"
);
T
entity
=
null
;
try
{
entityManager
=
entityManagerFactory
.
createEntityManager
();
entityManager
.
getTransaction
().
begin
();
entity
=
entityManager
.
merge
(
t
);
entityManager
.
getTransaction
().
commit
();
return
entity
;
}
catch
(
HibernateException
e
)
{
entityManager
.
getTransaction
().
rollback
();
log
.
info
(
e
.
getMessage
());
}
finally
{
if
(
entityManager
!=
null
)
{
entityManager
.
close
();
}
}
return
entity
;
}
public
Integer
deleteEntity
(
ID
[]
ids
)
{
log
.
info
(
"delete by ids "
);
Integer
count
=
0
;
try
{
entityManager
=
entityManagerFactory
.
createEntityManager
();
entityManager
.
getTransaction
().
begin
();
for
(
ID
id
:
ids
)
{
T
entity
=
entityManager
.
find
(
persistenceClass
,
id
);
if
(
entity
!=
null
)
{
entityManager
.
remove
(
entity
);
count
++;
}
}
entityManager
.
getTransaction
().
commit
();
}
catch
(
HibernateException
e
)
{
entityManager
.
getTransaction
().
rollback
();
log
.
info
(
e
.
getMessage
());
}
finally
{
if
(
entityManager
!=
null
)
{
entityManager
.
close
();
}
}
return
count
;
}
@Override
public
Integer
deleteEntityByID
(
Integer
id
)
{
log
.
info
(
"delete by id "
);
Integer
count
=
0
;
try
{
entityManager
=
entityManagerFactory
.
createEntityManager
();
entityManager
.
getTransaction
().
begin
();
T
entity
=
entityManager
.
find
(
persistenceClass
,
id
);
if
(
entity
!=
null
)
{
entityManager
.
remove
(
entity
);
count
++;
}
entityManager
.
getTransaction
().
commit
();
}
catch
(
HibernateException
e
)
{
entityManager
.
getTransaction
().
rollback
();
log
.
info
(
e
.
getMessage
());
}
finally
{
if
(
entityManager
!=
null
)
{
entityManager
.
close
();
}
}
return
count
;
}
@Override
public
T
findByEmtityId
(
ID
id
)
{
log
.
info
(
"find by id"
);
T
entity
=
null
;
try
{
entityManager
=
entityManagerFactory
.
createEntityManager
();
entityManager
.
getTransaction
().
begin
();
entity
=
entityManager
.
find
(
persistenceClass
,
id
);
entityManager
.
getTransaction
().
commit
();
}
catch
(
Exception
e
)
{
entityManager
.
getTransaction
().
rollback
();
log
.
info
(
e
.
getMessage
());
}
finally
{
if
(
entityManager
!=
null
)
{
entityManager
.
close
();
}
}
return
entity
;
}
// Tìm kiếm 1 list danh sách theo value sắp xếp theo ASC or DESC size của list
@Override
public
List
<
T
>
finByProperty
(
String
property
,
Object
value
,
String
sortExperssion
,
String
sortDirection
)
{
log
.
info
(
"find by value"
);
List
<
T
>
list
=
new
ArrayList
<
T
>();
try
{
entityManager
=
entityManagerFactory
.
createEntityManager
();
entityManager
.
getTransaction
().
begin
();
StringBuilder
sql
=
new
StringBuilder
(
" from "
);
sql
.
append
(
getPersistenceClass
());
if
(
property
!=
null
&&
value
!=
null
)
{
sql
.
append
(
" where "
).
append
(
property
).
append
(
" = ?1"
);
}
if
(
sortExperssion
!=
null
&&
sortDirection
!=
null
)
{
sql
.
append
(
" order by "
).
append
(
sortExperssion
);
sql
.
append
(
" "
+(
sortDirection
.
equals
(
"ASC"
)?
"asc"
:
"desc"
));
}
TypedQuery
<
T
>
query1
=
entityManager
.
createQuery
(
sql
.
toString
(),
persistenceClass
);
list
=
query1
.
setParameter
(
1
,
value
).
getResultList
();
}
catch
(
HibernateException
e
)
{
entityManager
.
getTransaction
().
rollback
();
log
.
info
(
e
.
getMessage
());
}
finally
{
entityManager
.
close
();
}
return
list
;
}
}
src/main/java/com/itsol/quantrivanphong/report/issue/common/GennericeEntityManagerDao.java
deleted
100644 → 0
View file @
fcb6432d
package
com.itsol.quantrivanphong.report.issue.common
;
import
java.io.Serializable
;
import
java.util.List
;
public
interface
GennericeEntityManagerDao
<
ID
extends
Serializable
,
T
>
{
List
<
T
>
finAllEntity
();
void
saveEntity
(
T
entity
);
T
updateEntity
(
T
entity
);
Integer
deleteEntity
(
ID
[]
ids
);
Integer
deleteEntityByID
(
Integer
id
);
T
findByEmtityId
(
ID
id
);
List
<
T
>
finByProperty
(
String
property
,
Object
value
,
String
sortExperssion
,
String
sortDirection
);
}
src/main/java/com/itsol/quantrivanphong/report/issue/common/WrapperResult.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issue.common
;
public
class
WrapperResult
{
private
int
status
;
private
String
message
;
public
int
getStatus
()
{
return
status
;
}
public
void
setStatus
(
int
status
)
{
this
.
status
=
status
;
}
public
String
getMessage
()
{
return
message
;
}
public
void
setMessage
(
String
message
)
{
this
.
message
=
message
;
}
public
WrapperResult
(
int
status
,
String
message
)
{
this
.
status
=
status
;
this
.
message
=
message
;
}
}
src/main/java/com/itsol/quantrivanphong/report/issue/common/WrapperResultObject.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issue.common
;
import
java.util.List
;
public
class
WrapperResultObject
{
private
int
status
;
private
String
message
;
private
List
<
String
>
lstRole
;
private
String
Role
;
public
String
getRole
()
{
return
Role
;
}
public
void
setRole
(
String
role
)
{
Role
=
role
;
}
public
int
getStatus
()
{
return
status
;
}
public
void
setStatus
(
int
status
)
{
this
.
status
=
status
;
}
public
String
getMessage
()
{
return
message
;
}
public
void
setMessage
(
String
message
)
{
this
.
message
=
message
;
}
public
List
<
String
>
getLstRole
()
{
return
lstRole
;
}
public
void
setLstRole
(
List
<
String
>
lstRole
)
{
this
.
lstRole
=
lstRole
;
}
public
WrapperResultObject
(
int
status
,
String
message
,
List
<
String
>
lstRole
)
{
this
.
status
=
status
;
this
.
message
=
message
;
this
.
lstRole
=
lstRole
;
}
public
WrapperResultObject
(
int
status
,
String
message
,
List
<
String
>
lstRole
,
String
role
)
{
this
.
status
=
status
;
this
.
message
=
message
;
this
.
lstRole
=
lstRole
;
Role
=
role
;
}
}
src/main/java/com/itsol/quantrivanphong/report/issue/controller/IssueController.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issue.controller
;
import
com.itsol.quantrivanphong.model.Issues
;
import
com.itsol.quantrivanphong.report.issue.bussiness.IssueBussiness
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
com.itsol.quantrivanphong.report.issue.dto.IssueDTO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
@RestController
public
class
IssueController
{
@Autowired
private
IssueBussiness
issueBussiness
;
@GetMapping
(
value
=
"/danh-sach-issues"
)
public
ResponseEntity
getAllIssue
(){
return
ResponseEntity
.
ok
(
issueBussiness
.
getAllIssue
());
}
@GetMapping
(
value
=
"/chi-tiet-issues/{id}"
)
public
ResponseEntity
getIssueById
(
@PathVariable
(
"id"
)
Integer
id
){
Issues
issues
=
issueBussiness
.
findIssueById
(
id
);
if
(
issues
!=
null
){
return
ResponseEntity
.
ok
(
issues
);
}
return
ResponseEntity
.
ok
(
"Issues không tồn tại"
);
}
@PostMapping
(
value
=
"/them-issues"
)
public
ResponseEntity
saveIssue
(
@RequestBody
IssueDTO
issueDTO
){
WrapperResult
wrapperResult
=
issueBussiness
.
saveIssue
(
issueDTO
);
return
ResponseEntity
.
ok
(
wrapperResult
);
}
@PutMapping
(
value
=
"/sua-issues"
)
public
ResponseEntity
editIssue
(
@RequestBody
IssueDTO
issueDTO
){
WrapperResult
wrapperResult
=
issueBussiness
.
updateIssue
(
issueDTO
);
return
ResponseEntity
.
ok
(
wrapperResult
);
}
@DeleteMapping
(
value
=
"/xoa-issues"
)
public
ResponseEntity
deleteIssue
(
@RequestBody
IssueDTO
issueDTO
){
WrapperResult
wrapperResult
=
issueBussiness
.
deleteIssue
(
issueDTO
);
return
ResponseEntity
.
ok
(
wrapperResult
);
}
}
src/main/java/com/itsol/quantrivanphong/report/issue/dto/IssueDTO.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issue.dto
;
import
com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.sql.Timestamp
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
IssueDTO
{
private
Integer
id
;
private
String
title
;
private
String
actionCode
;
private
Timestamp
startDate
;
private
int
status
;
private
Integer
projectId
;
private
ProjectDTO
projectDTO
;
}
src/main/java/com/itsol/quantrivanphong/report/issue/repository/IssueRepository.java
View file @
4755371a
package
com.itsol.quantrivanphong.report.issue.repository
;
package
com.itsol.quantrivanphong.report.issue.repository
;
import
com.itsol.quantrivanphong.report.issue.common.GennericeEntityManagerDao
;
import
com.itsol.quantrivanphong.model.Issues
;
import
com.itsol.quantrivanphong.model.Issues
;
import
org.springframework.data.jpa.repository.JpaRepository
;
public
interface
IssueRepository
extends
GennericeEntityManagerDao
<
Integer
,
Issues
>
{
public
interface
IssueRepository
extends
JpaRepository
<
Issues
,
Integer
>
{
Issues
findIssuesById
(
Integer
id
);
}
}
src/main/java/com/itsol/quantrivanphong/report/issue/repository/IssueRepositoryImpl.java
deleted
100644 → 0
View file @
fcb6432d
package
com.itsol.quantrivanphong.report.issue.repository
;
import
com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao
;
import
com.itsol.quantrivanphong.model.Issues
;
import
org.springframework.stereotype.Repository
;
@Repository
public
class
IssueRepositoryImpl
extends
AbstractEntityManagerDao
<
Integer
,
Issues
>
implements
IssueRepository
{
}
src/main/java/com/itsol/quantrivanphong/report/issue/test.java
deleted
100644 → 0
View file @
fcb6432d
package
com.itsol.quantrivanphong.report.issue
;
public
class
test
{
}
src/main/java/com/itsol/quantrivanphong/report/issuescomment/bussiness/IssuesCommentBussiness.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issuescomment.bussiness
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
com.itsol.quantrivanphong.report.issuescomment.dto.IssuesCommentDTO
;
import
java.util.List
;
public
interface
IssuesCommentBussiness
{
// danh sách comment của issues
List
<
IssuesCommentDTO
>
getListComment
(
Integer
issuesId
);
WrapperResult
createComment
(
IssuesCommentDTO
dto
);
WrapperResult
updateComment
(
IssuesCommentDTO
dto
);
WrapperResult
deleteComment
(
IssuesCommentDTO
dto
);
IssuesCommentDTO
findIssuesCommentById
(
Integer
id
);
}
src/main/java/com/itsol/quantrivanphong/report/issuescomment/bussiness/IssuesCommentBussinessImpl.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issuescomment.bussiness
;
import
com.itsol.quantrivanphong.model.IssuesComment
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
com.itsol.quantrivanphong.report.issue.repository.IssueRepository
;
import
com.itsol.quantrivanphong.report.issuescomment.dto.IssuesCommentDTO
;
import
com.itsol.quantrivanphong.report.issuescomment.repository.IssuesCommentRepository
;
import
org.apache.log4j.Logger
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.sql.Timestamp
;
import
java.util.ArrayList
;
import
java.util.List
;
@Service
public
class
IssuesCommentBussinessImpl
implements
IssuesCommentBussiness
{
Logger
logger
=
Logger
.
getLogger
(
IssuesCommentBussinessImpl
.
class
);
@Autowired
private
IssueRepository
issueRepository
;
@Autowired
private
IssuesCommentRepository
issuesCommentRepository
;
@Override
public
List
<
IssuesCommentDTO
>
getListComment
(
Integer
issuesId
)
{
return
lstDTO
(
issuesCommentRepository
.
findIssuesCommentByIssuesId
(
issuesId
));
}
@Override
public
WrapperResult
createComment
(
IssuesCommentDTO
dto
)
{
String
views
=
""
;
int
status
=
113
;
dto
.
setUserCreate
(
"phungdung"
);
if
(
dto
.
getUserCreate
()!=
null
){
try
{
dto
.
setCreateDate
(
new
Timestamp
(
System
.
currentTimeMillis
()));
IssuesComment
issuesComment
=
issuesCommentRepository
.
save
(
Models
(
dto
));
views
=
"tạo comment thành công!"
;
status
=
200
;
}
catch
(
Exception
e
){
logger
.
info
(
" Lỗi Insert Comment "
+
e
.
getMessage
());
views
=
"Lỗi Tạo Comment"
;
}
}
else
{
views
=
"Vui lòng đăng nhập để thực hiện chức năng này"
;
}
return
new
WrapperResult
(
status
,
views
);
}
@Override
public
WrapperResult
updateComment
(
IssuesCommentDTO
dto
)
{
return
null
;
}
@Override
public
WrapperResult
deleteComment
(
IssuesCommentDTO
dto
)
{
return
null
;
}
@Override
public
IssuesCommentDTO
findIssuesCommentById
(
Integer
id
)
{
return
DTO
(
issuesCommentRepository
.
findIssuesCommentById
(
id
));
}
public
IssuesComment
Models
(
IssuesCommentDTO
dto
){
IssuesComment
issuesComment
=
new
IssuesComment
();
BeanUtils
.
copyProperties
(
dto
,
issuesComment
);
if
(
dto
.
getIssueId
()!=
null
){
issuesComment
.
setIssues
(
issueRepository
.
findIssuesById
(
dto
.
getIssueId
()));
}
return
issuesComment
;
}
public
IssuesCommentDTO
DTO
(
IssuesComment
issuesComment
){
IssuesCommentDTO
dto
=
new
IssuesCommentDTO
();
BeanUtils
.
copyProperties
(
issuesComment
,
dto
);
return
dto
;
}
public
List
<
IssuesCommentDTO
>
lstDTO
(
List
<
IssuesComment
>
lst
){
List
<
IssuesCommentDTO
>
lstDTO
=
new
ArrayList
<
IssuesCommentDTO
>();
for
(
IssuesComment
issuesComment:
lst
)
{
lstDTO
.
add
(
DTO
(
issuesComment
));
}
return
lstDTO
;
}
}
src/main/java/com/itsol/quantrivanphong/report/issuescomment/controller/IssuesControllers.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issuescomment.controller
;
import
com.itsol.quantrivanphong.report.issue.common.WrapperResult
;
import
com.itsol.quantrivanphong.report.issuescomment.bussiness.IssuesCommentBussiness
;
import
com.itsol.quantrivanphong.report.issuescomment.dto.IssuesCommentDTO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@RestController
public
class
IssuesControllers
{
@Autowired
private
IssuesCommentBussiness
issuesCommentBussiness
;
@GetMapping
(
value
=
"/Comment/{IssuesId}"
)
public
ResponseEntity
getComment
(
@PathVariable
(
"IssuesId"
)
Integer
issuesId
){
List
<
IssuesCommentDTO
>
listComment
=
issuesCommentBussiness
.
getListComment
(
issuesId
);
return
ResponseEntity
.
ok
(
listComment
);
}
@PostMapping
(
value
=
"/tao-comment"
)
public
ResponseEntity
saveComment
(
@RequestBody
IssuesCommentDTO
issuesCommentDTO
){
WrapperResult
wrapperResult
=
issuesCommentBussiness
.
createComment
(
issuesCommentDTO
);
return
ResponseEntity
.
ok
(
wrapperResult
);
}
}
src/main/java/com/itsol/quantrivanphong/report/issuescomment/dto/IssuesCommentDTO.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issuescomment.dto
;
import
com.itsol.quantrivanphong.report.issue.dto.IssueDTO
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.sql.Timestamp
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
IssuesCommentDTO
{
private
Integer
id
;
private
String
contentIssuse
;
private
String
userCreate
;
private
Timestamp
createDate
;
private
Integer
issueId
;
private
IssueDTO
issue
;
}
src/main/java/com/itsol/quantrivanphong/report/issuescomment/repository/IssuesCommentRepository.java
0 → 100644
View file @
4755371a
package
com.itsol.quantrivanphong.report.issuescomment.repository
;
import
com.itsol.quantrivanphong.model.IssuesComment
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
java.util.List
;
public
interface
IssuesCommentRepository
extends
JpaRepository
<
IssuesComment
,
Integer
>
{
List
<
IssuesComment
>
findIssuesCommentByIssuesId
(
Integer
issuesId
);
IssuesComment
findIssuesCommentById
(
Integer
id
);
}
src/main/resources/public/index.html
View file @
4755371a
...
@@ -37,6 +37,7 @@ SmartPhone Compatible web template, free WebDesigns for Nokia, Samsung, LG, Sony
...
@@ -37,6 +37,7 @@ SmartPhone Compatible web template, free WebDesigns for Nokia, Samsung, LG, Sony
<script
src=
"//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-sanitize.js"
></script>
<script
src=
"//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-sanitize.js"
></script>
<script
src=
"//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-1.3.3.js"
></script>
<script
src=
"//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-1.3.3.js"
></script>
<script
src=
"js/app.js"
></script>
<script
src=
"js/app.js"
></script>
<script
src=
"pages/report/reportController.js"
></script>
<script
src=
"pages/employee/employeeController.js"
></script>
<script
src=
"pages/employee/employeeController.js"
></script>
<!-- <script src="pages/project/projectController.js"></script>-->
<!-- <script src="pages/project/projectController.js"></script>-->
<script
src=
"pages/leaveform/leaveFormController.js"
></script>
<script
src=
"pages/leaveform/leaveFormController.js"
></script>
...
@@ -45,9 +46,10 @@ SmartPhone Compatible web template, free WebDesigns for Nokia, Samsung, LG, Sony
...
@@ -45,9 +46,10 @@ SmartPhone Compatible web template, free WebDesigns for Nokia, Samsung, LG, Sony
<script
src=
"pages/timesheet/timeSheetDetailController.js"
></script>
<script
src=
"pages/timesheet/timeSheetDetailController.js"
></script>
<script
src=
"pages/leaveform/leaveFormDetailController.js"
></script>
<script
src=
"pages/leaveform/leaveFormDetailController.js"
></script>
<script
src=
"pages/employee/createEmployeeController.js"
></script>
<script
src=
"pages/employee/createEmployeeController.js"
></script>
<script
src=
"pages/project/project/projectViewController.js"
></script>
<link
data-require=
"bootstrap-css@2.3.2"
data-semver=
"2.3.2"
rel=
"stylesheet"
<link
data-require=
"bootstrap-css@2.3.2"
data-semver=
"2.3.2"
rel=
"stylesheet"
href=
"//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css"
/>
href=
"//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css"
/>
`
<!-- end anguarjs app-->
<!-- end anguarjs app-->
<link
href=
"css/custom.css"
rel=
"stylesheet"
>
<link
href=
"css/custom.css"
rel=
"stylesheet"
>
...
@@ -109,6 +111,13 @@ SmartPhone Compatible web template, free WebDesigns for Nokia, Samsung, LG, Sony
...
@@ -109,6 +111,13 @@ SmartPhone Compatible web template, free WebDesigns for Nokia, Samsung, LG, Sony
});
});
});
});
</script>
</script>
<script
src=
"pages/project/project/projectController.js"
></script>
<script
src=
"pages/project/groupproject/groupProjectController.js"
></script>
<script
src=
"pages/project/groupproject/groupProjectViewController.js"
></script>
<script
src=
"pages/issue/IssueAddControlelr.js"
></script>
<script
src=
"pages/issue/IssueController.js"
></script>
<script
src=
"pages/issue/IssuesDetailController.js"
></script>
<script
src=
"pages/issue/IssuesDeleteController.js"
></script>
</head>
</head>
<body
class=
"cbp-spmenu-push"
ng-app=
"myApp"
>
<body
class=
"cbp-spmenu-push"
ng-app=
"myApp"
>
...
...
src/main/resources/public/js/app.js
View file @
4755371a
...
@@ -112,26 +112,210 @@ angular.module("myApp", ["ngAnimate", "ui.router", "ui.bootstrap"]).config(funct
...
@@ -112,26 +112,210 @@ angular.module("myApp", ["ngAnimate", "ui.router", "ui.bootstrap"]).config(funct
}
}
})
})
.
state
(
"
news
"
,{
parent
:
'
layout1
'
,
url
:
"
/news
"
,
views
:{
"
content
"
:{
templateUrl
:
"
pages/homepage/catagoriManagements.html
"
,
controller
:
"
homeController
"
}
}
})
//report
.
state
(
"
reportProject
"
,
{
parent
:
'
layout1
'
,
url
:
"
/report/project
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/report/timeSheetReport.html
"
,
controller
:
"
reportController
"
}
}
})
.
state
(
"
reportTimeSheet
"
,
{
parent
:
'
layout1
'
,
url
:
"
/report/project/:ID/timeSheet
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/report/timeSheetListViews.html
"
,
controller
:
"
timeSheetListController
"
}
}
})
.
state
(
"
reportEmployee
"
,
{
parent
:
'
layout1
'
,
url
:
"
/report/project/:ID/employee
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/report/employeeListViews.html
"
,
controller
:
"
listLackOfReportController
"
}
}
})
//
.
state
(
"
report2
"
,
{
parent
:
'
layout1
'
,
url
:
"
/report/project2
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/report/reportPage.html
"
,
controller
:
"
reportController
"
}
}
})
.
state
(
"
allReport
"
,
{
parent
:
'
layout1
'
,
url
:
"
/report/project/:ID/allReport
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/report/reportListPage.html
"
,
controller
:
"
allProjectReportController
"
}
}
})
.
state
(
"
reportDetail
"
,
{
parent
:
'
layout1
'
,
url
:
"
/report/reportDetail/:ID
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/report/reportDetailPage.html
"
,
controller
:
"
projectReportDetailController
"
}
}
})
.
state
(
"
reportEmployeeLack
"
,
{
parent
:
'
layout1
'
,
url
:
"
/report/project/:ID/employeeReport
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/report/employeeListViews1.html
"
,
controller
:
"
listEmployeeLackController
"
}
}
})
//end report
// .state("project",{
// parent:'layout1',
// url:"/project",
// views:{
// "content":{
// templateUrl:"pages/project/project/projectListViews.html",
// controller:"projectViewsController"
// }
// }
// })
// Phần của DunPV
//danh sách các dự án
.
state
(
"
project
"
,
{
.
state
(
"
project
"
,
{
parent
:
'
layout1
'
,
parent
:
'
layout1
'
,
url
:
"
/project
"
,
url
:
"
/project
"
,
views
:
{
views
:
{
"
content
"
:
{
"
content
"
:
{
templateUrl
:
"
pages/project/project.html
"
,
templateUrl
:
"
pages/project/project
/projectListViews
.html
"
,
controller
:
"
projectController
"
controller
:
"
project
Views
Controller
"
}
}
}
}
})
})
.
state
(
"
news
"
,{
//thêm mới dự án
parent
:
'
layout1
'
,
.
state
(
"
addproject
"
,
{
url
:
"
/news
"
,
parent
:
'
layout1
'
,
views
:{
url
:
"
/addproject
"
,
"
content
"
:{
views
:
{
templateUrl
:
"
pages/homepage/catagoriManagements.html
"
,
"
content
"
:
{
controller
:
"
homeController
"
templateUrl
:
"
pages/project/project/projectAddViews.html
"
,
controller
:
"
insertProject
"
}
}
})
//sửa thông tin dự án
.
state
(
"
editproject
"
,
{
parent
:
'
layout1
'
,
url
:
"
/editproject/:ID
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/project/project/projectEditViews.html
"
,
controller
:
"
loadProjectDetail
"
}
}
})
//danh sách thành viên trong nhóm dự án
.
state
(
"
groupProjectByProjectId
"
,
{
parent
:
'
layout1
'
,
url
:
"
/groupProjectByProjectId/:ID
"
,
params
:
{
ID
:
null
},
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/project/groupproject/groupProjectView.html
"
,
controller
:
"
groupProjectShowController
"
}
}
})
//thêm thành viên vào nhóm dự án
.
state
(
"
addEmployeeProject
"
,
{
parent
:
'
layout1
'
,
url
:
"
/addEmployeeProject
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/project/groupproject/groupProjectAddView.html
"
,
controller
:
"
insertEmployeeProject
"
}
}
})
//sửa thông tin nhân viên trong nhóm
.
state
(
"
editEmployeeProject
"
,
{
parent
:
'
layout1
'
,
url
:
"
/editEmployeeProject/:ID
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/project/groupproject/groupProjectEditView.html
"
,
controller
:
"
loadEmployeeProjectDetail
"
}
}
})
// danh sách project vào các issues
.
state
(
"
issues
"
,
{
parent
:
'
layout1
'
,
url
:
"
/issues
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/issue/IssueView.html
"
,
controller
:
"
IssuesShowController
"
}
}
})
// thêm mới issues
.
state
(
"
addIssues
"
,
{
parent
:
'
layout1
'
,
url
:
"
/addIssues
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/issue/IssueAdd.html
"
,
controller
:
"
IssuesAddController
"
}
}
})
// thêm mới issues
.
state
(
"
IssuesComment
"
,
{
parent
:
'
layout1
'
,
url
:
"
/issuescomment/:IssuesId
"
,
views
:
{
"
content
"
:
{
templateUrl
:
"
pages/issue/IssueDetailViews.html
"
,
controller
:
"
loadIssuesDetail
"
}
}
}
}
})
})
// END DUNG PV
});
});
...
...
src/main/resources/public/layout/layout1.html
View file @
4755371a
...
@@ -30,13 +30,24 @@
...
@@ -30,13 +30,24 @@
<span>
Employee
</span>
<span>
Employee
</span>
</a>
</a>
</li>
</li>
<!-- PhungDung-->
<li
class=
"treeview"
>
<li
class=
"treeview"
>
<
!-- <a ui-sref="project">--
>
<
a
ui-sref=
"project"
>
<i
class=
"fa fa-laptop"
></i>
<i
class=
"fa fa-laptop"
></i>
<span>
Project
</span>
<span>
Project
</span>
</a>
</li>
</li>
<li
class=
"treeview"
>
<a
ui-sref=
"issues"
>
<i
class=
"fa fa-laptop"
></i>
<span>
Quản Lý Issues
</span>
</a>
</li>
<!-- END DUng-->
<li
class=
"treeview"
>
<li
class=
"treeview"
>
<li
class=
"treeview"
>
<li
class=
"treeview"
>
<a
ui-sref=
"news"
>
<a
ui-sref=
"news"
>
...
@@ -59,14 +70,14 @@
...
@@ -59,14 +70,14 @@
</a>
</a>
</li>
</li>
<
<li
class=
"treeview"
>
<li
class=
"treeview"
>
<a
href=
"#
"
>
<a
ui-sref=
"report2
"
>
<i
class=
"fa fa-envelope"
></i>
<i
class=
"fa fa-envelope"
></i>
<span>
Mailbox
</span>
<span>
Report
</span>
<i
class=
"fa fa-angle-left pull-right"
></i
>
<!-- <i class="fa fa-angle-left pull-right"></i>--
>
<small
class=
"label pull-right label-info1"
>
08
</small
>
<!-- <small class="label pull-right label-info1">08</small>--
>
<span
class=
"label label-primary1 pull-right"
>
02
</span
>
<!-- <span class="label label-primary1 pull-right">02</span>--
>
</a>
</a>
<ul
class=
"treeview-menu"
>
<ul
class=
"treeview-menu"
>
<li>
<li>
...
...
src/main/resources/public/pages/issue/IssueAdd.html
View file @
4755371a
<div
class=
"card-header"
>
<!--<div class="card-header">-->
<i
class=
"fas fa-table"
></i>
Thêm mới dự án
<!-- <i class="fas fa-table"></i> Thêm mới dự án-->
</div>
<!--</div>-->
<div
class=
"card-body"
>
<!--<div class="card-body">-->
<!-- <form ng-submit="insertIssues(Issues)">-->
<!-- <label>Tên Dự Án</label>-->
<!-- <select ng-model="Issues.projectId" autofocus="autofocus"-->
<!-- required="required">-->
<!-- <option value="">==> Tên Dự Án</option>-->
<!-- <option ng-repeat="project in listProject" value="{{project.id}}">{{project.name}}</option>-->
<!-- </select><br/>-->
<!-- <label>Tiêu đề</label>-->
<!-- <input type="text" ng-model="Issues.title" id="title" placeholder="Tiêu Đề"-->
<!-- required="required"><br/>-->
<!-- <label>Nội Dung</label>-->
<!-- <input type="text" ng-model="Issues.actionCode" id="actionCode" placeholder="Nội dung issues"-->
<!-- required="required"><br/>-->
<!-- <div>-->
<!-- <h1>{{view.message}}</h1>-->
<!-- <input type="submit" value="Save">-->
<!-- <input type="reset" value="Reset">-->
<!-- <button type="button" ui-sref="issues">Back</button>-->
<!-- </div>-->
<!-- </form>-->
<!--</div>-->
<div
class=
"container"
>
<form
ng-submit=
"insertIssues(Issues)"
>
<form
ng-submit=
"insertIssues(Issues)"
>
<label>
Tên Dự Án
</label>
<label>
Tên Dự Án
</label>
<select
ng-model=
"Issues.projectId"
autofocus=
"autofocus"
<select
ng-model=
"Issues.projectId"
autofocus=
"autofocus"
required=
"required"
>
required=
"required"
>
<option
value=
""
>
==> T
rạng Thái
</option>
<option
value=
""
>
==> T
ên Dự Án
</option>
<option
ng-repeat=
"project in listProject"
value=
"{{project.id}}"
>
{{project.name}}
</option>
<option
ng-repeat=
"project in listProject"
value=
"{{project.id}}"
>
{{project.name}}
</option>
</select><br/>
</select><br/>
<label>
Tiêu đề
</label>
<label>
Tiêu đề
</label>
...
@@ -22,4 +44,5 @@
...
@@ -22,4 +44,5 @@
<button
type=
"button"
ui-sref=
"issues"
>
Back
</button>
<button
type=
"button"
ui-sref=
"issues"
>
Back
</button>
</div>
</div>
</form>
</form>
</div>
</div>
\ No newline at end of file
src/main/resources/public/pages/issue/IssueView.html
View file @
4755371a
<div
class=
"card mb-3"
>
<div
class=
"container"
>
<div
class=
"row"
>
<div
class=
"col-md-8"
>
<div
class=
"card-header"
>
<tr>
<i
class=
"fas fa-table"
></i>
Danh Sách Issue
<td><a
ui-sref=
"addIssues"
class=
"btn btn-success"
data-toggle=
"modal"
><i
</div>
class=
"fa fa-user-plus"
></i>
<span>
Thêm Dự Án Mới
</span></a></a></td>
<div
class=
"card-body"
>
</tr>
<div
class=
"table-responsive"
>
<h4></h4>
<tr></tr>
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
style=
"margin-bottom: 10px;"
>
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
style=
"margin-bottom: 10px;"
>
<table
class=
"table table-bordered"
id=
"dataTable"
width=
"100%"
<tr></tr>
cellspacing=
"0"
>
<h2>
Danh Sách Issue
</h2>
<table
class=
"table"
>
<thead>
<thead>
<tr>
<tr>
<th>
Tên Dự Án
</th>
<th>
Tên Dự Án
</th>
<th>
Issue
</th>
<th>
Issue
</th>
...
@@ -26,20 +33,35 @@
...
@@ -26,20 +33,35 @@
<span
ng-if=
"issue.status == 0"
style=
"color: #34ce57"
>
Đang fix
</span>
<span
ng-if=
"issue.status == 0"
style=
"color: #34ce57"
>
Đang fix
</span>
<span
ng-if=
"issue.status == 1"
style=
"color: #0e90d2"
>
Đã fix xong
</span>
<span
ng-if=
"issue.status == 1"
style=
"color: #0e90d2"
>
Đã fix xong
</span>
</td>
</td>
<td><a
ui-sref=
"IssuesComment({IssuesId : issue.id})"
class=
"btn btn-info btn-circle btn-sm"
>
<td
style=
"width: 200px"
>
Chi Tiết
</a>
<a
ng-click=
"updateIssues(issue)"
class=
"btn btn-warning btn-circle btn-sm"
>
<a
ui-sref=
"IssuesComment({IssuesId : issue.id})"
class=
"btn btn-info btn-circle btn-sm"
>
Cập nhật Trạng Thái
</a>
Chi Tiết
</a>
<a
class=
"btn btn-danger btn-circle btn-sm"
ng-controller=
"IssuesDeleteController"
data-ng-click=
"IssuesDelete(issue)"
>
Xóa
</a>
<a
ng-click=
"updateIssues(issue)"
>
<button
class=
"btn btn-primary btn-xs"
data-title=
"Edit"
data-toggle=
"modal"
data-target=
"#edit"
><span
class=
"glyphicon glyphicon-pencil"
></span></button>
</a>
<a
ng-controller=
"IssuesDeleteController"
data-ng-click=
"IssuesDelete(issue)"
>
<button
class=
"btn btn-danger btn-xs"
data-title=
"Delete"
data-toggle=
"modal"
data-target=
"#delete"
>
<span
class=
"glyphicon glyphicon-trash"
></span></button>
</a>
</td>
</tr>
</tr>
</tbody>
</tbody>
</table>
</table>
<a
ui-sref=
"addIssues"
class=
"btn btn-primary btn-circle btn-sm"
style=
"margin-bottom: 10px;"
>
Thêm Issue Mới
</a>
<div
data-pagination=
""
data-num-pages=
"numPages()"
data-current-page=
"currentPage"
data-max-size=
"maxSize"
data-boundary-links=
"true"
>
</div>
</div>
</div>
</div>
</div>
<div
data-pagination=
""
data-num-pages=
"numPages()"
data-current-page=
"currentPage"
data-max-size=
"maxSize"
data-boundary-links=
"true"
>
</div>
</div>
</div>
src/main/resources/public/pages/project/groupproject/groupProjectAddView.html
View file @
4755371a
<div
class=
"card-header"
>
<i
class=
"fas fa-table"
></i>
Thành thành viên mới của dự án
<div
class=
"container"
>
</div>
<div
class=
"card-body"
>
<form
ng-controller=
"insertEmployeeProject"
ng-submit=
"insert_employeeproject(employeeProject)"
name=
"eproject"
>
<form
ng-controller=
"insertEmployeeProject"
ng-submit=
"insert_employeeproject(employeeProject)"
name=
"eproject"
>
<label>
Tên Dự Án
</label>
<h1
style=
"text-align: center"
>
Thành thành viên mới của dự án
</h1>
<select
ng-model=
"employeeProject.projectId"
autofocus=
"autofocus"
required=
"required"
>
<div
class=
"form-row"
>
<option
value=
""
>
==> Tên Dự Án
</option>
<div
class=
"col"
>
<option
ng-repeat=
"project in pGroupProject"
value=
"{{project.id}}"
>
{{project.name}}
</option>
<label>
Tên Dự Án
</label>
</select><br/>
<select
ng-model=
"employeeProject.projectId"
autofocus=
"autofocus"
required=
"required"
>
<label>
Tài khoản nhân viên
</label>
<option
value=
""
>
==> Tên Dự Án
</option>
<input
type=
"text"
ng-model=
"employeeProject.userName"
id=
"employee"
<option
ng-repeat=
"project in pGroupProject"
value=
"{{project.id}}"
>
{{project.name}}
</option>
placeholder=
"Tài khoản nhân viên"
required=
"required"
><br/>
</select>
<label>
Chức Vụ
</label>
<select
ng-model=
"employeeProject.position"
autofocus=
"autofocus"
<label>
Tài khoản nhân viên
</label>
required=
"required"
>
<input
type=
"text"
ng-model=
"employeeProject.userName"
id=
"employee"
<option
value=
""
>
==> Chức Vụ
</option>
placeholder=
"Tài khoản nhân viên"
required=
"required"
>
<option
value=
"TeamLead"
>
TeamLead
</option>
<option
value=
"Member"
>
Member
</option>
<label>
Chức Vụ
</label>
</select><br/>
<select
ng-model=
"employeeProject.position"
autofocus=
"autofocus"
<h1>
{{view.message}}
</h1>
required=
"required"
>
<option
value=
""
>
==> Chức Vụ
</option>
<option
value=
"TeamLead"
>
TeamLead
</option>
<option
value=
"Member"
>
Member
</option>
</select>
</div>
</div>
<div>
<div>
<input
type=
"submit"
value=
"Lưu"
>
<h1>
{{view.message}}
</h1>
<input
type=
"submit"
value=
"Save"
>
<input
type=
"reset"
value=
"Reset"
>
<input
type=
"reset"
value=
"Reset"
>
<button
type=
"button"
ui-sref=
"project"
>
Back
</button>
<button
type=
"button"
ui-sref=
"project"
>
Back
</button>
</div>
</div>
</form>
</form>
</div>
</div>
\ No newline at end of file
src/main/resources/public/pages/project/groupproject/groupProjectEditView.html
View file @
4755371a
<div
class=
"card-header"
>
<div
class=
"container"
>
<i
class=
"fas fa-table"
></i>
Cập nhật chức vụ của nhân viên trong nhóm
</div>
<div
class=
"card-body"
>
<form
ng-controller=
"updateGroutpProject"
ng-submit=
"updatePositionProject(gruopProject)"
name=
"formProject"
>
<form
ng-controller=
"updateGroutpProject"
ng-submit=
"updatePositionProject(gruopProject)"
name=
"formProject"
>
<input
type=
"hidden"
ng-model=
"gruopProject.id"
id=
"id"
><br/>
<input
type=
"hidden"
ng-model=
"gruopProject.id"
id=
"id"
><br/>
<input
type=
"hidden"
ng-model=
"gruopProject.projectDTO.id"
id=
"idProject"
><br/>
<input
type=
"hidden"
ng-model=
"gruopProject.projectDTO.id"
id=
"idProject"
><br/>
<label>
Tài khoản nhân viên
</label>
<label>
Tài khoản nhân viên
</label>
<input
type=
"text"
ng-model=
"gruopProject.employeeDTO.username"
id=
"descriptions"
<input
type=
"text"
ng-model=
"gruopProject.employeeDTO.username"
id=
"descriptions"
placeholder=
"Tài khoản nhân viên"
placeholder=
"Tài khoản nhân viên"
ng-disabled=
"true"
>
<br/>
ng-disabled=
"true"
>
<label>
Chức Vụ
</label>
<br/>
<label>
Chức Vụ
</label>
<select
ng-model=
"gruopProject.position"
autofocus=
"autofocus"
<select
ng-model=
"gruopProject.position"
autofocus=
"autofocus"
required=
"required"
>
required=
"required"
>
<option
value=
""
>
==> Chức Vụ
</option>
<option
value=
""
>
==> Chức Vụ
</option>
...
@@ -23,4 +20,5 @@
...
@@ -23,4 +20,5 @@
<button
type=
"button"
ui-sref=
"groupProjectByProjectId({ID: gruopProject.projectDTO.id})"
>
Back
</button>
<button
type=
"button"
ui-sref=
"groupProjectByProjectId({ID: gruopProject.projectDTO.id})"
>
Back
</button>
</div>
</div>
</form>
</form>
</div>
</div>
\ No newline at end of file
src/main/resources/public/pages/project/groupproject/groupProjectView.html
View file @
4755371a
<div
class=
"card mb-3"
>
<div
class=
"card-header"
ng-controller=
"loadGroupProjectByProjectId"
>
<div
class=
"container"
>
<div
class=
"row"
>
<div
class=
"col-md-8"
>
<i
class=
"fas fa-table"
></i>
Thành Viên Trong Nhóm Dự Án
<div
ng-model=
"ProjectName.name"
></div>
<tr>
</div>
<td><a
ui-sref=
"addEmployeeProject"
class=
"btn btn-success"
data-toggle=
"modal"
><i
<div
class=
"card-body"
>
class=
"fa fa-user-plus"
></i>
<span>
Thêm Dự Án Mới
</span></a></a></td>
<div
class=
"table-responsive"
>
</tr>
<h2
style=
"text-align: center"
>
Thành Viên Trong Nhóm Dự Án
</h2>
<table
class=
"table"
>
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
style=
"margin-bottom: 10px;"
>
<table
class=
"table table-bordered"
id=
"dataTable"
width=
"100%"
cellspacing=
"0"
>
<thead>
<thead>
<tr>
<tr>
<th>
Tài khoản
</th>
<th>
Tài khoản
</th>
<th>
Tên
</th>
<th>
Tên
</th>
...
@@ -29,20 +31,30 @@
...
@@ -29,20 +31,30 @@
<td>
{{ gruopProject.position}}
</td>
<td>
{{ gruopProject.position}}
</td>
<td>
{{ gruopProject.joinDate | date:"dd/MM/yyyy" }}
</td>
<td>
{{ gruopProject.joinDate | date:"dd/MM/yyyy" }}
</td>
<td>
{{ gruopProject.outDate | date:"dd/MM/yyyy" }}
</td>
<td>
{{ gruopProject.outDate | date:"dd/MM/yyyy" }}
</td>
<td>
<td
style=
"width: 200px"
>
<a
ui-sref=
"editEmployeeProject({ID: gruopProject.id})"
class=
"btn btn-warning btn-circle btn-sm"
>
Cập Nhật
</a>
<a
ui-sref=
"editEmployeeProject({ID: gruopProject.id})"
>
<a
class=
"btn btn-danger btn-circle btn-sm"
ng-controller=
"deleteEmployeeProject"
<button
class=
"btn btn-primary btn-xs"
data-title=
"Cập Nhật"
data-toggle=
"modal"
data-ng-click=
"deleteEmployeeProject(gruopProject)"
>
Xóa Thành Viên
</a>
data-target=
"#edit"
><span
class=
"glyphicon glyphicon-pencil"
></span></button>
</a>
<a
ng-controller=
"deleteEmployeeProject"
data-ng-click=
"deleteEmployeeProject(gruopProject)"
>
<button
class=
"btn btn-danger btn-xs"
data-title=
"Delete"
data-toggle=
"modal"
data-target=
"#delete"
>
<span
class=
"glyphicon glyphicon-trash"
></span></button>
</a>
</td>
</tr>
</tr>
</tbody>
</tbody>
</table>
</table>
<a
ui-sref=
"addEmployeeProject"
class=
"btn btn-primary btn-circle btn-sm"
style=
"margin-bottom: 10px;"
>
Thêm thành viên
</a>
<div
data-pagination=
""
data-num-pages=
"numPages()"
<a
ui-sref=
"project"
class=
"btn btn-primary btn-circle btn-sm"
style=
"margin-bottom: 10px;"
>
Back
</a>
data-current-page=
"currentPage"
data-max-size=
"maxSize"
data-boundary-links=
"true"
>
</div>
</div>
</div>
</div>
</div>
<div
data-pagination=
""
data-num-pages=
"numPages()"
data-current-page=
"currentPage"
data-max-size=
"maxSize"
data-boundary-links=
"true"
>
</div>
</div>
</div>
\ No newline at end of file
src/main/resources/public/pages/project/project/projectAddViews.html
View file @
4755371a
<div
class=
"card-header"
>
<div
class=
"container"
>
<i
class=
"fas fa-table"
></i>
Thêm mới dự án
</div>
<div
class=
"card-body"
>
<form
ng-controller=
"insertProject"
ng-submit=
"insert_project()"
>
<form
ng-controller=
"insertProject"
ng-submit=
"insert_project()"
>
<label>
Tên Dự Án
</label>
<h1
style=
" text-align: center"
>
Thêm mới dự án
</h1>
<input
type=
"text"
ng-model=
"project.name"
id=
"name"
placeholder=
"Tên Dự Án"
<div
class=
"form-row"
>
required=
"required"
style=
"height: 20px;"
><br/>
<div
class=
"col"
>
<label>
Mô tả ngắn
</label>
<label>
Tên Dự Án
</label>
<input
type=
"text"
ng-model=
"project.descriptions"
id=
"descriptions"
placeholder=
"Mô tả ngắn"
required=
"required"
><br/>
<input
type=
"text"
maxlength=
"29"
ng-model=
"project.name"
required=
"required"
/>
<label>
Ngày bắt đầu
</label>
<input
type=
"date"
ng-model=
"project.startDate"
id=
"startDate"
placeholder=
"Ngày Bắt Đầu"
required=
"required"
><br/>
<label>
Mô tả ngắn
</label>
<label>
Ngày kết thúc
</label>
<input
type=
"date"
ng-model=
"project.endDate"
id=
"endDate"
placeholder=
"nick skype"
required=
"required"
><br/>
<input
type=
"text"
maxlength=
"29"
ng-model=
"project.descriptions"
required=
"required"
/>
<label>
Ngày bắt đầu
</label>
<input
type=
"date"
maxlength=
"29"
ng-model=
"project.startDate"
required=
"required"
/>
<label>
Ngày kết thúc
</label>
<input
type=
"date"
maxlength=
"29"
ng-model=
"project.endDate"
required=
"required"
/>
</div>
</div>
<div>
<div>
<h1>
{{view.message}}
</h1>
<h1>
{{view.message}}
</h1>
<input
type=
"submit"
value=
"Save"
>
<input
type=
"submit"
value=
"Save"
>
...
@@ -20,4 +25,5 @@
...
@@ -20,4 +25,5 @@
<button
type=
"button"
ui-sref=
"project"
>
Back
</button>
<button
type=
"button"
ui-sref=
"project"
>
Back
</button>
</div>
</div>
</form>
</form>
</div>
\ No newline at end of file
</div>
src/main/resources/public/pages/project/project/projectController.js
View file @
4755371a
...
@@ -4,30 +4,6 @@ app.controller('insertProject', insertProject);
...
@@ -4,30 +4,6 @@ app.controller('insertProject', insertProject);
app
.
controller
(
'
deleteProject
'
,
deleteProject
);
app
.
controller
(
'
deleteProject
'
,
deleteProject
);
app
.
controller
(
'
updateProject
'
,
updateProject
);
app
.
controller
(
'
updateProject
'
,
updateProject
);
app
.
controller
(
'
loadProjectDetail
'
,
loadProjectDetail
);
app
.
controller
(
'
loadProjectDetail
'
,
loadProjectDetail
);
// controlers tạo Get API
// function showProject($scope, $http) {
// $scope.lstProject = [];
// $scope.page = 0;
// $scope.pagesCount = 0;
// $http.get("http://localhost:8081/quan-tri/danh-sach-du-an/" + $scope.page + "/2").then(successCallback, errorCallback);
//
// function successCallback(response) {
// console.log(response.data);
// {
// $scope.listProject = response.data.lstResult;
// $scope.page = response.data.page;
// $scope.pagesCount = response.data.totalPage;
// $scope.totalCount = response.data.totalItem;
// }
// }
//
// function errorCallback(error) {
// //error code
// console.log("can't get data!!");
// }
// };
// tạo controllers insert API
function
insertProject
(
$scope
,
$http
,
$state
)
{
function
insertProject
(
$scope
,
$http
,
$state
)
{
$scope
.
insert_project
=
function
()
{
$scope
.
insert_project
=
function
()
{
$http
({
$http
({
...
...
src/main/resources/public/pages/project/project/projectEditViews.html
View file @
4755371a
<div
class=
"card-header"
>
<div
class=
"container"
>
<i
class=
"fas fa-table"
></i>
Sửa Dự Án
</div>
<div
class=
"card-body"
>
<form
ng-controller=
"updateProject"
ng-submit=
"updateProject(project)"
name=
"formProject"
>
<form
ng-controller=
"updateProject"
ng-submit=
"updateProject(project)"
name=
"formProject"
>
<label>
Tên Dự Án
</label>
<H1
style=
"text-align: center"
>
Cập nhật dự án dự án
<h1>
<input
type=
"text"
ng-model=
"project.name"
id=
"name"
<div
class=
"form-row"
>
placeholder=
"Tên Dự Án"
<div
class=
"col"
>
required=
"required"
autofocus=
"autofocus"
name=
"txtName"
><br/>
<label>
Tên Dự Án
</label>
<label>
Mô tả ngắn
</label>
<input
type=
"text"
ng-model=
"project.descriptions"
id=
"descriptions"
<input
type=
"text"
maxlength=
"29"
ng-model=
"project.name"
required=
"required"
/>
placeholder=
"Mô tả ngắn"
required=
"required"
name=
"txtDescriptions"
><br/>
<label>
Mô tả ngắn
</label>
<select
ng-model=
"project.status"
autofocus=
"autofocus"
required=
"required"
>
<input
type=
"text"
maxlength=
"29"
ng-model=
"project.descriptions"
required=
"required"
/>
<option
value=
""
>
==> Trạng Thái
</option>
<label>
Trạng Thái
</label>
<option
value=
"0"
>
Dự Kiến
</option>
<select
ng-model=
"project.status"
autofocus=
"autofocus"
<option
value=
"1"
>
Đang Tiến Hành
</option>
required=
"required"
>
<option
value=
"2"
>
Đã Hoàn Thành
</option>
<option
value=
""
>
==> Trạng Thái
</option>
</select><br/>
<option
value=
"0"
>
Dự Kiến
</option>
<input
type=
"hidden"
ng-model=
"project.id"
id=
"id"
><br/>
<option
value=
"1"
>
Đang Tiến Hành
</option>
<option
value=
"2"
>
Đã Hoàn Thành
</option>
</select><br/>
<input
type=
"hidden"
ng-model=
"project.id"
id=
"id"
><br/>
</div>
</div>
<div>
<div>
<h1>
{{view.message}}
</h1>
<h1>
{{view.message}}
</h1>
<input
type=
"submit"
value=
"Save"
>
<input
type=
"submit"
value=
"Save"
>
...
@@ -26,4 +28,5 @@
...
@@ -26,4 +28,5 @@
<button
type=
"button"
ui-sref=
"project"
>
Back
</button>
<button
type=
"button"
ui-sref=
"project"
>
Back
</button>
</div>
</div>
</form>
</form>
</div>
\ No newline at end of file
</div>
src/main/resources/public/pages/project/project/projectListViews.html
View file @
4755371a
<div
class=
"card mb-3"
>
<div
class=
"card-header"
>
<div
class=
"container"
>
<i
class=
"fas fa-table"
></i>
Danh Sách Dự Án
<div
class=
"row"
>
</div>
<div
class=
"col-md-8"
>
<div
class=
"card-body"
>
<div
class=
"table-responsive"
>
<tr>
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
style=
"margin-bottom: 10px;"
>
<td><a
ui-sref=
"addproject"
class=
"btn btn-success"
data-toggle=
"modal"
><i
<table
class=
"table table-bordered"
id=
"dataTable"
width=
"100%"
class=
"fa fa-user-plus"
></i>
<span>
Thêm Dự Án Mới
</span></a></a></td>
cellspacing=
"0"
>
</tr>
<h4></h4>
<tr></tr>
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
>
<tr></tr>
<h2>
Thông tin dự án
</h2>
<table
class=
"table"
>
<thead>
<thead>
<tr>
<tr>
<th>
Tên Dự Án
</th>
<th>
Tên Dự Án
</th>
<th>
Mô tả ngắn
</th>
<th>
Mô tả ngắn
</th>
<th>
Ngày bắt đầu
</th>
<th>
Ngày bắt đầu
</th>
<th>
Hạn giao
</th>
<th>
Hạn giao
</th>
<th>
Trạng Thái
</th>
<th>
Trạng Thái
</th>
<th>
Thao Tác
</th>
<th
style=
"width: 200px"
>
Thao Tác
</th>
</tr>
</tr>
</thead>
</thead>
<tbody>
<tbody>
<tr
ng-repeat=
"project in pageListProject|filter:search"
>
<tr
class=
"vide"
ng-repeat=
"project in pageListProject|filter:search"
>
<td>
{{ project.name }}
</td>
<td>
{{ project.name }}
</td>
<td>
{{ project.descriptions }}
</td>
<td>
{{ project.descriptions }}
</td>
<td>
{{ project.startDate | date:"dd/MM/yyyy" }}
</td>
<td>
{{ project.startDate | date:"dd/MM/yyyy" }}
</td>
<td>
{{ project.endDate | date:"dd/MM/yyyy" }}
</td>
<td>
{{ project.endDate | date:"dd/MM/yyyy" }}
</td>
<td>
<td>
<span
ng-if=
"project.status == 0"
style=
"color: #34ce57"
>
Dự Kiến
</span>
<span
ng-if=
"project.status == 0"
style=
"color: #34ce57"
>
Dự Kiến
</span>
<span
ng-if=
"project.status == 1"
style=
"color: #0e90d2"
>
Đang Tiến Hành
</span>
<span
ng-if=
"project.status == 1"
style=
"color: #0e90d2"
>
Đang Tiến Hành
</span>
<span
ng-if=
"project.status == 2"
style=
"color: #b21f2d"
>
Hoàn Thành
</span>
<span
ng-if=
"project.status == 2"
style=
"color: #b21f2d"
>
Hoàn Thành
</span>
</td>
<!-- thao tác-->
<td
style=
"width: 200px"
>
<a
ui-sref=
"groupProjectByProjectId({ID: project.id})"
class=
"btn btn-info btn-circle btn-sm"
>
Xem
</a>
<a
ui-sref=
"editproject({ID: project.id})"
>
<button
class=
"btn btn-primary btn-xs"
data-title=
"Edit"
data-toggle=
"modal"
data-target=
"#edit"
><span
class=
"glyphicon glyphicon-pencil"
></span></button>
</a>
<a
ng-controller=
"deleteProject"
data-ng-click=
"deleteProject(project.id)"
>
<button
class=
"btn btn-danger btn-xs"
data-title=
"Delete"
data-toggle=
"modal"
data-target=
"#delete"
>
<span
class=
"glyphicon glyphicon-trash"
></span></button>
</a>
</td>
</td>
<td><a
ui-sref=
"groupProjectByProjectId({ID: project.id})"
class=
"btn btn-info btn-circle btn-sm"
>
Xem
</a>
<a
ui-sref=
"editproject({ID: project.id})"
class=
"btn btn-warning btn-circle btn-sm"
>
Sửa
</a>
<a
class=
"btn btn-danger btn-circle btn-sm"
ng-controller=
"deleteProject"
data-ng-click=
"deleteProject(project.id)"
>
Xóa
</a>
</tr>
</tr>
</tbody>
</tbody>
</table>
</table>
<a
ui-sref=
"addproject"
class=
"btn btn-primary btn-circle btn-sm"
style=
"margin-bottom: 10px;"
>
Thêm Dự Án Mới
</a>
<div
data-pagination=
""
data-num-pages=
"numPages()"
data-current-page=
"currentPage"
data-max-size=
"maxSize"
data-boundary-links=
"true"
>
</div>
</div>
</div>
</div>
</div>
<!-- <pager-directive page="{{page}}" custom-path="{{customPath}}" pages-count="{{pagesCount}}" total-count="{{totalCount}}" search-func="getProject(page)"></pager-directive>-->
<div
data-pagination=
""
data-num-pages=
"numPages()"
data-current-page=
"currentPage"
data-max-size=
"maxSize"
data-boundary-links=
"true"
>
</div>
</div>
</div>
src/main/resources/public/pages/report/employeeListViews.html
0 → 100644
View file @
4755371a
<div
class=
"card mb-3"
>
<div
class=
"card-header"
>
<i
class=
"fas fa-table"
></i>
Danh Sách Thành viên thiếu TimeSheet
</div>
<div
class=
"card-body"
>
<div
class=
"table-responsive"
>
<div
ng-controller=
"updateTimeSheetCheckedController"
>
<!-- <a ui-sref="addproject" class="btn btn-primary btn-circle btn-sm" style="margin-bottom: 10px;"> Thêm </a>-->
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
style=
"margin-bottom: 10px;"
>
{{timeSheetsMessages.view}}
<table
class=
"table table-bordered"
id=
"dataTable"
width=
"100%"
cellspacing=
"0"
>
<thead>
<tr>
<th>
STT
</th>
<th>
Ảnh
</th>
<th>
Username
</th>
<th>
Họ và tên
</th>
<th>
Địa chỉ email
</th>
<th>
SDT
</th>
<th>
Menu
</th>
</tr>
</thead>
<tbody>
<tr
data-ng-repeat=
"emp in employeesList|filter:search"
>
<td>
{{$index+1}}
</td>
<td>
{{emp.picture}}
</td>
<td>
{{emp.firstName+" "+emp.lastName}}
</td>
<td>
{{emp.emailAddress}}
</td>
<td>
{{emp.emailAddress}}
</td>
<td>
{{emp.phoneNumber}}
</td>
<td><a
ui-sref=
""
class=
"btn btn-info btn-circle btn-sm"
>
Xem
</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
\ No newline at end of file
src/main/resources/public/pages/report/employeeListViews1.html
0 → 100644
View file @
4755371a
<div
class=
"card mb-3"
>
<div
class=
"card-header"
>
<i
class=
"fas fa-table"
></i>
Danh Sách Thành viên thiếu TimeSheet
</div>
<div
class=
"card-body"
>
<div
class=
"table-responsive"
>
<div
ng-controller=
"listEmployeeLackController"
>
<form>
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
style=
"margin-bottom: 10px;"
>
<br>
<div
ng-show=
"detail"
>
<div>
Số lần thiếu báo cáo: {{listEmployeeLackDetails.numberOflack}}
</div>
<div>
<table
class=
"table table-bordered"
id=
""
width=
"100%"
cellspacing=
"0"
>
<tbody>
<tr>
<th>
Ngày thiếu:
</th>
<td
data-ng-repeat=
"dt in listEmployeeLackDetails.timeSheetList"
>
{{dt.createdAt | date:"dd/MM/yyyy"}}
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div
ng-show=
"inputDate"
>
<label
for=
"startDate"
>
Ngày Bắt Đầu
</label>
<input
type=
"date"
ng-model=
"request.firstDate"
id=
"startDate"
class=
"form-control"
placeholder=
"điểm đầu"
required=
"required"
style=
"width: auto"
>
<label
for=
"endDate"
>
Ngày Kết Thúc
</label>
<input
type=
"date"
ng-model=
"request.finalDate"
id=
"endDate"
class=
"form-control"
placeholder=
"điểm cuối"
required=
"required"
style=
"width: auto"
>
</div>
<div>
<a
ng-click=
"listEmployeeLacks($stateParams.ID,request.firstDate, request.finalDate)"
class=
"btn btn-primary btn-circle btn-sm"
style=
"margin-bottom: 10px;"
ng-show=
"show"
>
Hiển thị
</a>
<a
ng-click=
"cancelView()"
class=
"btn btn-primary btn-circle btn-sm"
style=
"margin-bottom: 10px;"
ng-show=
"cancel"
>
Đóng
</a>
</div>
</form>
<table
class=
"table table-bordered"
id=
"dataTable"
width=
"100%"
cellspacing=
"0"
>
<thead>
<tr>
<th>
STT
</th>
<th>
Ảnh
</th>
<th>
Username
</th>
<th>
Họ và tên
</th>
<th>
Địa chỉ email
</th>
<th>
SDT
</th>
<th>
Menu
</th>
</tr>
</thead>
<tbody>
<tr
data-ng-repeat=
"emp in listEmployee|filter:search"
>
<td>
{{$index+1}}
</td>
<td>
{{emp.picture}}
</td>
<td>
{{emp.firstName+" "+emp.lastName}}
</td>
<td>
{{emp.emailAddress}}
</td>
<td>
{{emp.emailAddress}}
</td>
<td>
{{emp.phoneNumber}}
</td>
<td><a
ng-click=
"listEmployeeLackDetail(emp.id)"
class=
"btn btn-info btn-circle btn-sm"
>
Xem
</a></td>
</tr>
</tbody>
</table>
<div><a
ng-click=
"history.go(-1);"
class=
"btn btn-primary btn-circle btn-sm"
style=
"margin-bottom: 10px;"
>
Trở Về
</a></div>
</div>
</div>
</div>
</div>
\ No newline at end of file
src/main/resources/public/pages/report/report.html
deleted
100644 → 0
View file @
fcb6432d
<!--<div class="container">-->
<!-- <div class="row">-->
<!-- <div class="col-md-8">-->
<!-- <div>-->
<!-- <legend>Employee Details</legend>-->
<!-- <table>-->
<!-- <tr>-->
<!-- <td><label>User Name</label></td>-->
<!-- <td>-->
<!-- <input type="text" maxlength="29" ng-model="emp.username"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label>First Name</label></td>-->
<!-- <td>-->
<!-- <input type="text" maxlength="29" ng-model="emp.firstName"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label>Last Name</label></td>-->
<!-- <td>-->
<!-- <input type="text" maxlength="29" ng-model="emp.lastName"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label id="email" for="email">Email</label> </td>-->
<!-- <td>-->
<!-- <input type="email" maxlength="150" ng-model="emp.emailAddress"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label>Phone</label></td>-->
<!-- <td>-->
<!-- <input type="text" maxlength="10" value="" ng-model="emp.phoneNumber"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label>education:</label></td>-->
<!-- <td>-->
<!-- <input ng-model="emp.education"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label >home town:</label></td>-->
<!-- <td> <input type="text" ng-model="emp.homeTown"/></td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td></td>-->
<!-- <td>-->
<!-- <input type="submit" name="submit" value="submit" ng-click="save();"/>-->
<!-- <input type="submit" name="clear" value="clear" ng-click=" emp = null"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- </table>-->
<!-- </div>-->
<!-- <div>-->
<!-- <table class="table">-->
<!-- <thead>-->
<!-- <tr>-->
<!-- <th>ID</th>-->
<!-- <th>User Name</th>-->
<!-- <th>First Name</th>-->
<!-- <th>Last Name</th>-->
<!-- <th>EmailAddress</th>-->
<!-- <th>Phone</th>-->
<!-- <th>Education</th>-->
<!-- <th>Home Town</th>-->
<!-- </tr>-->
<!-- </thead>-->
<!-- <tbody>-->
<!-- <tr class="vide" ng-repeat="emp in employess">-->
<!-- <td>{{$index + 1}}</td>-->
<!-- <td>{{emp.username}}</td>-->
<!-- <td>{{emp.firstName}}</td>-->
<!-- <td>{{emp.lastName}}</td>-->
<!-- <td>{{emp.emailAddress}}</td>-->
<!-- <td>{{emp.phoneNumber}}</td>-->
<!-- <td>{{emp.education}}</td>-->
<!-- <td>{{emp.homeTown}}</td>-->
<!-- <td><a href="#" ng-click="update(emp);">Update</a>-->
<!-- <td><a href="#" confirmed-click="delete(employee);" ng-confirm-click=" Do you want to delete this user?">Delete</a></td>-->
<!-- </tr>-->
<!-- </tbody>-->
<!-- </table>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!--</div>-->
src/main/resources/public/pages/report/reportController.js
View file @
4755371a
// /**
var
app
=
angular
.
module
(
'
myApp
'
);
// *
app
.
controller
(
'
reportController
'
,
projectList
);
// */
app
.
controller
(
'
timeSheetListController
'
,
timeSheetList
);
// angular.module("myApp").controller("employeeController", function($scope, $http,$window) {
app
.
controller
(
'
updateTimeSheetStatusController
'
,
updateTimeSheetStatus
);
// console.log("Employee controller");
app
.
controller
(
'
updateTimeSheetCheckedController
'
,
updateTimeSheetChecked
);
//
app
.
controller
(
'
listLackOfReportController
'
,
employeeList
);
// $scope.emp= {
app
.
controller
(
'
insertProjectReportController
'
,
insertProjectReport
);
// "username": "",
app
.
controller
(
'
allProjectReportController
'
,
allProjectReport
);
// "password": "",
app
.
controller
(
'
projectReportDetailController
'
,
projectReportDetail
);
// "firstName": "",
app
.
controller
(
'
deleteReportController
'
,
deleteReport
);
// "lastName": "",
app
.
controller
(
'
listEmployeeLackController
'
,
listEmployeeLack
);
// "emailAddress": "",
// app.controller('listEmployeeLackDetailController',listEmployeeLackDetail);
// "phoneNumber": "",
// "homeTown": "",
// "education": ""
// };
//
// Danh sách các dự án đang triển khai
//
function
projectList
(
$scope
,
$http
)
{
//
// $scope.save = save;
$http
({
//
method
:
'
GET
'
,
// function save(){
url
:
"
http://localhost:8081/admin/report/project
"
,
// console.log($scope.emp);
headers
:
{
// $http({
'
Content-Type
'
:
'
application/json
'
// method : 'POST',
}
// url : "http://localhost:8080/list_employee/",
// data: $scope.emp
}).
then
(
function
successCallback
(
response
)
{
// }).then(function successCallback(response) {
console
.
log
(
response
);
// console.log(response);
$scope
.
projects
=
response
.
data
;
// $window.location.href ='http://localhost:8080/#/tintuc';
},
function
errorCallback
(
response
)
{
// }, function errorCallback(response) {
console
.
log
(
response
)
// console.log(response)
});
// });
// }
}
// $scope.update = update;
// function update(employee){
//======================================================================================================================
// $scope.employee = employee;
// Danh Sách Báo cáo ngày của dự án đó
// list_employee();
function
timeSheetList
(
$scope
,
$http
,
$stateParams
){
// }
$scope
.
request
=
{
// $scope.deleteEmployee = function (employee) {
"
currentDate
"
:
""
// $http({
};
// method : 'DELETE',
var
date
=
new
Date
();
// url : 'http://localhost:8080/employee/' + employee.id
$scope
.
request
.
currentDate
=
date
.
getFullYear
()
+
'
-
'
+
(
'
0
'
+
(
date
.
getMonth
()
+
1
)).
slice
(
-
2
)
+
'
-
'
+
(
'
0
'
+
date
.
getDate
()).
slice
(
-
2
);
// }).then(_success, _error);
$http
({
// }
method
:
'
GET
'
,
//
url
:
"
http://localhost:8081/admin/report/project/
"
+
$stateParams
.
ID
+
"
/timeSheet/
"
+
$scope
.
request
.
currentDate
,
//
headers
:
{
// $http({
'
Content-Type
'
:
'
application/json
'
// method : 'GET',
}
// url : "http://localhost:8080/list_employee/",
// }).then(function successCallback(response) {
}).
then
(
function
successCallback
(
response
)
{
// console.log(response)
console
.
log
(
response
);
// $scope.employess=response.data;
$scope
.
timeSheets
=
response
.
data
;
// }, function errorCallback(response) {
console
.
log
(
$scope
.
timeSheets
);
// console.log(response)
},
function
errorCallback
(
error
)
{
// });
console
.
log
(
error
)
// });
});
\ No newline at end of file
}
function
updateTimeSheetStatus
(
$scope
,
$window
,
$http
)
{
$scope
.
request
=
{
"
currentDate
"
:
""
};
var
date
=
new
Date
();
$scope
.
request
.
currentDate
=
date
.
getFullYear
()
+
'
-
'
+
(
'
0
'
+
(
date
.
getMonth
()
+
1
)).
slice
(
-
2
)
+
'
-
'
+
(
'
0
'
+
date
.
getDate
()).
slice
(
-
2
);
$scope
.
updateTimeSheetStatus
=
function
(
id
)
{
if
(
confirm
(
"
Bạn có muốn thực hiện ?
"
))
{
$http
({
method
:
'
POST
'
,
url
:
"
http://localhost:8081/admin/report/project/
"
+
id
+
"
/update/
"
+
$scope
.
request
.
currentDate
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
successCallback
,
errorCallback
);
//tạo funtion nếu thành công!
function
successCallback
(
response
)
{
$scope
.
timeSheetsMessages
=
response
.
data
;
alert
(
$scope
.
timeSheetsMessages
.
view
);
}
//tạo funtion kiểm tra nếu thất bại
function
errorCallback
(
error
)
{
//error code
console
.
log
(
"
Update False !!!
"
);
}
}
};
};
function
updateTimeSheetChecked
(
$scope
,
$window
,
$http
)
{
$scope
.
updateTimeSheetChecked
=
function
(
id
,
check
)
{
if
(
confirm
(
"
Bạn có muốn thực hiện ?
"
))
{
$http
({
method
:
'
POST
'
,
url
:
"
http://localhost:8081/admin/report/project/timeSheet/update/
"
+
id
,
data
:
check
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
successCallback
,
errorCallback
);
//tạo funtion nếu thành công!
function
successCallback
(
response
)
{
$scope
.
timeSheetsMessages
=
response
.
data
;
alert
(
$scope
.
timeSheetsMessages
.
view
);
}
//tạo funtion kiểm tra nếu thất bại
function
errorCallback
(
error
)
{
//error code
console
.
log
(
"
UPDATE FALSE !!!
"
);
}
}
};
};
// Danh Sách Các Thành viên Thiếu Báo Cáo Ngày Của Dự Án
function
employeeList
(
$scope
,
$http
,
$stateParams
){
$scope
.
request
=
{
"
currentDate
"
:
""
};
var
date
=
new
Date
();
$scope
.
request
.
currentDate
=
date
.
getFullYear
()
+
'
-
'
+
(
'
0
'
+
(
date
.
getMonth
()
+
1
)).
slice
(
-
2
)
+
'
-
'
+
(
'
0
'
+
date
.
getDate
()).
slice
(
-
2
);
console
.
log
(
$scope
.
request
.
currentDate
);
$http
({
method
:
'
GET
'
,
url
:
"
http://localhost:8081/admin/report/project/
"
+
$stateParams
.
ID
+
"
/employee/
"
+
$scope
.
request
.
currentDate
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
function
successCallback
(
response
)
{
console
.
log
(
response
);
$scope
.
employeesList
=
response
.
data
;
console
.
log
(
$scope
.
employeesList
);
},
function
errorCallback
(
response
)
{
console
.
log
(
response
)
});
}
//======================================================================================================================
function
insertProjectReport
(
$scope
,
$window
,
$http
)
{
$scope
.
insertReport
=
function
(
id
,
firstDate
,
finalDate
)
{
$scope
.
request
=
{
"
projectId
"
:
id
,
"
firstPoint
"
:
""
,
"
finalPoint
"
:
""
}
$scope
.
request
.
firstPoint
=
firstDate
.
getFullYear
()
+
'
-
'
+
(
'
0
'
+
(
firstDate
.
getMonth
()
+
1
)).
slice
(
-
2
)
+
'
-
'
+
(
'
0
'
+
firstDate
.
getDate
()).
slice
(
-
2
);
$scope
.
request
.
finalPoint
=
finalDate
.
getFullYear
()
+
'
-
'
+
(
'
0
'
+
(
finalDate
.
getMonth
()
+
1
)).
slice
(
-
2
)
+
'
-
'
+
(
'
0
'
+
finalDate
.
getDate
()).
slice
(
-
2
);
if
(
confirm
(
"
Bạn có muốn thực hiện ?
"
))
{
$http
({
method
:
'
POST
'
,
url
:
"
http://localhost:8081/admin/report/project/newReport
"
,
data
:
$scope
.
request
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
successCallback
,
errorCallback
);
//tạo funtion nếu thành công!
function
successCallback
(
response
)
{
$scope
.
messages
=
response
.
data
;
alert
(
$scope
.
messages
.
view
);
}
//tạo funtion kiểm tra nếu thất bại
function
errorCallback
(
error
)
{
//error code
console
.
log
(
"
Create FALSE !!!
"
);
}
}
};
};
function
allProjectReport
(
$scope
,
$http
,
$stateParams
){
$http
({
method
:
'
GET
'
,
url
:
"
http://localhost:8081/admin/report/project/
"
+
$stateParams
.
ID
+
"
/allReport
"
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
function
successCallback
(
response
)
{
console
.
log
(
response
);
$scope
.
ProjectReports
=
response
.
data
;
console
.
log
(
$scope
.
ProjectReports
);
},
function
errorCallback
(
response
)
{
console
.
log
(
response
)
});
}
function
projectReportDetail
(
$scope
,
$http
,
$stateParams
){
$http
({
method
:
'
GET
'
,
url
:
"
http://localhost:8081/admin/report/project/report/
"
+
$stateParams
.
ID
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
function
successCallback
(
response
)
{
console
.
log
(
response
);
$scope
.
projectReportDetails
=
response
.
data
;
console
.
log
(
$scope
.
projectReportDetails
);
},
function
errorCallback
(
response
)
{
console
.
log
(
response
)
});
}
function
deleteReport
(
$scope
,
$window
,
$http
,
$state
)
{
$scope
.
deleteReport
=
function
(
id
)
{
if
(
confirm
(
"
Bạn có muốn xóa ?
"
))
{
$http
({
method
:
'
POST
'
,
url
:
"
http://localhost:8081/admin/report/project/report/delete/
"
+
id
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
successCallback
,
errorCallback
);
//tạo funtion nếu thành công!
function
successCallback
(
response
)
{
$scope
.
messages
=
response
.
data
;
$state
.
reload
();
alert
(
$scope
.
messages
.
view
);
}
//tạo funtion kiểm tra nếu thất bại
function
errorCallback
(
error
)
{
//error code
console
.
log
(
"
Delete FALSE !!!
"
);
}
}
};
};
//======================================================================================================================
function
listEmployeeLack
(
$scope
,
$window
,
$http
,
$stateParams
)
{
//button setting
$scope
.
inputDate
=
true
;
$scope
.
cancel
=
false
;
$scope
.
show
=
true
;
$scope
.
detail
=
false
;
//Date
$scope
.
request
=
{
"
firstPoint
"
:
""
,
"
finalPoint
"
:
""
}
$scope
.
listEmployeeLacks
=
function
(
id
,
firstDate
,
finalDate
)
{
$scope
.
request
.
firstPoint
=
firstDate
.
getFullYear
()
+
'
-
'
+
(
'
0
'
+
(
firstDate
.
getMonth
()
+
1
)).
slice
(
-
2
)
+
'
-
'
+
(
'
0
'
+
firstDate
.
getDate
()).
slice
(
-
2
);
$scope
.
request
.
finalPoint
=
finalDate
.
getFullYear
()
+
'
-
'
+
(
'
0
'
+
(
finalDate
.
getMonth
()
+
1
)).
slice
(
-
2
)
+
'
-
'
+
(
'
0
'
+
finalDate
.
getDate
()).
slice
(
-
2
);
$http
({
method
:
'
GET
'
,
url
:
"
http://localhost:8081/admin/report/project/
"
+
$stateParams
.
ID
+
"
/employee/
"
+
$scope
.
request
.
firstPoint
+
"
/
"
+
$scope
.
request
.
finalPoint
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
successCallback
,
errorCallback
);
//tạo funtion nếu thành công!
function
successCallback
(
response
)
{
$scope
.
listEmployee
=
response
.
data
;
console
.
log
(
$scope
.
listEmployee
);
}
//tạo funtion kiểm tra nếu thất bại
function
errorCallback
(
error
)
{
//error code
console
.
log
(
error
);
}
};
$scope
.
listEmployeeLackDetail
=
function
(
employeeId
)
{
//button setting
$scope
.
inputDate
=
false
;
$scope
.
cancel
=
true
;
$scope
.
show
=
false
;
$scope
.
detail
=
true
;
$http
({
method
:
'
GET
'
,
url
:
"
http://localhost:8081/admin/report/project/
"
+
$stateParams
.
ID
+
"
/employee/
"
+
employeeId
+
"
/
"
+
$scope
.
request
.
firstPoint
+
"
/
"
+
$scope
.
request
.
finalPoint
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
successCallback
,
errorCallback
);
//tạo funtion nếu thành công!
function
successCallback
(
response
)
{
$scope
.
listEmployeeLackDetails
=
response
.
data
;
console
.
log
(
$scope
.
listEmployeeLackDetails
);
}
//tạo funtion kiểm tra nếu thất bại
function
errorCallback
(
error
)
{
//error code
console
.
log
(
error
);
}
};
$scope
.
cancelView
=
function
(){
$scope
.
inputDate
=
true
;
$scope
.
cancel
=
false
;
$scope
.
show
=
true
;
$scope
.
detail
=
false
;
};
};
src/main/resources/public/pages/report/reportDetailPage.html
0 → 100644
View file @
4755371a
<div
class=
"card mb-3"
>
<div
class=
"card-header"
>
<i
class=
"fas fa-table"
></i>
Báo cáo chi tiết
</div>
<div
class=
"card-body"
ng-controller=
"projectReportDetailController"
>
<div>
<h4>
Tên Dự Án:
</h4><br>
<p>
{{projectReportDetails.projectName}}
</p>
<h4>
Team Leader
</h4>
<p>
{{projectReportDetails.teamLeader}}
</p>
<h4>
Số Thành Viên
</h4>
<p>
{{projectReportDetails.numberOfMember}}
</p>
<h4>
Điểm
</h4>
<p>
{{projectReportDetails.calendarEffort}}
</p>
<h4>
Số Thành Viên Thiếu Báo Cáo
</h4>
<p>
{{projectReportDetails.lackOfReport}}
</p>
<h4>
Khoảng Thời Gian
</h4>
<p>
{{projectReportDetails.firstDate}} --> {{projectReportDetails.firstDate}}
</p>
</div>
</div>
</div>
\ No newline at end of file
src/main/resources/public/pages/report/reportListPage.html
0 → 100644
View file @
4755371a
<div
class=
"card mb-3"
>
<div
class=
"card-header"
>
<i
class=
"fas fa-table"
></i>
Danh sách báo cáo theo thời gian của dự án
</div>
<div
class=
"card-body"
>
<div
class=
"table-responsive"
ng-controller=
"allProjectReportController"
>
<div
ng-controller=
"deleteReportController"
>
<!-- <a ui-sref="addproject" class="btn btn-primary btn-circle btn-sm" style="margin-bottom: 10px;"> Thêm </a>-->
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
style=
"margin-bottom: 10px;"
>
{{messages.view}}
<table
class=
"table table-bordered"
id=
"dataTable"
width=
"100%"
cellspacing=
"0"
>
<thead>
<tr>
<th>
STT
</th>
<th>
Tên Dự Án
</th>
<th>
Team Leader
</th>
<th>
Số Thành Viên
</th>
<th>
Điểm Nỗ Lực
</th>
<th>
Số TV Thiếu Báo Cáo
</th>
<th>
Thời gian
</th>
<th>
Menu
</th>
</tr>
</thead>
<tbody>
<tr
data-ng-repeat=
"pr in ProjectReports|filter:search"
>
<td>
{{$index+1}}
</td>
<td>
{{pr.projectName}}
</td>
<td>
{{pr.teamLeader}}
</td>
<td>
{{pr.numberOfMember}}
</td>
<td>
{{pr.calendarEffort}}
</td>
<td>
{{pr.lackOfReport}}
</td>
<td>
{{pr.firstDate | date:"dd/MM/yyyy"}}
<br>
--> {{pr.finalDate | date:"dd/MM/yyyy"}}
</td>
<td><a
ui-sref=
"reportDetail({ID: pr.id})"
class=
"btn btn-info btn-circle btn-sm"
>
Xem
</a>
<a
ng-click=
"deleteReport(pr.id)"
class=
"btn btn-warning btn-circle btn-sm"
>
Xóa
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
\ No newline at end of file
src/main/resources/public/pages/report/reportPage.html
0 → 100644
View file @
4755371a
<!--<div class="card mb-3">-->
<!-- <div class="card-header">-->
<!-- <i class="fas fa-table"></i>Danh Sách Dự án (Đang được triển khai)-->
<!-- </div>-->
<!-- <div class="card-body">-->
<!-- <div class="table-responsive" ng-controller="reportController">-->
<!-- <div ng-controller="insertProjectReportController">-->
<!--<!– <a ui-sref="addproject" class="btn btn-primary btn-circle btn-sm" style="margin-bottom: 10px;">–>-->
<!--<!– Thêm </a>–>-->
<!-- <input type="text" ng-model="search" placeholder="Search" style="margin-bottom: 10px;">-->
<!-- {{messages.view}}-->
<!-- <table class="table table-bordered" id="dataTable" width="100%"-->
<!-- cellspacing="0">-->
<!-- <thead>-->
<!-- <tr>-->
<!-- <th>STT</th>-->
<!-- <th>Tên dự án</th>-->
<!-- <th>Mô tả</th>-->
<!-- <th>Thời gian </th>-->
<!-- <th>Trạng thái</th>-->
<!-- <th>Chọn khoảng thời gian</th>-->
<!-- <th>Menu</th>-->
<!-- </tr>-->
<!-- </thead>-->
<!-- <tbody>-->
<!-- <form>-->
<!-- <tr data-ng-repeat="pro in projects|filter:search">-->
<!-- <td>{{$index+1}}</td>-->
<!-- <td>{{pro.name}}</td>-->
<!-- <td>{{pro.descriptions}}</td>-->
<!-- <td>{{pro.startDate | date:"dd/MM/yyyy"}} <br>–> {{pro.endDate | date:"dd/MM/yyyy"}}</td>-->
<!-- <td>{{pro.status}}</td>-->
<!-- <td class="form-label-group" >-->
<!--<!– <label for="startDate">Ngày Bắt Đầu</label>–>-->
<!-- <input type="date" ng-model="request.firstDate" id="startDate" class="form-control"-->
<!-- placeholder="điểm đầu" required="required">-->
<!--<!– <label for="endDate">Ngày Kết Thúc</label>–>-->
<!-- <input type="date" ng-model="request.finalDate" id="endDate" class="form-control"-->
<!-- placeholder="điểm cuối" required="required">-->
<!-- </td>-->
<!-- <td>-->
<!-- <a ng-click="insertReport(pro.id, request.firstDate, request.finalDate)" class="btn btn-info btn-circle btn-sm">Thêm mới báo cáo></a><br>-->
<!-- <a ui-sref="allReport({ID: pro.id})" class="btn btn-warning btn-circle btn-sm">Danh sách báo cáo</a> <br>-->
<!-- <a ui-sref="reportEmployeeLack({ID: pro.id})" class="btn btn-danger btn-circle btn-sm" data-ng-click="">Ds thành viên thiếu báo cáo</a>-->
<!-- </td>-->
<!-- </tr>-->
<!-- </form>-->
<!-- </tbody>-->
<!-- </table>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!--</div>-->
<div
class=
"container"
>
<div
class=
"row"
ng-controller=
"reportController"
>
<div
class=
"col-md-8"
ng-controller=
"insertProjectReportController"
>
<h4>
{{messages.view}}
</h4>
<tr></tr>
<input
class=
"search"
ng-model=
"search"
type=
"text"
placeholder=
"Search"
ng-change=
"currentPage =1"
>
<tr></tr>
<h2>
Danh Sách Dự án (Đang được triển khai)
</h2>
<table
class=
"table"
>
<thead>
<tr>
<th>
STT
</th>
<th>
Tên dự án
</th>
<th>
Mô tả
</th>
<th>
Thời gian
</th>
<th>
Trạng thái
</th>
<th>
Chọn khoảng thời gian
</th>
<th>
Menu
</th>
</tr>
</thead>
<tbody>
<tr
class=
"vide"
data-ng-repeat=
"pro in projects|filter:search"
>
<td>
{{$index+1}}
</td>
<td>
{{pro.name}}
</td>
<td>
{{pro.descriptions}}
</td>
<td>
{{pro.startDate | date:"dd/MM/yyyy"}}
<br>
--> {{pro.endDate | date:"dd/MM/yyyy"}}
</td>
<td>
{{pro.status}}
</td>
<td
class=
"form-label-group"
>
<!-- <label for="startDate">Ngày Bắt Đầu</label>-->
<input
type=
"date"
ng-model=
"request.firstDate"
id=
"startDate"
class=
"form-control"
placeholder=
"điểm đầu"
required=
"required"
>
<!-- <label for="endDate">Ngày Kết Thúc</label>-->
<input
type=
"date"
ng-model=
"request.finalDate"
id=
"endDate"
class=
"form-control"
placeholder=
"điểm cuối"
required=
"required"
>
</td>
<td>
<a
ng-click=
"insertReport(pro.id, request.firstDate, request.finalDate)"
class=
"btn btn-info btn-circle btn-sm"
>
Thêm mới báo cáo>
</a><br>
<a
ui-sref=
"allReport({ID: pro.id})"
class=
"btn btn-warning btn-circle btn-sm"
>
Danh sách báo cáo
</a>
<br>
<a
ui-sref=
"reportEmployeeLack({ID: pro.id})"
class=
"btn btn-danger btn-circle btn-sm"
data-ng-click=
""
>
Ds thành viên thiếu báo cáo
</a>
</td>
</tr>
</tbody>
</table>
<uib-pagination
total-items=
"getTotalItems()"
boundary-link-numbers=
"true"
ng-model=
"currentPage"
ng-change=
"pageChangedIndex()"
rotate=
"true"
items-per-page=
"employeePerPage"
></uib-pagination>
</div>
</div>
</div>
src/main/resources/public/pages/report/timeSheetListViews.html
0 → 100644
View file @
4755371a
<div
class=
"card mb-3"
>
<div
class=
"card-header"
>
<i
class=
"fas fa-table"
></i>
Danh Sách Timesheet Dự án
</div>
<div
class=
"card-body"
>
<div
class=
"table-responsive"
>
<div
ng-controller=
"updateTimeSheetCheckedController"
>
<!-- <a ui-sref="addproject" class="btn btn-primary btn-circle btn-sm" style="margin-bottom: 10px;"> Thêm </a>-->
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
style=
"margin-bottom: 10px;"
>
{{timeSheetsMessages.view}}
<table
class=
"table table-bordered"
id=
"dataTable"
width=
"100%"
cellspacing=
"0"
>
<thead>
<tr>
<th>
STT
</th>
<th>
Tiêu đề
</th>
<th>
Nội dung
</th>
<th>
Ghi chú
</th>
<th>
Ngày tạo
</th>
<th>
trạng thái duyệt
</th>
<th>
Menu
</th>
</tr>
</thead>
<tbody>
<tr
data-ng-repeat=
"item in timeSheets|filter:search"
>
<td>
{{$index+1}}
</td>
<td>
{{item.title}}
</td>
<td>
{{item.content}}
</td>
<td>
{{item.note}}
</td>
<td>
{{item.createdAt | date:"dd/MM/yyyy" }}
</td>
<td>
<select
ng-model=
"item.checked"
class=
"form-control"
autofocus=
"autofocus"
required=
"required"
>
<!-- <option value="">==> Trạng Thái</option>-->
<option
value=
"unapproved"
>
Chưa duyệt
</option>
<option
value=
"approved"
>
Đã duyệt
</option>
<option
value=
"deny"
>
Từ chối
</option>
</select>
</td>
<td><a
ui-sref=
""
class=
"btn btn-info btn-circle btn-sm"
>
Xem
</a>
<a
ng-click=
"updateTimeSheetChecked(item.id, item.checked)"
class=
"btn btn-warning btn-circle btn-sm"
>
Duyệt
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
\ No newline at end of file
src/main/resources/public/pages/report/timeSheetReport.html
0 → 100644
View file @
4755371a
<div
class=
"card mb-3"
>
<div
class=
"card-header"
>
<i
class=
"fas fa-table"
></i>
Danh Sách Dự án (Đang được triển khai)
</div>
<div
class=
"card-body"
>
<div
class=
"table-responsive"
ng-controller=
"reportController"
>
<div
ng-controller=
"updateTimeSheetStatusController"
>
<!-- <a ui-sref="addproject" class="btn btn-primary btn-circle btn-sm" style="margin-bottom: 10px;">-->
<!-- Thêm </a>-->
<input
type=
"text"
ng-model=
"search"
placeholder=
"Search"
style=
"margin-bottom: 10px;"
>
{{timeSheetsMessages.view}}
<table
class=
"table table-bordered"
id=
"dataTable"
width=
"100%"
cellspacing=
"0"
>
<thead>
<tr>
<th>
STT
</th>
<th>
Tên dự án
</th>
<th>
Mô tả
</th>
<th>
Thời gian bắt đầu
</th>
<th>
Thời gian kết thúc
</th>
<th>
Trạng thái
</th>
<th>
Menu
</th>
</tr>
</thead>
<tbody>
<tr
data-ng-repeat=
"pro in projects|filter:search"
>
<td>
{{$index+1}}
</td>
<td>
{{pro.name}}
</td>
<td>
{{pro.descriptions}}
</td>
<td>
{{pro.startDate | date:"dd/MM/yyyy"}}
</td>
<td>
{{pro.endDate | date:"dd/MM/yyyy"}}
</td>
<td>
{{pro.status}}
</td>
<td><a
ui-sref=
"reportTimeSheet({ID: pro.id})"
class=
"btn btn-info btn-circle btn-sm"
>
Ds báo cáo ngày
</a><br>
<a
ng-click=
"updateTimeSheetStatus(pro.id)"
class=
"btn btn-warning btn-circle btn-sm"
>
khởi tạo tv thiếu báo cáo
</a>
<br>
<a
ui-sref=
"reportEmployee({ID: pro.id})"
class=
"btn btn-danger btn-circle btn-sm"
data-ng-click=
""
>
Ds thành viên thiếu báo cáo
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
\ No newline at end of file
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