Commit 3c3ffaf1 by Ooh-Ao

sss

parent 3f337714
...@@ -71,3 +71,12 @@ async def delete_project_member(db: AsyncSession, pmId: UUID): ...@@ -71,3 +71,12 @@ async def delete_project_member(db: AsyncSession, pmId: UUID):
await db.commit() await db.commit()
return {"message": "ProjectMember deleted successfully"} return {"message": "ProjectMember deleted successfully"}
async def get_projects_by_member_id(db: AsyncSession, memberId: UUID):
"""
ดึงรายการ ProjectMember ทั้งหมดที่ memberId นี้สังกัดอยู่
"""
result = await db.execute(
select(ProjectMember).where(ProjectMember.memberId == memberId)
)
return result.scalars().all()
\ No newline at end of file
...@@ -11,7 +11,8 @@ from ..controllers.project_member_controller import ( ...@@ -11,7 +11,8 @@ from ..controllers.project_member_controller import (
get_all_project_members, get_all_project_members,
get_project_member_by_id, get_project_member_by_id,
update_project_member, update_project_member,
delete_project_member delete_project_member,
get_projects_by_member_id
) )
from ..schemas.project_member_schema import ( from ..schemas.project_member_schema import (
ProjectMemberCreate, ProjectMemberCreate,
...@@ -64,3 +65,14 @@ async def delete_pm_endpoint( ...@@ -64,3 +65,14 @@ async def delete_pm_endpoint(
db: AsyncSession = Depends(get_db) db: AsyncSession = Depends(get_db)
): ):
return await delete_project_member(db, pmId) return await delete_project_member(db, pmId)
@router.get("/member/{memberId}", response_model=List[ProjectMemberResponse])
async def get_projects_for_member(
memberId: UUID,
db: AsyncSession = Depends(get_db)
):
"""
ดึงรายการ ProjectMember ทั้งหมดที่ memberId คนนี้สังกัดอยู่
"""
pms = await get_projects_by_member_id(db, memberId)
return pms
\ No newline at end of file
import { TranslateService } from "@ngx-translate/core";
import { BaseModel } from "./base.model";
export class ProjectMemberModel extends BaseModel {
pm_id: string;
user_id: string;
projectId: string;
role_in_project: string;
created_at: string;
updated_at: string;
constructor(data?: Partial<ProjectMemberModel>, translateService?: TranslateService) {
super(data, translateService);
this.pm_id = data?.pm_id ?? '';
this.user_id = data?.user_id ?? '';
this.projectId = data?.projectId ?? '';
this.role_in_project = data?.role_in_project ?? '';
this.created_at = data?.created_at ?? new Date().toISOString();
this.updated_at = data?.updated_at ?? new Date().toISOString();
}
}
import { environment } from "../../../environments/environment";
export class ProjectModel {
projectId?: string;
picture: string;
project_name: string;
project_desc?: string;
start_date: string;
end_date: string;
// created_at: string;
// updated_at: string;
constructor(data?: Partial<ProjectModel>) {
this.picture = data?.picture ?? '';
this.projectId = data?.projectId
this.project_name = data?.project_name ?? '';
this.project_desc = data?.project_desc ?? '';
this.start_date = data?.start_date!
this.end_date = data?.end_date!
// this.created_at = data?.created_at!
// this.updated_at = data?.updated_at!
}
getPicture(): string {
return this.picture ? environment.baseUrl + '/images/' + this.picture : './assets/images/faces/9.jpg'
}
}
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { map, tap, switchMap, filter, reduce } from "rxjs/operators";
import { ProjectMemberModel } from '../models/project-members';
@Injectable({
providedIn: 'root'
})
export class ProjectMemberService {
apiBaseUrl = "/project-members";
constructor(
private http: HttpClient
) { }
getById(id: string) {
return this.http
.get<ProjectMemberModel>(this.apiBaseUrl + "/" + id)
.pipe(map((e) => new ProjectMemberModel(e)));
}
getLists() {
return this.http
.get<ProjectMemberModel[]>(this.apiBaseUrl)
.pipe(
map((e) => e.map((e) => new ProjectMemberModel(e)))
);
}
save(body: ProjectMemberModel) {
return this.http.post<{
"message": string,
"user": ProjectMemberModel
}>(this.apiBaseUrl, new ProjectMemberModel(body));
}
update(body: ProjectMemberModel) {
return this.http.put<{
"message": string,
"user": ProjectMemberModel
}>(this.apiBaseUrl + "/" + body.user_id, new ProjectMemberModel(body));
}
delete(body: ProjectMemberModel) {
return this.http.delete<{
"message": string,
"user": ProjectMemberModel
}>(this.apiBaseUrl + "/" + body.user_id);
}
getCompanyAdmin(memberId: string) {
return this.http
.get<ProjectMemberModel[]>(this.apiBaseUrl + "/member/" + memberId)
.pipe(
map((e) => e.map((e) => new ProjectMemberModel(e)))
);
}
}
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { map, tap, switchMap, filter, reduce } from "rxjs/operators";
import { ProjectModel } from '../models/project.model';
@Injectable({
providedIn: 'root'
})
export class ProjectService {
apiBaseUrl = "/projects";
constructor(
private http: HttpClient
) { }
getById(id: string) {
return this.http
.get<ProjectModel>(this.apiBaseUrl + "/" + id)
.pipe(map((e) => new ProjectModel(e)));
}
getLists() {
return this.http
.get<ProjectModel[]>(this.apiBaseUrl)
.pipe(
map((e) => e.map((e) => new ProjectModel(e)))
);
}
save(body: ProjectModel) {
return this.http.post<{
"message": string,
"user": ProjectModel
}>(this.apiBaseUrl, new ProjectModel(body));
}
update(body: ProjectModel) {
return this.http.put<{
"message": string,
"user": ProjectModel
}>(this.apiBaseUrl + "/" + body.projectId, new ProjectModel(body));
}
delete(body: ProjectModel) {
return this.http.delete<{
"message": string,
"user": ProjectModel
}>(this.apiBaseUrl + "/" + body.projectId);
}
}
...@@ -18,6 +18,7 @@ import { LoginModel } from '../../shared/user-auth.model'; ...@@ -18,6 +18,7 @@ import { LoginModel } from '../../shared/user-auth.model';
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { Validators } from 'ngx-editor'; import { Validators } from 'ngx-editor';
import { EmployeeService } from '../../DPU/services/employee.service'; import { EmployeeService } from '../../DPU/services/employee.service';
import { ProjectMemberService } from '../../DPU/services/project-members.service';
@Component({ @Component({
selector: 'app-login', selector: 'app-login',
...@@ -44,7 +45,7 @@ export class LoginComponent { ...@@ -44,7 +45,7 @@ export class LoginComponent {
private routes: Router, private routes: Router,
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
public authService: AuthService, public authService: AuthService,
private empServie: EmployeeService private projectMember: ProjectMemberService
) { ) {
localStorage.clear() localStorage.clear()
} }
...@@ -123,15 +124,13 @@ export class LoginComponent { ...@@ -123,15 +124,13 @@ export class LoginComponent {
this.tokenService.saveToken(result.access_token); this.tokenService.saveToken(result.access_token);
// this.tokenService.saveRefreshToken(result.refreshToken); // this.tokenService.saveRefreshToken(result.refreshToken);
this.tokenService.saveUser(result); this.tokenService.saveUser(result);
if (result.member.status == 1) {
if (result.member.role == 99) { if (result.member.role == 99 || result.member.role == 1) {
this.routes.navigate(['/admin/member-manage']) this.routes.navigate(['/admin/member-manage'])
} else {
this.adminCompanyList(result.member.memberId)
}
} else { } else {
this.error = 'ไม่สามารถใช้งานได้กรุณาติดต่อผู้ให้บริการ' this.adminCompanyList(result.member.memberId)
} }
// this.routes.navigate(['/admin/member-manage']) // this.routes.navigate(['/admin/member-manage'])
}, (error) => { }, (error) => {
this.showLoader = false; this.showLoader = false;
...@@ -141,9 +140,9 @@ export class LoginComponent { ...@@ -141,9 +140,9 @@ export class LoginComponent {
} }
adminCompanyList(memberId: string) { adminCompanyList(memberId: string) {
this.empServie.getCompanyAdmin(memberId).subscribe(result => { this.projectMember.getCompanyAdmin(memberId).subscribe(result => {
if (result.length > 0) { if (result.length > 0) {
this.routes.navigate(['/company/home/'+result[0].companyId]) this.routes.navigate(['/company/home/' + result[0].projectId])
} }
else { else {
this.error = 'คุณไม่มีสิทธิ์ใช้งานในส่วนนี้' this.error = 'คุณไม่มีสิทธิ์ใช้งานในส่วนนี้'
......
...@@ -54,7 +54,7 @@ export class NavService implements OnDestroy { ...@@ -54,7 +54,7 @@ export class NavService implements OnDestroy {
public fullScreen = false; public fullScreen = false;
active: any; active: any;
constructor(private router: Router , private tokenService : TokenService) { constructor(private router: Router, private tokenService: TokenService) {
this.setScreenWidth(window.innerWidth); this.setScreenWidth(window.innerWidth);
fromEvent(window, 'resize') fromEvent(window, 'resize')
.pipe(debounceTime(1000), takeUntil(this.unsubscriber)) .pipe(debounceTime(1000), takeUntil(this.unsubscriber))
...@@ -91,32 +91,66 @@ export class NavService implements OnDestroy { ...@@ -91,32 +91,66 @@ export class NavService implements OnDestroy {
MENUITEMS: Menu[] = [] MENUITEMS: Menu[] = []
getCommonMenu() { getCommonMenu() {
return [ // return [
// Dashboard // // Dashboard
{ headTitle: 'ผู้ดูแลระบบ' }, // { headTitle: 'ผู้ดูแลระบบ' },
{ // {
icon: 'user', // icon: 'user',
path: '/admin/member-manage', // path: '/admin/member-manage',
title: 'จัดการสมาชิก', // title: 'จัดการสมาชิก',
type: 'link', // type: 'link',
}, // },
{ // {
icon: 'buildings', // icon: 'buildings',
path: '/admin/manage-companys', // path: '/admin/manage-companys',
title: 'จัดการบริษัท', // title: 'จัดการบริษัท',
type: 'link', // type: 'link',
}, // },
{ // {
icon: 'user-check', // icon: 'user-check',
path: '/admin/admin-manage', // path: '/admin/admin-manage',
title: 'จัดการสิทธิ์ผู้ดูแลระบบ', // title: 'จัดการสิทธิ์ผู้ดูแลระบบ',
type: 'link', // type: 'link',
}, // },
// { headTitle: 'User Management' }, // // { headTitle: 'User Management' },
]; // ];
return [{ headTitle: 'Admin' },
{ path: '/admin/home', title: 'หน้าแรก', type: 'link' },
{
title: 'การจัดการ',
type: 'sub',
selected: false,
Menusub: true,
active: false,
children: [
{ path: '/admin/member-manage', title: 'การจัดการสมาชิก', type: 'link' },
{ path: '/admin/product-management', title: 'การจัดการอุปกรณ์', type: 'link' },
{
path: '/admin/manage-companys',
title: 'การจัดการโครงการ',
type: 'link',
},
],
}, {
title: 'การเบิกคืนอุปกรณ์',
type: 'sub',
selected: false,
Menusub: true,
active: false,
children: [
{ path: '/admin/borrow-management', title: 'การจัดการการเบิก', type: 'link' },
{ path: '/admin/approve-borrow', title: 'อนุมัติการเบิก', type: 'link' },
{ path: '/admin/return-borrow', title: 'อนุมัติการคืน', type: 'link' },
{
path: '/admin/history-product',
title: 'ประวัติการทำรายการ',
type: 'link',
},
],
}]
} }
getCompanyMenu() { getCompanyMenu() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment