94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
package projects
|
|
|
|
import (
|
|
"cpone-dashboard/db"
|
|
"cpone-dashboard/menu/auth"
|
|
"net/http"
|
|
)
|
|
|
|
type ProjectItem struct {
|
|
McuID int
|
|
Label string
|
|
CorporateName string
|
|
Number string
|
|
StartDate string
|
|
EndDate string
|
|
TotalParticipant int
|
|
}
|
|
|
|
func HasAccess(username string, mcuID int) (bool, error) {
|
|
var count int
|
|
err := db.DB.QueryRow(`
|
|
SELECT COUNT(*)
|
|
FROM dashboard_user_project up
|
|
JOIN dashboard_user u ON u.User_ID = up.UserProj_UserID
|
|
WHERE u.User_Username = ?
|
|
AND up.UserProj_McuID = ?
|
|
AND up.UserProj_IsActive = 'Y'
|
|
`, username, mcuID).Scan(&count)
|
|
return count > 0, err
|
|
}
|
|
|
|
func GetUserProjects(username string) ([]ProjectItem, error) {
|
|
rows, err := db.DB.Query(`
|
|
SELECT
|
|
p.Mcu_ProjectMcuID,
|
|
COALESCE(p.Mcu_ProjectLabel, ''),
|
|
COALESCE(p.Mcu_ProjectCorporateName, ''),
|
|
COALESCE(p.Mcu_ProjectNumber, ''),
|
|
COALESCE(DATE_FORMAT(p.Mcu_ProjectStartDate, '%d/%m/%Y'), ''),
|
|
COALESCE(DATE_FORMAT(p.Mcu_ProjectEndDate, '%d/%m/%Y'), ''),
|
|
p.Mcu_ProjectTotalParticipant
|
|
FROM dashboard_user_project up
|
|
JOIN dashboard_user u ON u.User_ID = up.UserProj_UserID
|
|
JOIN mcu_project p ON p.Mcu_ProjectMcuID = up.UserProj_McuID
|
|
WHERE u.User_Username = ?
|
|
AND up.UserProj_IsActive = 'Y'
|
|
AND p.Mcu_ProjectIsActive = 'Y'
|
|
ORDER BY p.Mcu_ProjectStartDate DESC
|
|
`, username)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var items []ProjectItem
|
|
for rows.Next() {
|
|
var item ProjectItem
|
|
if err := rows.Scan(
|
|
&item.McuID,
|
|
&item.Label,
|
|
&item.CorporateName,
|
|
&item.Number,
|
|
&item.StartDate,
|
|
&item.EndDate,
|
|
&item.TotalParticipant,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, item)
|
|
}
|
|
return items, rows.Err()
|
|
}
|
|
|
|
func GetUserProject(username string, mcuID int) (ProjectItem, bool, error) {
|
|
items, err := GetUserProjects(username)
|
|
if err != nil {
|
|
return ProjectItem{}, false, err
|
|
}
|
|
for _, item := range items {
|
|
if item.McuID == mcuID {
|
|
return item, true, nil
|
|
}
|
|
}
|
|
return ProjectItem{}, false, nil
|
|
}
|
|
|
|
func ResolveCurrentProject(username string, r *http.Request) (ProjectItem, bool, error) {
|
|
selectedID := auth.SelectedProjectID(r)
|
|
if selectedID == 0 {
|
|
return ProjectItem{}, false, nil
|
|
}
|
|
return GetUserProject(username, selectedID)
|
|
}
|