# TaskCenter x PJM2
# ApiDoc
## Login Page
| API |
| ------------- |
| Check has server |
| Login |
| Get company list |
### Check has server api
> API สำหรับเช็ค URL server
| ENDPOINT | DETAIL |
| ------------- | ------------- |
| METHOD | GET |
| URL | /Api/TaskCenter/CheckServerHostUrl |
**Request Body**
{
serverUrl: string
}
**Request Body Example**
{
serverUrl: prototype-taskcenter.on.lk
}
**Response**
{
isPojjamanServer: boolean,
serverStatus: string,
companyGuid: string,
pjmVersion: string
}
**Response Example**
{
isPojjamanServer: true,
serverStatus: "OK",
companyGuid: "13FEA752-D3A2-453D-B458-0E17DBFE98D5",
pjmVersion: "2.83.40-f4c12ac! MS-36695_PJM-TaskCenter 2025-05-27 17:35"
}
### Login
> API สำหรับ login
| ENDPOINT | DETAIL |
| ------------- | ------------- |
| METHOD | POST |
| URL | /Api/TaskCenter/AuthenticationUser |
**Request Body**
{
username: string,
password: string,
companyGuid: string
}
**Request Body Example**
{
username: "taskcenter",
password: "P@ssword",
companyGuid: "13FEA752-D3A2-453D-B458-0E17DBFE98D5"
}
**Response**
{
isSuccess: boolean,
userDetail: {
userId: int,
userGuid: string,
userCode: string,
userName: string,
userFullName: string,
userEmail: string,
enTicket: string,
}
}
**Response Example**
{
isSucess: true,
userDetail: {
userId: 74,
userGuid: "13FEA752-D3A2-453D-B458-0E17DBFE98D5",
userCode: "taskcenter001",
userName: "taskcenter",
userFullName: "task center" ,
userEmail: "test@taskcenter.builk",
enTicket: EiKf9vBVMW0Qiu6EWgzwU7PyCdD0BLxv7ks4kTe4fXvGP...,
}
}
### Get company list
> API สำหรับดึงรายการบริษัทที่ user อยู่
| ENDPOINT | DETAIL |
| ------------- | ------------- |
| METHOD | GET |
| URL | /Api/TaskCenter/GetCompanyList |
| HEADER | Key : Auth, Value : 7ECDD1B2A8C8685578D10832114FF... |

**Request Header**
{
Key: "Auth",
Value: enTicket
}
**Request Header Example**
{
Key: "Auth",
Value: "7ECDD1B2A8C8685578D10832114FF..."
}
**Query Params**
{ no query params }
**Response**
{
companyList: {
id: string | number,
imageUrl: string,
companyName: string,
companyGuid: string
}[]
}
**Response Example**
{
companyList: [
{
id: 1,
imageUrl: "https://imageLink.url/1",
companyName: "Company 1",
companyGuid: "685ac355-e0f9-4df1-8e1d-78f6a65e037e"
},
{
id: 2,
imageUrl: "https://imageLink.url/2",
companyName: "Company 2",
companyGuid: "482e6b4d-b158-446a-939e-d8908398a04c"
},
{
id: 3,
imageUrl: "https://imageLink.url/3",
companyName: "Company 3",
companyGuid: "47bf02e8-7a1b-4773-920c-576d81fe9d6d"
}
]
}
## Home page
| API |
| ------------- |
| Get announcement list|
| Get notification count |
| Get approve count |
| Get aprrove count group |
| Get wait approve list |
### Get announcement list
> API สำหรับดึงรายการที่บริษัทต้องการประกาศ ***ยังไม่มีใน pjm

**Request Body**
{
companyId: string | number
}
**Response**
{
annoucementList: {
announcementId: string | number,
subject: string,
imageUrl: string
}[]
}
**Response Example**
{
announcementList: [
{
announcementId: 1,
subject: "Everyone please watch",
imageUrl: https://imageLink.url/1
},
{
announcementId: 2,
subject: "This one is important",
imageUrl: https://imageLink.url/2
},
{
announcementId: 3,
subject: "This one is important too",
imageUrl: https://imageLink.url/3
}
]
}
### Get notification count
> API สำหรับขอจำนวน notification
| ENDPOINT | DETAIL |
| ------------- | ------------- |
| METHOD | GET |
| URL | /Api/TaskCenter/GetNotificationCount |
| HEADER | Key : Auth, Value : 7ECDD1B2A8C8685578D10832114FF... |

**Request Header**
{
Key: "Auth",
Value: enTicket
}
**Request Header Example**
{
Key: "Auth",
Value: "7ECDD1B2A8C8685578D10832114FF..."
}
**Query Params**
{
companyId: int
userId: int
}
**Query Params Example**
{
companyId: 1
userId: 99
}
**Response**
{
notificationCount: int
}
**Response Example**
{
notificationCount: 100
}
### Get approve count
> API สำหรับดึงจำนวนเอกสารที่รอ approve ทั้งหมด
| ENDPOINT | DETAIL |
| ------------- | ------------- |
| METHOD | GET |
| URL | /Api/TaskCenter/GetApproveCount |
| HEADER | Key : Auth, Value : 7ECDD1B2A8C8685578D10832114FF... |

**Request Header**
{
Key: "Auth",
Value: enTicket
}
**Request Header Example**
{
Key: "Auth",
Value: "7ECDD1B2A8C8685578D10832114FF..."
}
**Query Params**
{
companyId: int
userId: int
}
**Query Params Example**
{
companyId: 1
userId: 99
}
**Response**
{
waitingCount: int,
overdueCount: int
}
**Response Example**
{
waitingCount: 35,
overdueCount: 10
}
### Get aprrove count group
> API สำหรับดึงจำนวนเอกสารที่รอ approve โดยแบ่งตาม module
| ENDPOINT | DETAIL |
| ------------- | ------------- |
| METHOD | GET |
| URL | /Api/TaskCenter/GetApproveCountGroup |
| HEADER | Key : Auth, Value : 7ECDD1B2A8C8685578D10832114FF... |

**Request Header**
{
Key: "Auth",
Value: enTicket
}
**Request Header Example**
{
Key: "Auth",
Value: "7ECDD1B2A8C8685578D10832114FF..."
}
**Request Body**
{
companyId: int,
docTypeIdList: doctypeenum[],
dateStartAt: datetime,
dateEndAt: datetime,
projectId: int,
dueDate: string,
skip: int,
take: int,
orderBy: string,
isDesc: bool,
text: string,
stakeholderType: string,
stakeholderId: int
}
**Request Body Example**
{
companyId: 1,
docTypeIdList: [22,24,37,43],
dateStartAt: "2025-05-01 00:00:00.000",
dateEndAt: "2025-05-31 00:00:00.000",
projectId: 0,
dueDate: "all", //overdue, ondue
skip: 0,
take: 20,
orderBy: "project", //"project", "stakeholder"
isDesc: true,
text: "xxx,
stakeholderType: "supplier", //"supplier", "customer", "employee"
stakeholderId: 2
}
**Response**
{
groupCount: {
groupName: string,
approveCount: int
}[]
}
**Response Example**
{
groupCount: [
{
groupName: "Project",
approveCount: 20
},
{
groupName: "Sale",
approveCount: 5
},
{
groupName: "Timesheet",
approveCount: 45
}
]
}
### Get wait approve list
> API สำหรับดึงรายการเอกสารที่ request approve ล่าสุด (5 รายการแรก)
| ENDPOINT | DETAIL |
| ------------- | ------------- |
| METHOD | POST |
| URL | /Api/TaskCenter/GetDocumentList |
| HEADER | Key : Auth, Value : 7ECDD1B2A8C8685578D10832114FF... |

**Request Header**
{
Key: "Auth",
Value: enTicket
}
**Request Header Example**
{
Key: "Auth",
Value: "7ECDD1B2A8C8685578D10832114FF..."
}
**Request Body**
{
companyId: int,
doctypeIdList: doctypeenum[],
dateStartAt: datetime,
dateEndAt: datetime,
orgId: int,
dueDate: string,
skip: int,
take: int,
orderBy: string,
isDesc: bool,
text: string,
stakeholderType: string,
stakeholderId: int
}
**Request Body Example**
{
companyId: 4,
doctypeIdList: [],
dateStartAt: "2025-05-01 00:00:00.000",
dateEndAt: "2025-05-31 00:00:00.000",
orgId: 0,
dueDate: "all",
skip: 0,
take: 5,
orderBy: null,
isDesc: 1,
text: null,
stakeholderType: "null",
stakeholderId: 0
}
**Response**
{
totalCount: int,
documentList: [
{
docId: int,
docCode: string,
docTypeId: doctypeenum,
docTypeName: string,
docAmount: number,
docDate: datetime,
docGuid: string,
projectName: string,
orgId: int,
orgName: string,
extOrgId: int,
extOrgName: string,
employeeId: int,
employeeName: string,
currency: string,
progress: string,
checkBudget: bool,
warningBudget: bool,
dueDate: datetime,
createTimeStamp: datetime,
diffDate: int,
docStatus: docstatus,
customDocMetaName: string,
completeBy: string"
}
]
}
**Response Example**
{
"totalCount": 2,
"documentList": [
{
"docId": 3018,
"docCode": "POMAT2505-0114",
"docTypeId": 22,
"docTypeName": "PO",
"docAmount": 1.070000,
"docDate": "2025-05-28T00:00:00",
"docGuid": "3794ba46-013c-459b-ab18-165fcb05e6b2",
"projectName": null,
"orgId": 4,
"orgName": "บริษัท บิลค์ วัน กรุ๊ป จำกัด",
"extOrgId": 3,
"extOrgName": "บริษัท เอ็น. ซี. ซี. แมนเนจเม้นท์ แอนด์ ดิเวลลอปเม้นท์ จำกัด",
"employeeId": 0,
"employeeName": null,
"currency": "THB",
"progress": "TC01||TC02",
"checkBudget": false,
"warningBudget": false,
"dueDate": "2025-05-28T00:00:00",
"createTimeStamp": "2025-05-28T12:01:30.067",
"diffDate": 5,
"docStatus": null,
"customDocMetaName": null,
"completeBy": "QA-PJM-01"
},
{
"docId": 3006,
"docCode": "POMAT2505-0105",
"docTypeId": 22,
"docTypeName": "PO",
"docAmount": 1070.000000,
"docDate": "2025-05-26T00:00:00",
"docGuid": "84c3ebf5-a35e-4915-b930-45606e3615dd",
"projectName": null,
"orgId": 522,
"orgName": "ตึกเกาลัด - TestAllocate",
"extOrgId": 3,
"extOrgName": "บริษัท เอ็น. ซี. ซี. แมนเนจเม้นท์ แอนด์ ดิเวลลอปเม้นท์ จำกัด",
"employeeId": 0,
"employeeName": null,
"currency": "THB",
"progress": "TC01||TC02",
"checkBudget": false,
"warningBudget": false,
"dueDate": "2025-05-26T00:00:00",
"createTimeStamp": "2025-05-26T12:45:22.787",
"diffDate": 7,
"docStatus": null,
"customDocMetaName": null,
"completeBy": "QA-PJM-01"
}
]
}
## Setting page
| API |
| ------------- |
| Get user detail|
| Update user detail|
| Update user image |
| Get signature |
| Update signature |
| Delete signature |
### Get user detail
> API สำหรับดึงข้อมูลของ user
| ENDPOINT | DETAIL |
| ------------- | ------------- |
| METHOD | GET |
| URL | /Api/TaskCenter/GetUserDetail |
| HEADER | Key : Auth, Value : 7ECDD1B2A8C8685578D10832114FF... |

**Request Body**
{
userId: int
}
**Response**
{
userId: number,
userGuid: string,
userImage: string,
namee: string
email: string
}
**Response Example**
{
userId: 1,
userGuid: "b374b05d-2b2a-40d8-8039-562bf3233ef0"
userImage: https://image.url/1,
name: "test tester"
email: "test@mail.com"
}
### Update user detail
> API สำหรับแก้ไขข้อมูลของ user

**Request Body**
{
userId: number | string,
companyId: number | string,
firstname: string,
lastname: string,
email: string
}
**Request Example**
{
userId: 1,
companyId: 122,
firstname: "Newname",
lastname: "Newlastname",
email: "test2@mail.com"
}
**Response**
{}
### Update user image
> API สำหรับอัปโหลดรูปภาพโปรไฟล์ใหม่ของ user

**Request Body**
form-data
{
userGuid: number | string,
file: file
}
**Request Example**
{
userGuid: "b374b05d-2b2a-40d8-8039-562bf3233ef0",
file: fileType
}
**Response**
{
status: 200,
message: "SUCCESS"
}
### Get signature
> API สำหรับขอรูปภาพลายเซ็น

**Request Body**
{
userId: number | string,
companyId: number | string
}
**Response**
{
signatureImageUrl: image file
}
**Response Example**
{
signatureImageUrl: byte array // chang to blob file
}
### Update signature
> API สำหรับเพิ่ม/แก้ไขลายเซ็น

**Request Body**
{
userId: number | string,
signatureImageUrl: string
}
**Request Example**
{
userId: 1,
signatureImageUrl: https://newSigUrl.link/1
}
### Delete signature
> API สำหรับลบลายเซ็น Method Delete
**Body**
{
userGuid: string
}
**Example**
{
userGuid: "b374b05d-2b2a-40d8-8039-562bf3233ef0"
}
## Document list page
| API |
| ------------- |
| Get document list|
| Update status document|
### Get document list
> API สำหรับดึงรายการเอกสารที่รอ approve ทั้งหมด


**Request Body**
{
userId: number | string,
companyId: number | string,
group: string[],//ไม่ต้องมีก็ได้เพราะไปกรุ๊ปที่ตัวแอพได้
docTypeIdList: Enum[], // เปลี่ยนเป็น list Enum
dateStartAt?: DateTime,
dateEndAt?: DateTime,
orgId?: int, เปลี่ยนเป็น orgId แทน
DueDate: string//ยังไม่รู้คือวันที่อะไร
}
**Request Example**
{
userId: 1,
companyId: 122,
group: ["Project", "Sale", "Account"],
docTypeIdList: [22,37,43],
dateStartAt: "2024-06-15T00:00:00.0000000Z",
dateEndAt: "2024-06-16T00:00:00.0000000Z",
orgId: 1,
DueDate: "All"
}
**Request Example 2**
{
userId: 1,
companyId: 122,
group: ["Project", "Sale", "Account"],
docTypeIdList: "Timesheet",
dateStartAt: "2024-06-15T00:00:00.0000000Z",
dateEndAt: "2024-06-16T00:00:00.0000000Z",
orgId: 1,
DueDate: "Overdue"
}
**Response**
{
totalCount: number,
documentList: {
docLineOfApproveId: string
docId: int
docCode: string
docTypeId: DocTypeEnum
docTypeName: string
docAmount: decimal?
docDate: DateTime?
docGuid: string
orgId: int
orgCode: string
orgName: string
extOrgId: int
extOrgCode: string
extOrgName: string
lineOfApproveState: string
currency: string
progress: string
checkBudget: bool?
warningBudget: bool?
dueDate: DateTime?
createTimeStamp: DateTime?
docAllocationRequire: bool?
completeBy: string
remainingDays: int?
diffDate: int?
elaspeDays: int?
nextstate: string
lineOfApprovetoState: string
docStatus: DocStatus?
}[]
}
**Example**
{
totalCount: 100,
groupBy: "Project",
documentList: [
{
documentId: "Doc-ID-xxxxxx",
name: "Innovatech",
sendDate: 11/12/24,
amount: 28000,
documentType: "Cost Allocation",
DocLineOfApproveId: "423e9320-3a19-4cec-8216-b21a04fc9a31",
DocId: 3462,
DocCode: "WE2567-02-0002",
DocTypeId: 97,
DocTypeName: "WorkerExpense",
DocAmount: 10712.000000,
DocDate: "2024-02-19T00:00:00",
DocGuid: "cc619b68-b072-4217-b9c4-681b589f55c0",
OrgId: 176,
OrgCode: "6405",
OrgName: "BankTest",
LineOfApproveState: "Start",
Currency: "THB",
Progress: "@Bank",
CheckBudget: false,
WarningBudget: false,
DueDate: "2024-02-19T00:00:00",
CreateTimeStamp: "2024-02-19T12:47:19.77",
DocAllocationRequire: true,
CompleteBy: "lucifer",
RemainingDays: -336,
DiffDate: 336,
ElaspeDays: -337,
nextstate: "Done",
LineOfApprovetoState: "Done",
DocStatus: null
}
]
}
### Update status document
> API สำหรับอัพเดทสถานะ (approve/reject) ของเอกสาร


**Request Body**
{
documents: {
docId: int,
docCode: string,
docGuid: string,
docTypeId: DoctypeEnum,
docDate: Datetime,
orgId: int,
note?: string,
comfirm: bool
}[],
isApprove: boolean
}
**Response Body**
{
docId: int,
docTypeId: DoctypeEnum,
isSuccess: bool,
message: {
messageType: MessageType,
messageTH: string,
messageENG: string,
isApprove: bool
}
}[]
## Document detail page
| API |
| ------------- |
| Get document detail |
| Get attach file list |
| Get allocate detail |
| Send email |
| Download attach file |
| Get Customnote |
### Get document detail
> API สำหรับดึงรายละเอียดของเอกสาร

**Request Body**
{
doId: int,
docGuiId: string,
doctypeId: DocTypeEnum
}
**Response**
documentDetail: {
docLineOfApproveId: string,
docId: int,
docCode: string,
docGuId: string,
docTypeId: DocTypeEnum,
docTypeName: string,
docDate: DateTime,
orgId: int,
orgCode: string,
orgName: string,
lineOfApproveState: string,
condition: string,
docAmount: decimal,
completeBy: string,
docCreateBy: string,
createTimestamp: DateTime,
lineOfApproveNextState: string,
extOrgId: int,
extOrgCode: string,
extOrgName: string,
taxBase: decimal,
taxRate: decimal,
taxAmount: decimal,
beforeTax: decimal,
currency: string,
currencyRate: decimal,
docRemarks: string,
approveSignalTo: string,
token: string,
docCreateTimestamp: DateTime
},
activities: [
{
activityDateTime: DateTime,
userAvatarLink: string,
actionStatus: string,
"username": string,
"comment": string,
"docLineApproveGuid": string
}
],
loaList: [
{
activityDateTime: DateTime,
userAvatarLink: string,
actionStatus: string,
username: string,
comment: string,
docLineApproveGuid: string
}
],
currentActivities: {
activityDateTime: DateTime,
userAvatarLink: string,
actionStatus: string,
username: string,
comment: string,
docLineApproveGuid: string
}
**Example**
"documentDetail": {
"docLineOfApproveId": "d70212ef-8868-43f1-a6df-ebb59f8c6d8d",
"docId": 3462,
"docCode": "WE2567-02-0002",
"docGuId": "cc619b68-b072-4217-b9c4-681b589f55c0",
"docTypeId": 97,
"docTypeName": "WorkerExpense",
"docDate": "2024-02-19T00:00:00",
"orgId": 176,
"orgCode": "6405",
"orgName": "BankTest",
"lineOfApproveState": "Start",
"condition": "true",
"docAmount": 10712.000000,
"completeBy": "Bank",
"docCreateBy": "lucifer",
"createTimestamp": "2025-01-23T14:33:21.967",
"lineOfApproveNextState": null,
"extOrgId": null,
"extOrgCode": null,
"extOrgName": null,
"taxBase": null,
"taxRate": null,
"taxAmount": null,
"beforeTax": 10712.000000,
"currency": "THB",
"currencyRate": 1.000000000000,
"docRemarks": null,
"approveSignalTo": null,
"token": "EAAAANaZ9ChvI0n9iWwtD/BYmWqlw9q4b61+SzreD8PjyE5UsXc4Tyy59wgzsAeFOtt3Aw==",
"docCreateTimestamp": "2024-02-19T12:46:05"
},
"activities": [
{
"activityDateTime": "2025-01-23T07:33:13.477Z",
"userAvatarLink": "79d092cb-de76-46cd-a51b-4fc842c968ab",
"actionStatus": "Edit",
"username": "Bank",
"comment": "Edit",
"docLineApproveGuid": null
},
{
"activityDateTime": "2025-01-21T11:13:12.587Z",
"userAvatarLink": "79d092cb-de76-46cd-a51b-4fc842c968ab",
"actionStatus": "Complete",
"username": "Bank",
"comment": "Complete",
"docLineApproveGuid": null
},
{
"activityDateTime": "2025-01-21T11:13:08.533Z",
"userAvatarLink": "79d092cb-de76-46cd-a51b-4fc842c968ab",
"actionStatus": "Reject",
"username": "Bank",
"comment": "",
"docLineApproveGuid": null
},
{
"activityDateTime": "2025-01-21T11:01:04.526Z",
"userAvatarLink": "79d092cb-de76-46cd-a51b-4fc842c968ab",
"actionStatus": "Approved",
"username": "Bank",
"comment": "",
"docLineApproveGuid": "b51a7d0b-f783-407d-8d73-de06cfc8a4f7"
}
],
"loaList": [
{
"activityDateTime": "2026-01-23T17:57:57.603",
"userAvatarLink": "88888888-4444-4444-4444-13b7b30456a1",
"actionStatus": "Start",
"username": "@Bank||MD",
"comment": "[...]",
"docLineApproveGuid": null
},
{
"activityDateTime": "2026-01-23T17:57:57.603",
"userAvatarLink": "88888888-4444-4444-4444-13b7b30456a1",
"actionStatus": "L1",
"username": "@Bank||MD",
"comment": "[...]",
"docLineApproveGuid": null
}
],
"currentActivities": {
"activityDateTime": "2025-01-23T17:57:57.1948374+07:00",
"userAvatarLink": "79d092cb-de76-46cd-a51b-4fc842c968ab",
"actionStatus": "0",
"username": "Bank",
"comment": "[...]",
"docLineApproveGuid": null
}
### Get attach file list
> API สำหรับดึงรายการไฟล์แนบของเอกสาร

**Request Body**
{
docGuid: string,
docTypeId : DocTypeEnum,
uploadType: string // "fileattachment", "customnote"
}
**Response**
{
fileList: {
fileUrl: string,
fileName: string
}[]
}
### Get allocate detail
> API สำหรับดึงข้อมูลจัดสรรของเอกสาร

**Request Body**
{
documentId: number | string
}
**Response**
{
orgId: int,
orgCode: string,
orgDesc: string,
code: string,
name: string,
description: string,
docTypeId: DoctypeEnum,
docId: int,
docActualAmount: decimal,
budgetAmount: decimal,
percentTheshold: decimal,
budgetControlAmount: decimaldecimal,
budgetRemainAmount: decimal,
budgetControlRemainAmount: decimal,
budgetRemainApproveAmount: decimal,
budgetRemainApproveQty: decimal,
hasDocLOA: bool,
budgetControlType: ControlBudgetType,
isNotControl: bool
}
**Example**
[
{
"orgId": 379,
"orgCode": "CGE2023/019",
"orgDesc": "CGE2023/019 : ททท.-Amazing Northern Life",
"code": "a-001",
"name": "Exhibition & Event",
"description": "Exhibition & Event",
"docTypeId": 22,
"docId": 2768,
"docActualAmount": 934.580000,
"budgetAmount": 10000.000000,
"percentTheshold": null,
"budgetControlAmount": 10000.000000,
"budgetRemainAmount": 8065.420000,
"budgetControlRemainAmount": 8065.420000,
"budgetRemainApproveAmount": 9065.420000,
"budgetRemainApproveQty": 0.0000000000000,
"hasDocLOA": true,
"budgetControlType": 4,
"isNotControl": false
}
]
### Get Customnote
> API สำหรับดึงรายการ customnote ของเอกสาร
**Request Body**
{
docGuid: string,
}
**Response**
{
{
KeyName: string,
KeyNameTH: string,
DataType: string,
Values: string[]
}[]
}
**Example**
{
{
KeyName: "A.Project",
KeyNameTH: "โปรเจค/งานที่ขายสินค้า",
DataType: "System.String",
Values: [
"CGE2023/019 : ททท.-Amazing Northern Life"
]
}
}
### Send email
> API สำหรับส่งอีเมลไฟล์เอกสารที่ได้รับการ approve

**Request Body**
{
documentId: number | string
sendTo: string,
form: string
}
**Response Body**
{}
### Download attach file
> API สำหรับ downlaod ไฟล์แนบ

**Request Body**
{
docId: int,
docCode: string,
docGuid: string,
docTypeId: DocTypeEnum,
subDocTypeId: int,
docCurrency": string,
docCurrencyRate: decimal,
docStatus: DocStatus,
docOrgId: int,
formName: string,
companyId: int
}
**Response**
{
File Blob { type: 'application/pdf' });
}
## History page
| API |
| ------------- |
| Get history count |
### Get history count
> API สำหรับดึงจำนวนเอกสารที่ถูก approve/reject ไปแล้ว

**Request Body**
{
userId: number | string,
companyId: number | string
}
**Response**
{
totalApproveCount: number,
totalRejectCount: number
}
## Notification
| API |
| ------------- |
| Get notification list |
### Get notification list
> API สำหรับดึงรายการ notification

**Request Body**
{
userId: number | string,
companyId: number | string
}
**Response**
{
notificationList: {
guid: string,
docId: int,
"docCode": string,
"docTypeId": int,
"docTypeName": string,
"docGuid": string,
"docDate": DateTime,
"docOrgId": int,
"docOrgCode": string,
"docOrgName": string,
"docStatus": DocstatusEnum,
"taskType": TaskTypeEnum,
"taskTypeName": string,
"message": string,
"taskTimeStamp": DateTime?,
"taskBy": string,
"dueDate": DateTime?,
"toDocTypeId": DocTypeEnum,
"toDocTypeName": string,
"refSettingId": string,
"createAction": TaskActionEnum,
"createActionName": string,
"requireAction": TaskActionEnum,
"requireActionName": string,
"userAvatar": string,
"isDone": bool?,
"checkpoint": bool?,
"isArchive": bool?,
"isView": bool?,
"accessAble": bool?,
"workerName": string,
"docAmount": decimal,
"subDocTypeId": int,
"subDocTypeName": string,
"currency": string
}[]
**Example**
{
"notificationList": [
{
"guid": "23117e04-5a18-45ba-9d8e-15221b84fca5",
"docId": 2768,
"docCode": "Doctype2501-0002",
"docTypeId": 22,
"docTypeName": "PO",
"docGuid": "2a4abda6-65c3-4c3b-9858-13842829c977",
"docDate": "2025-01-28T00:00:00",
"docOrgId": 379,
"docOrgCode": "CGE2023/019",
"docOrgName": "ททท.-Amazing Northern Life",
"docStatus": 2,
"taskType": 0,
"taskTypeName": "Approve",
"message": " Total State 2",
"taskTimeStamp": "2025-01-28T16:19:10.46",
"taskBy": "taskcenter",
"dueDate": null,
"toDocTypeId": null,
"toDocTypeName": "",
"refSettingId": "36ad3644-d645-420c-b077-85d6e4ed3326",
"createAction": 1,
"createActionName": "Complete",
"requireAction": 2,
"requireActionName": "Approve",
"userAvatar": "http://localhost:53037/Avatar/b374b05d-2b2a-40d8-8039-562bf3233ef0?s=200",
"isDone": false,
"checkpoint": false,
"isArchive": false,
"isView": null,
"accessAble": true,
"workerName": "taskcenter",
"docAmount": 1000.000000,
"subDocTypeId": 231,
"subDocTypeName": "231",
"currency": "THB"
}
]
}
## Comment
| API |
| ------------- |
| Get comment list count |
| Get comment list |
| Get comment detail|
| Send comment|
### Get comment list count
> API สำหรับดึงรายการเอกสารทั้งหมดและจำนวน comment ของแต่ละรายการ

**Request Body**
{
userId: int,
companyId: int
}
**Response**
{
module: string,
documentCommentCount: int
}[]
**Example**
[
{
"module": "Procurement",
"documentCommentCount": 5
},
{
"module": "Account",
"documentCommentCount": 1
},
{
"module": "Inventory",
"documentCommentCount": 0
},
{
"module": "ListManager",
"documentCommentCount": 0
},
{
"module": "TimeSheet",
"documentCommentCount": 0
},
{
"module": "Project",
"documentCommentCount": 0
},
{
"module": "Sale",
"documentCommentCount": 0
}
]
### Get comment list
> API สำหรับดึงรายการเอกสารทั้งหมดและจำนวน comment ของแต่ละรายการ

**Request Body**
{
userId: int,
companyId: int,
docTypeId: DocTypeEnum[],
skip: int,
take: int
}
**Response**
{
module: string,
documentComments: [
{
docId: string,
docGuid: string,
docCode: string,
docTypeId: DocTypeEnum,
orgName: string,
commentCount: int
}
]
}[]
**Example**
{
"module": "Procurement",
"documentComments": [
{
"docId": 2769,
"docGuid": "2ec3e4f0-708b-4d43-bc38-0ea62809f5e7",
"docCode": "Doctype2501-0003",
"docTypeId": 22,
"orgName": "ททท.-Amazing Northern Life",
"commentCount": 1
}
]
},
{
"module": "Account",
"documentComments": []
},
{
"module": "Inventory",
"documentComments": []
},
{
"module": "ListManager",
"documentComments": []
},
{
"module": "TimeSheet",
"documentComments": []
},
{
"module": "Project",
"documentComments": []
},
{
"module": "Sale",
"documentComments": []
}
### Get comment detail
> API สำหรับดึง comment ของเอกสาร

**Request Body**
{
docGuid: string
}
**Response**
{
docId: int,
docGuid: string,
docTypeId: DocTypeEnum,
docTypeName: string,
commentList: {
imageUrl: string,
text: string,
createdAt: DateTime
}[]
}
### Send comment
> API สำหรับเพิ่ม comment

**Request Body**
{
userId: number | string,
comment: string
documentDetail: {
docId: int,
docGuid: string,
docTypeId: DocTypeEnum,
docTypeName: string
}
}
**Response**
{
message: string,
isMention: bool
}
**Example**
{
message: "SUCCESS",
isMention: true
}
### Send comment mention
> API สำหรับเพิ่ม comment mention

**Request Body**
{
docId: int,
docTypeId: DocTypeEnum,
createAction: string, // "Mention"
date: datetime,
message: string // @user
}
**Response**
{
bool
}
**Example**
{
true
}
## MasterData
| API |
| ------------- |
| GetDocTypeEnum |
| GetExtOrgList |
| GetEmployeeList |
| GetOrganizationList |
### GetDocTypeEnum
> API สำหรับเพิ่มดึงข้อมูล doctype
**Request Body**
{
}
**Response**
{
Value: int,
Name: string
}[]
**Example**
{
Value: 22,
Name: "PO"
},
{
Value: 24,
Name: "Request"
}
### GetExtOrgList
> API สำหรับเพิ่มดึงข้อมูล ExtOrg
**Request Body**
{
skip: int,
take: int,
type: string,
filter: string
}
**Response**
{
Id: int,
Code: string,
Name: string,
TypeTag: string
}[]
**Example**
{
Id: 3650,
Code: "S01821",
Name: "ศักดิ์สิทธิ์ ภัทรประกฤต",
TypeTag: "Supplier"
},
{
Id: 3644,
Code: "S01820",
Name: "ธนาคารพัฒนาวิสาหกิจขนาดกลางและขนาดย่อมแห่งประเทศไทย,
TypeTag: "Supplier,Customer"
}
### GetEmployeeList
> API สำหรับเพิ่มดึงข้อมูล Employee
**Request Body**
{
skip: int,
take: int,
filter: string
}
**Response**
{
Id: int,
Code: string,
Name: string,
Type: string
}[]
**Example**
{
Id: 63,
Code: "UserTest",
Name: "User Approve1",
UserName: "pjm",
Type: "Employee"
},
{
Id: 59,
Code: "PJM2API",
Name: "Pojjaman2 API",
UserName: "PJM2API",
Type: "Employee"
}
### GetOrganizationList
> API สำหรับเพิ่มดึงข้อมูล Organization
**Request Body**
{
skip: int,
take: int,
filter: string,
userId: int,
companyId: int
}
**Response**
{
Id: int,
Code: string,
Name: string
}[]
**Example**
{
"Id": 379,
"Code": "CGE2023/019",
"Name": "ททท.-Amazing Northern Life"
},
{
"Id": 380,
"Code": "CGE2023/020",
"Name": "ททท.-Amazing Northern Life 2"
}
# PJM2AppNotification
## Environment
| Name | Endpoint | AuthString |
| ---------- | --------------------------------- | ------------------------------------------------------------------------ |
| Test | https://ptc-api-test.builk.com | eyJVc2VyTmFtZSI6IlBqbVNlcnZlcjJTZXJ2ZXIiLCJQYXNzd29yZCI6InI9KTUpKm9cMDJROyJ9 |
| Production |https://ptc-api.builk.com | eyJVc2VyTmFtZSI6IlBqbVNlcnZlcjJTZXJ2ZXIiLCJQYXNzd29yZCI6InI9KTUpKm9cMDJROyJ9 |
## Commom response model
> เป็น model ที่นำไปใช้ในการตอบกลับของทุกๆ API และจะละเว้นการอธิบาย model นี้ในทุกๆ API ต่อไป
| Parameter | Description | Schema |
| --------- | -------------------------------------- |-------------|
| Data | ค่าที่ตอบกลับจากการทำงานของAPI นั้นๆ (ไม่มีการตอบกลับอนุญาติให้เป็น null) | Object |
| Status | สถานะการทำงานของ API นั้นๆ โดยหมวด 2xx คือทำงานปกติ 4xx คือข้อมูลบ้างอย่างไม่ถูกต้อง และ 5xx เป็นการทำงานผิดปกติของทาง API โดยถ้าได้รับ status หมวด 5xx สามารถแจ้งทีมงานเพื่อตรวจสอบได้ | Integer |
| Messge | คำอธิบายขยายความของ Status เบื้องต้น โดยหมวด 2xx จะเป็น success 4xx ส่วนใหญ่จะเป็นข้อบงชี้ของข้อมูลที่ไม่ถูกต้อง และ 5xx จะเป็น error ของตัวระบบ | String
## Conversation Agreement
### DataType
#### NotificationScopeEnum
| Key | Value |
| ------------ | ----- |
| User | 1 |
| Organization | 2 |
| Email | 3 |
#### NotificationTypeEnum
| Key | Value |
| -------------- | ----- |
| RequestApprove | 1 |
| Approved | 2 |
| Rejected | 3 |
| Comment | 4 |
| Mention | 5 |
#### ApplicationModule
| Key | Value |
| ----------------------------------- | ----- |
| ProjectNBudget (Project and budget) | 1 |
| Sales | 2 |
| Procurement | 3 |
| Timesheet | 4 |
| Account | 5 |
| Inventory | 6 |
| CustomDoc | 7 |
| ListManager (Master data) | 8 |
## `POST api/V1/External/PJMNotification/SendNotification`
`ใช้สำหรับส่งการแจ้งเตือนไปยังอุปกรณ์เคลื่อนที่ ที่ลงทะเบียนไว้ทั้งในระบบปฏิบัตการ IOS และ Android`
**Header Request**
| Key | Value |
| ------------- | -------------------------- |
| authorization | Bearer {[AuthString](#Environment)} |
**Body Request**
| Parameter | Description | Schema | default |
| --------------------------------------------------------- | ------------------------------------------------- | ---------- | ------- |
| [NotificationScope](#NotificationScopeEnum) (*required*) | Type of identity | number | 1 |
| [NotificationType](#NotificationTypeEnum) (*required*) | Type of topic notification | number | N/A |
| [ApplicationModule](#ApplicationModule) (*required*) | Type of module in app | number | N/A |
| UserId (*required*) | PJM User id in number type | number | null |
| OrgId | PJM organization id in number type | number | null |
| Email | PJM user email | string | null |
| UseCustomMessage | Flag to enable to use test from request | boolean | false |
| Payload | Body of request for use to handle navigate in app | dictionary | null |
| MessageTH | Custom message in Thai language | object | null |
| MessageEN | Custom message in English language | object | null |
**Payload dictionary**
`Default payload`
| Parameter | Description | Schema | default |
| --------- | ------------------------ | ------ | ------- |
| docCode (*required*) | | string | null |
| docGuid (*required*) | | string | null |
| docId (*required*) | | string | null |
| docType (*required*) | | string | null |
| subDocType (*required*) | | string | null |
| actor | Name of aprrove or reject document | string | null |
| mentorName | Name of mentor when comment and mention to target | string | null |
| commentName | Name of commentor | string | null |
| commentMessage | value of comment | string | null |
| [docModule](#ApplicationModule) (*required*) | | string | null |
**Message`[TH | EN]` Object**
| Parameter | Description | Schema | default |
| --------- | ------------------------ | ------ | ------- |
| Title | Title of notification | string | null |
| Body | Content of notifivcation | string | null |
**Body Response**
| Parameter | Description | Schema |
| --------- | -------------------- | ------- |
| Data | Status of processing | boolean |
#### Example Request 1
```json
{
"notificationScope": 1,
"notificationType": 1,
"userId": "73",
"orgId": null,
"email": null,
"payload": {
"docCode": "DOC-00001",
"docGuid": "88f6ad50-c9ae-4220-93f0-e9dd6d5125d2",
"docId": "3",
"docType" :"1",
"subDocType":"2",
"docModule":"1",
},
"useCustomMessage": false,
"messageTH": null,
"messageEN": null
}
```
#### Example Response 1
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```
#### Example Request 2
```json
{
"notificationScope": 1,
"notificationType": 1,
"userId": "73",
"orgId": null,
"email": null,
"payload": {
"docCode": "DOC-00001",
"docGuid": "88f6ad50-c9ae-4220-93f0-e9dd6d5125d2",
"docId": "3",
"docType" :"1",
"subDocType":"2",
"docModule":"1",
},
"useCustomMessage": true,
"messageTH": {
"title": "มีเอกสารรอนุมัติ",
"body": "มีเอกสารรอนุมัติ",
},
"messageEN": {
"title": "Have new document waiting approve",
"body": "Have new document waiting approve"
}
}
```
#### Example Response 2
```json
{
"Status": 200,
"Message": "success",
"Data": true
}
```