Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
portal-apps-manage
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
angular
portal-apps-manage
Commits
559c22d0
Commit
559c22d0
authored
Oct 08, 2025
by
Nattana Chaiyamat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
จัดการบริษัท จัดการพนักงาน
parent
5411f194
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
1345 additions
and
189 deletions
+1345
-189
package-lock.json
package-lock.json
+67
-67
employee-sync.model.ts
src/app/portal-manage/models/mylearn/employee-sync.model.ts
+227
-0
myhrcompany.model.ts
src/app/portal-manage/models/mylearn/myhrcompany.model.ts
+24
-24
zeeme-company.model.ts
src/app/portal-manage/models/mylearn/zeeme-company.model.ts
+83
-0
employee-manage.component.html
...ge/mylearn/employee-manage/employee-manage.component.html
+292
-0
employee-manage.component.scss
...ge/mylearn/employee-manage/employee-manage.component.scss
+10
-0
employee-manage.component.ts
...nage/mylearn/employee-manage/employee-manage.component.ts
+192
-0
myhrcompany.component.html
...tal-manage/mylearn/myhrcompany/myhrcompany.component.html
+252
-61
myhrcompany.component.scss
...tal-manage/mylearn/myhrcompany/myhrcompany.component.scss
+10
-0
myhrcompany.component.ts
...ortal-manage/mylearn/myhrcompany/myhrcompany.component.ts
+158
-35
mylearn.routes.ts
src/app/portal-manage/mylearn/mylearn.routes.ts
+4
-0
myhrcompany.service.ts
...app/portal-manage/services/mylearn/myhrcompany.service.ts
+22
-1
http-request.interceptor.ts
src/app/shared/services/http-request.interceptor.ts
+3
-1
nav.service.ts
src/app/shared/services/nav.service.ts
+1
-0
No files found.
package-lock.json
View file @
559c22d0
...
...
@@ -134,7 +134,6 @@
"version"
:
"5.2.0"
,
"resolved"
:
"https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz"
,
"integrity"
:
"sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=10"
...
...
@@ -620,7 +619,6 @@
"version"
:
"17.3.12"
,
"resolved"
:
"https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.12.tgz"
,
"integrity"
:
"sha512-1F8M7nWfChzurb7obbvuE7mJXlHtY1UG58pcwcomVtpPb+kPavgAO8OEvJHYBMV+bzSxkXt5UIwL9lt9jHUxZA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@babel/core"
:
"7.23.9"
,
...
...
@@ -649,7 +647,6 @@
"version"
:
"7.23.9"
,
"resolved"
:
"https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz"
,
"integrity"
:
"sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@ampproject/remapping"
:
"^2.2.0"
,
...
...
@@ -680,14 +677,12 @@
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"
,
"integrity"
:
"sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver"
:
{
"version"
:
"6.3.1"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
,
"integrity"
:
"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"bin"
:
{
"semver"
:
"bin/semver.js"
...
...
@@ -1099,7 +1094,6 @@
"version"
:
"7.26.10"
,
"resolved"
:
"https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz"
,
"integrity"
:
"sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@ampproject/remapping"
:
"^2.2.0"
,
...
...
@@ -1130,14 +1124,12 @@
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"
,
"integrity"
:
"sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/@babel/core/node_modules/semver"
:
{
"version"
:
"6.3.1"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
,
"integrity"
:
"sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"bin"
:
{
"semver"
:
"bin/semver.js"
...
...
@@ -3791,6 +3783,16 @@
"@fortawesome/fontawesome-svg-core"
:
"~1.2.27 || ~1.3.0-beta2 || ^6.1.0"
}
},
"node_modules/@fortawesome/fontawesome-common-types"
:
{
"version"
:
"6.7.2"
,
"resolved"
:
"https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz"
,
"integrity"
:
"sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/@fortawesome/fontawesome-free"
:
{
"version"
:
"7.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-7.0.0.tgz"
,
...
...
@@ -3800,6 +3802,19 @@
"node"
:
">=6"
}
},
"node_modules/@fortawesome/fontawesome-svg-core"
:
{
"version"
:
"6.7.2"
,
"resolved"
:
"https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz"
,
"integrity"
:
"sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"@fortawesome/fontawesome-common-types"
:
"6.7.2"
},
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/@grpc/grpc-js"
:
{
"version"
:
"1.9.15"
,
"resolved"
:
"https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz"
,
...
...
@@ -3874,7 +3889,6 @@
"version"
:
"8.0.2"
,
"resolved"
:
"https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz"
,
"integrity"
:
"sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"string-width"
:
"^5.1.2"
,
...
...
@@ -3892,7 +3906,6 @@
"version"
:
"6.2.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz"
,
"integrity"
:
"sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=12"
...
...
@@ -3905,7 +3918,6 @@
"version"
:
"6.2.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
,
"integrity"
:
"sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=12"
...
...
@@ -3918,14 +3930,12 @@
"version"
:
"9.2.2"
,
"resolved"
:
"https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz"
,
"integrity"
:
"sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/@isaacs/cliui/node_modules/string-width"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz"
,
"integrity"
:
"sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"eastasianwidth"
:
"^0.2.0"
,
...
...
@@ -3943,7 +3953,6 @@
"version"
:
"7.1.0"
,
"resolved"
:
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz"
,
"integrity"
:
"sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"ansi-regex"
:
"^6.0.1"
...
...
@@ -3959,7 +3968,6 @@
"version"
:
"8.1.0"
,
"resolved"
:
"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz"
,
"integrity"
:
"sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"ansi-styles"
:
"^6.1.0"
,
...
...
@@ -4079,6 +4087,13 @@
"rxjs"
:
">=7.5.0"
}
},
"node_modules/@kurkle/color"
:
{
"version"
:
"0.3.4"
,
"resolved"
:
"https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz"
,
"integrity"
:
"sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w=="
,
"license"
:
"MIT"
,
"peer"
:
true
},
"node_modules/@leichtgewicht/ip-codec"
:
{
"version"
:
"2.0.5"
,
"resolved"
:
"https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz"
,
...
...
@@ -5689,7 +5704,6 @@
"version"
:
"0.11.0"
,
"resolved"
:
"https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz"
,
"integrity"
:
"sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"engines"
:
{
...
...
@@ -7024,6 +7038,16 @@
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/@types/jquery"
:
{
"version"
:
"3.5.33"
,
"resolved"
:
"https://registry.npmjs.org/@types/jquery/-/jquery-3.5.33.tgz"
,
"integrity"
:
"sha512-SeyVJXlCZpEki5F0ghuYe+L+PprQta6nRZqhONt9F13dWBtR/ftoaIbdRQ7cis7womE+X2LKhsDdDtkkDhJS6g=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"@types/sizzle"
:
"*"
}
},
"node_modules/@types/json-schema"
:
{
"version"
:
"7.0.15"
,
"resolved"
:
"https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz"
,
...
...
@@ -7150,6 +7174,13 @@
"@types/send"
:
"*"
}
},
"node_modules/@types/sizzle"
:
{
"version"
:
"2.3.10"
,
"resolved"
:
"https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz"
,
"integrity"
:
"sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww=="
,
"license"
:
"MIT"
,
"peer"
:
true
},
"node_modules/@types/sockjs"
:
{
"version"
:
"0.3.36"
,
"resolved"
:
"https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz"
,
...
...
@@ -7679,7 +7710,6 @@
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz"
,
"integrity"
:
"sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/anymatch"
:
{
...
...
@@ -7711,7 +7741,6 @@
"version"
:
"5.0.2"
,
"resolved"
:
"https://registry.npmjs.org/arg/-/arg-5.0.2.tgz"
,
"integrity"
:
"sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/argparse"
:
{
...
...
@@ -7865,7 +7894,6 @@
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
,
"integrity"
:
"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/base64-js"
:
{
...
...
@@ -8249,7 +8277,6 @@
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz"
,
"integrity"
:
"sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 6"
...
...
@@ -8298,6 +8325,19 @@
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/chart.js"
:
{
"version"
:
"4.5.0"
,
"resolved"
:
"https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz"
,
"integrity"
:
"sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"@kurkle/color"
:
"^0.3.0"
},
"engines"
:
{
"pnpm"
:
">=8"
}
},
"node_modules/chokidar"
:
{
"version"
:
"3.6.0"
,
"resolved"
:
"https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz"
,
...
...
@@ -8515,7 +8555,6 @@
"version"
:
"4.1.1"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-4.1.1.tgz"
,
"integrity"
:
"sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 6"
...
...
@@ -8654,7 +8693,6 @@
"version"
:
"1.9.0"
,
"resolved"
:
"https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz"
,
"integrity"
:
"sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/cookie"
:
{
...
...
@@ -8833,7 +8871,6 @@
"version"
:
"7.0.6"
,
"resolved"
:
"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz"
,
"integrity"
:
"sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"path-key"
:
"^3.1.0"
,
...
...
@@ -8848,7 +8885,6 @@
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/which/-/which-2.0.2.tgz"
,
"integrity"
:
"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"isexe"
:
"^2.0.0"
...
...
@@ -8930,7 +8966,6 @@
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
,
"integrity"
:
"sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"bin"
:
{
"cssesc"
:
"bin/cssesc"
...
...
@@ -9173,7 +9208,6 @@
"version"
:
"1.2.2"
,
"resolved"
:
"https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz"
,
"integrity"
:
"sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
},
"node_modules/dir-glob"
:
{
...
...
@@ -9193,7 +9227,6 @@
"version"
:
"1.1.3"
,
"resolved"
:
"https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz"
,
"integrity"
:
"sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/dns-packet"
:
{
...
...
@@ -9314,7 +9347,6 @@
"version"
:
"0.2.0"
,
"resolved"
:
"https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
,
"integrity"
:
"sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/echarts"
:
{
...
...
@@ -9382,7 +9414,6 @@
"version"
:
"0.1.13"
,
"resolved"
:
"https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz"
,
"integrity"
:
"sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"dependencies"
:
{
...
...
@@ -9393,7 +9424,6 @@
"version"
:
"0.6.3"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
,
"integrity"
:
"sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"dependencies"
:
{
...
...
@@ -10255,7 +10285,6 @@
"version"
:
"3.3.1"
,
"resolved"
:
"https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz"
,
"integrity"
:
"sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"cross-spawn"
:
"^7.0.6"
,
...
...
@@ -10272,7 +10301,6 @@
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
,
"integrity"
:
"sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"engines"
:
{
"node"
:
">=14"
...
...
@@ -11365,7 +11393,6 @@
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
,
"integrity"
:
"sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
,
"dev"
:
true
,
"license"
:
"ISC"
},
"node_modules/isobject"
:
{
...
...
@@ -11473,7 +11500,6 @@
"version"
:
"3.4.3"
,
"resolved"
:
"https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz"
,
"integrity"
:
"sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="
,
"dev"
:
true
,
"license"
:
"BlueOak-1.0.0"
,
"dependencies"
:
{
"@isaacs/cliui"
:
"^8.0.2"
...
...
@@ -11527,7 +11553,6 @@
"version"
:
"1.21.7"
,
"resolved"
:
"https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz"
,
"integrity"
:
"sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"bin"
:
{
"jiti"
:
"bin/jiti.js"
...
...
@@ -12017,7 +12042,6 @@
"version"
:
"1.2.4"
,
"resolved"
:
"https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
,
"integrity"
:
"sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/loader-runner"
:
{
...
...
@@ -12428,7 +12452,6 @@
"version"
:
"7.1.2"
,
"resolved"
:
"https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
,
"integrity"
:
"sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"engines"
:
{
"node"
:
">=16 || 14 >=14.17"
...
...
@@ -12695,7 +12718,6 @@
"version"
:
"2.7.0"
,
"resolved"
:
"https://registry.npmjs.org/mz/-/mz-2.7.0.tgz"
,
"integrity"
:
"sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"any-promise"
:
"^1.0.0"
,
...
...
@@ -13301,6 +13323,13 @@
"node"
:
">=0.10.0"
}
},
"node_modules/nouislider"
:
{
"version"
:
"15.8.1"
,
"resolved"
:
"https://registry.npmjs.org/nouislider/-/nouislider-15.8.1.tgz"
,
"integrity"
:
"sha512-93TweAi8kqntHJSPiSWQ1o/uZ29VWOmal9YKb6KKGGlCkugaNfAupT7o1qTHqdJvNQ7S0su5rO6qRFCjP8fxtw=="
,
"license"
:
"MIT"
,
"peer"
:
true
},
"node_modules/npm"
:
{
"version"
:
"10.9.3"
,
"resolved"
:
"https://registry.npmjs.org/npm/-/npm-10.9.3.tgz"
,
...
...
@@ -15916,7 +15945,6 @@
"version"
:
"4.1.1"
,
"resolved"
:
"https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
,
"integrity"
:
"sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=0.10.0"
...
...
@@ -15926,7 +15954,6 @@
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz"
,
"integrity"
:
"sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 6"
...
...
@@ -16173,7 +16200,6 @@
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz"
,
"integrity"
:
"sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
,
"dev"
:
true
,
"license"
:
"BlueOak-1.0.0"
},
"node_modules/pacote"
:
{
...
...
@@ -16352,7 +16378,6 @@
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
,
"integrity"
:
"sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=8"
...
...
@@ -16368,7 +16393,6 @@
"version"
:
"1.11.1"
,
"resolved"
:
"https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz"
,
"integrity"
:
"sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="
,
"dev"
:
true
,
"license"
:
"BlueOak-1.0.0"
,
"dependencies"
:
{
"lru-cache"
:
"^10.2.0"
,
...
...
@@ -16385,7 +16409,6 @@
"version"
:
"10.4.3"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz"
,
"integrity"
:
"sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
,
"dev"
:
true
,
"license"
:
"ISC"
},
"node_modules/path-to-regexp"
:
{
...
...
@@ -16436,7 +16459,6 @@
"version"
:
"4.0.7"
,
"resolved"
:
"https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz"
,
"integrity"
:
"sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 6"
...
...
@@ -16673,7 +16695,6 @@
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz"
,
"integrity"
:
"sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"camelcase-css"
:
"^2.0.1"
...
...
@@ -16834,7 +16855,6 @@
"version"
:
"6.2.0"
,
"resolved"
:
"https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz"
,
"integrity"
:
"sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="
,
"dev"
:
true
,
"funding"
:
[
{
"type"
:
"opencollective"
,
...
...
@@ -16860,7 +16880,6 @@
"version"
:
"6.1.2"
,
"resolved"
:
"https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz"
,
"integrity"
:
"sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"cssesc"
:
"^3.0.0"
,
...
...
@@ -17401,7 +17420,6 @@
"version"
:
"0.2.2"
,
"resolved"
:
"https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz"
,
"integrity"
:
"sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
},
"node_modules/regenerate"
:
{
...
...
@@ -18227,7 +18245,6 @@
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
,
"integrity"
:
"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"shebang-regex"
:
"^3.0.0"
...
...
@@ -18240,7 +18257,6 @@
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
,
"integrity"
:
"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=8"
...
...
@@ -18791,7 +18807,6 @@
"version"
:
"4.2.3"
,
"resolved"
:
"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
,
"integrity"
:
"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"emoji-regex"
:
"^8.0.0"
,
...
...
@@ -18819,7 +18834,6 @@
"version"
:
"6.0.1"
,
"resolved"
:
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
,
"integrity"
:
"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"ansi-regex"
:
"^5.0.1"
...
...
@@ -18842,7 +18856,6 @@
"version"
:
"3.35.0"
,
"resolved"
:
"https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz"
,
"integrity"
:
"sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@jridgewell/gen-mapping"
:
"^0.3.2"
,
...
...
@@ -18865,7 +18878,6 @@
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz"
,
"integrity"
:
"sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"balanced-match"
:
"^1.0.0"
...
...
@@ -18875,7 +18887,6 @@
"version"
:
"10.4.5"
,
"resolved"
:
"https://registry.npmjs.org/glob/-/glob-10.4.5.tgz"
,
"integrity"
:
"sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"foreground-child"
:
"^3.1.0"
,
...
...
@@ -18896,7 +18907,6 @@
"version"
:
"9.0.5"
,
"resolved"
:
"https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz"
,
"integrity"
:
"sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"brace-expansion"
:
"^2.0.1"
...
...
@@ -18997,7 +19007,6 @@
"version"
:
"3.4.17"
,
"resolved"
:
"https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz"
,
"integrity"
:
"sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@alloc/quick-lru"
:
"^5.2.0"
,
...
...
@@ -19035,7 +19044,6 @@
"version"
:
"6.0.2"
,
"resolved"
:
"https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
,
"integrity"
:
"sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"is-glob"
:
"^4.0.3"
...
...
@@ -19048,7 +19056,6 @@
"version"
:
"15.1.0"
,
"resolved"
:
"https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz"
,
"integrity"
:
"sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"postcss-value-parser"
:
"^4.0.0"
,
...
...
@@ -19066,7 +19073,6 @@
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz"
,
"integrity"
:
"sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="
,
"dev"
:
true
,
"funding"
:
[
{
"type"
:
"opencollective"
,
...
...
@@ -19102,7 +19108,6 @@
"version"
:
"6.1.2"
,
"resolved"
:
"https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz"
,
"integrity"
:
"sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"cssesc"
:
"^3.0.0"
,
...
...
@@ -19318,7 +19323,6 @@
"version"
:
"3.3.1"
,
"resolved"
:
"https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz"
,
"integrity"
:
"sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"any-promise"
:
"^1.0.0"
...
...
@@ -19328,7 +19332,6 @@
"version"
:
"1.6.0"
,
"resolved"
:
"https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz"
,
"integrity"
:
"sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"thenify"
:
">= 3.1.0 < 4"
...
...
@@ -19442,7 +19445,6 @@
"version"
:
"0.1.13"
,
"resolved"
:
"https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz"
,
"integrity"
:
"sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
},
"node_modules/tslib"
:
{
...
...
@@ -19503,7 +19505,6 @@
"version"
:
"5.2.2"
,
"resolved"
:
"https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz"
,
"integrity"
:
"sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"bin"
:
{
"tsc"
:
"bin/tsc"
,
...
...
@@ -20692,7 +20693,6 @@
"version"
:
"7.0.0"
,
"resolved"
:
"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
,
"integrity"
:
"sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"ansi-styles"
:
"^4.0.0"
,
...
...
src/app/portal-manage/models/mylearn/employee-sync.model.ts
0 → 100644
View file @
559c22d0
import
{
TranslateService
}
from
"@ngx-translate/core"
;
import
{
BaseModel
}
from
"../base.model"
;
import
{
environment
}
from
"../../../../environments/environment"
;
export
interface
EmployeeSyncModel
{
birthdate
:
string
branchEngName
:
string
branchId
:
string
branchName
:
string
bu1EngName
:
string
bu1Id
:
string
bu1Name
:
string
bu2EngName
:
string
bu2Id
:
string
bu2Name
:
string
bu3EngName
:
string
bu3Id
:
string
bu3Name
:
string
bu4EngName
:
string
bu4Id
:
string
bu4Name
:
string
bu5EngName
:
string
bu5Id
:
string
bu5Name
:
string
bu6EngName
:
string
bu6Id
:
string
bu6Name
:
string
bu7EngName
:
string
bu7Id
:
string
bu7Name
:
string
companyCode
:
string
companyId
:
string
companyName
:
string
email
:
string
empGroupEngName
:
string
empGroupId
:
string
empGroupName
:
string
employeeId
:
string
empStatusEngName
:
string
empStatusId
:
string
empStatusName
:
string
empTypeEngName
:
string
empTypeId
:
string
empTypeName
:
string
firstEngName
:
string
firstHireDate
:
string
firstname
:
string
jobEngName
:
string
jobId
:
string
jobName
:
string
lastEngName
:
string
lastname
:
string
marryEngName
:
string
marryId
:
string
marryName
:
string
memberId
:
string
mobile
:
string
nationalityEngName
:
string
nationalityId
:
string
nationalityName
:
string
picture
:
string
plEngName
:
string
plId
:
string
plName
:
string
positionEngName
:
string
positionId
:
string
positionName
:
string
prefixEngName
:
string
prefixId
:
string
prefixName
:
string
sex
:
string
sexEngName
:
string
sexName
:
string
startDate
:
string
workareaEngName
:
string
workareaId
:
string
workareaName
:
string
}
export
class
MyEmployeeSyncModel
extends
BaseModel
implements
EmployeeSyncModel
{
birthdate
:
string
branchEngName
:
string
branchId
:
string
branchName
:
string
bu1EngName
:
string
bu1Id
:
string
bu1Name
:
string
bu2EngName
:
string
bu2Id
:
string
bu2Name
:
string
bu3EngName
:
string
bu3Id
:
string
bu3Name
:
string
bu4EngName
:
string
bu4Id
:
string
bu4Name
:
string
bu5EngName
:
string
bu5Id
:
string
bu5Name
:
string
bu6EngName
:
string
bu6Id
:
string
bu6Name
:
string
bu7EngName
:
string
bu7Id
:
string
bu7Name
:
string
companyCode
:
string
companyId
:
string
companyName
:
string
email
:
string
empGroupEngName
:
string
empGroupId
:
string
empGroupName
:
string
employeeId
:
string
empStatusEngName
:
string
empStatusId
:
string
empStatusName
:
string
empTypeEngName
:
string
empTypeId
:
string
empTypeName
:
string
firstEngName
:
string
firstHireDate
:
string
firstname
:
string
jobEngName
:
string
jobId
:
string
jobName
:
string
lastEngName
:
string
lastname
:
string
marryEngName
:
string
marryId
:
string
marryName
:
string
memberId
:
string
mobile
:
string
nationalityEngName
:
string
nationalityId
:
string
nationalityName
:
string
picture
:
string
plEngName
:
string
plId
:
string
plName
:
string
positionEngName
:
string
positionId
:
string
positionName
:
string
prefixEngName
:
string
prefixId
:
string
prefixName
:
string
sex
:
string
sexEngName
:
string
sexName
:
string
startDate
:
string
workareaEngName
:
string
workareaId
:
string
workareaName
:
string
constructor
(
data
?:
Partial
<
EmployeeSyncModel
>
,
translateService
?:
TranslateService
)
{
super
(
data
,
translateService
)
this
.
birthdate
=
data
?.
birthdate
||
''
this
.
branchEngName
=
data
?.
branchEngName
||
''
this
.
branchId
=
data
?.
branchId
||
''
this
.
branchName
=
data
?.
branchName
||
''
this
.
bu1EngName
=
data
?.
bu1EngName
||
''
this
.
bu1Id
=
data
?.
bu1Id
||
''
this
.
bu1Name
=
data
?.
bu1Name
||
''
this
.
bu2EngName
=
data
?.
bu2EngName
||
''
this
.
bu2Id
=
data
?.
bu2Id
||
''
this
.
bu2Name
=
data
?.
bu2Name
||
''
this
.
bu3EngName
=
data
?.
bu3EngName
||
''
this
.
bu3Id
=
data
?.
bu3Id
||
''
this
.
bu3Name
=
data
?.
bu3Name
||
''
this
.
bu4EngName
=
data
?.
bu4EngName
||
''
this
.
bu4Id
=
data
?.
bu4Id
||
''
this
.
bu4Name
=
data
?.
bu4Name
||
''
this
.
bu5EngName
=
data
?.
bu5EngName
||
''
this
.
bu5Id
=
data
?.
bu5Id
||
''
this
.
bu5Name
=
data
?.
bu5Name
||
''
this
.
bu6EngName
=
data
?.
bu6EngName
||
''
this
.
bu6Id
=
data
?.
bu6Id
||
''
this
.
bu6Name
=
data
?.
bu6Name
||
''
this
.
bu7EngName
=
data
?.
bu7EngName
||
''
this
.
bu7Id
=
data
?.
bu7Id
||
''
this
.
bu7Name
=
data
?.
bu7Name
||
''
this
.
companyCode
=
data
?.
companyCode
||
''
this
.
companyId
=
data
?.
companyId
||
''
this
.
companyName
=
data
?.
companyName
||
''
this
.
email
=
data
?.
email
||
''
this
.
empGroupEngName
=
data
?.
empGroupEngName
||
''
this
.
empGroupId
=
data
?.
empGroupId
||
''
this
.
empGroupName
=
data
?.
empGroupName
||
''
this
.
employeeId
=
data
?.
employeeId
||
''
this
.
empStatusEngName
=
data
?.
empStatusEngName
||
''
this
.
empStatusId
=
data
?.
empStatusId
||
''
this
.
empStatusName
=
data
?.
empStatusName
||
''
this
.
empTypeEngName
=
data
?.
empTypeEngName
||
''
this
.
empTypeId
=
data
?.
empTypeId
||
''
this
.
empTypeName
=
data
?.
empTypeName
||
''
this
.
firstEngName
=
data
?.
firstEngName
||
''
this
.
firstHireDate
=
data
?.
firstHireDate
||
''
this
.
firstname
=
data
?.
firstname
||
''
this
.
jobEngName
=
data
?.
jobEngName
||
''
this
.
jobId
=
data
?.
jobId
||
''
this
.
jobName
=
data
?.
jobName
||
''
this
.
lastEngName
=
data
?.
lastEngName
||
''
this
.
lastname
=
data
?.
lastname
||
''
this
.
marryEngName
=
data
?.
marryEngName
||
''
this
.
marryId
=
data
?.
marryId
||
''
this
.
marryName
=
data
?.
marryName
||
''
this
.
memberId
=
data
?.
memberId
||
''
this
.
mobile
=
data
?.
mobile
||
''
this
.
nationalityEngName
=
data
?.
nationalityEngName
||
''
this
.
nationalityId
=
data
?.
nationalityId
||
''
this
.
nationalityName
=
data
?.
nationalityName
||
''
this
.
picture
=
data
?.
picture
||
''
this
.
plEngName
=
data
?.
plEngName
||
''
this
.
plId
=
data
?.
plId
||
''
this
.
plName
=
data
?.
plName
||
''
this
.
positionEngName
=
data
?.
positionEngName
||
''
this
.
positionId
=
data
?.
positionId
||
''
this
.
positionName
=
data
?.
positionName
||
''
this
.
prefixEngName
=
data
?.
prefixEngName
||
''
this
.
prefixId
=
data
?.
prefixId
||
''
this
.
prefixName
=
data
?.
prefixName
||
''
this
.
sex
=
data
?.
sex
||
''
this
.
sexEngName
=
data
?.
sexEngName
||
''
this
.
sexName
=
data
?.
sexName
||
''
this
.
startDate
=
data
?.
startDate
||
''
this
.
workareaEngName
=
data
?.
workareaEngName
||
''
this
.
workareaId
=
data
?.
workareaId
||
''
this
.
workareaName
=
data
?.
workareaName
||
''
}
}
src/app/portal-manage/models/mylearn/myhrcompany.model.ts
View file @
559c22d0
...
...
@@ -55,30 +55,30 @@ export class MyHrcompanyModel extends BaseModel implements HrcompanyModel {
recommendType
:
number
;
constructor
(
data
?:
Partial
<
HrcompanyModel
>
,
translateService
?:
TranslateService
)
{
super
(
data
,
translateService
)
this
.
companyId
=
data
?.
companyId
!
this
.
companyCode
=
data
?.
companyCode
!
this
.
companyName
=
data
?.
companyName
!
this
.
companySource
=
data
?.
companySource
!
this
.
companyEmail
=
data
?.
companyEmail
!
this
.
branchId
=
data
?.
branchId
!
this
.
branchName
=
data
?.
branchName
!
this
.
pictureUrl
=
data
?.
pictureUrl
!
this
.
role
=
data
?.
role
!
this
.
database
=
data
?.
database
!
this
.
myhrCode
=
data
?.
myhrCode
!
this
.
myhrUrl
=
data
?.
myhrUrl
!
this
.
companyAddr
=
data
?.
companyAddr
!
this
.
companyTel
=
data
?.
companyTel
!
this
.
companyTax
=
data
?.
companyTax
!
this
.
prefix
=
data
?.
prefix
!
this
.
lastNumber
=
data
?.
lastNumber
!
this
.
number
=
data
?.
number
!
this
.
receiptSignature1
=
data
?.
receiptSignature1
!
this
.
receiptSignature2
=
data
?.
receiptSignature2
!
this
.
logo
=
data
?.
logo
!
this
.
displayType
=
data
?.
displayType
!
this
.
bestsellerType
=
data
?.
bestsellerType
!
this
.
recommendType
=
data
?.
recommendType
!
this
.
companyId
=
data
?.
companyId
||
''
this
.
companyCode
=
data
?.
companyCode
||
''
this
.
companyName
=
data
?.
companyName
||
''
this
.
companySource
=
data
?.
companySource
||
''
this
.
companyEmail
=
data
?.
companyEmail
||
''
this
.
branchId
=
data
?.
branchId
||
''
this
.
branchName
=
data
?.
branchName
||
''
this
.
pictureUrl
=
data
?.
pictureUrl
||
''
this
.
role
=
data
?.
role
||
''
this
.
database
=
data
?.
database
||
''
this
.
myhrCode
=
data
?.
myhrCode
||
''
this
.
myhrUrl
=
data
?.
myhrUrl
||
''
this
.
companyAddr
=
data
?.
companyAddr
||
''
this
.
companyTel
=
data
?.
companyTel
||
''
this
.
companyTax
=
data
?.
companyTax
||
''
this
.
prefix
=
data
?.
prefix
||
''
this
.
lastNumber
=
data
?.
lastNumber
||
''
this
.
number
=
data
?.
number
||
''
this
.
receiptSignature1
=
data
?.
receiptSignature1
||
''
this
.
receiptSignature2
=
data
?.
receiptSignature2
||
''
this
.
logo
=
data
?.
logo
||
''
this
.
displayType
=
data
?.
displayType
??
0
this
.
bestsellerType
=
data
?.
bestsellerType
??
0
this
.
recommendType
=
data
?.
recommendType
??
0
}
// getPictureURL(): string {
...
...
src/app/portal-manage/models/mylearn/zeeme-company.model.ts
0 → 100644
View file @
559c22d0
import
{
TranslateService
}
from
"@ngx-translate/core"
;
import
{
BaseModel
}
from
"../base.model"
;
import
{
environment
}
from
"../../../../environments/environment"
;
export
interface
ZeemeCompanyModel
{
companyName
:
string
companyType
:
string
website
:
string
metaData
:
string
companyStatus
:
string
suggestion
:
string
radiusStampAllow
:
string
latitude
:
string
longitude
:
string
pictureCompany
:
string
ownerId
:
string
ownerName
:
string
mainbranchId
:
string
mainbranchName
:
string
partitionId
:
string
companyId
:
string
companyCode
:
string
qrCode
:
string
locationList
:
{
latitude
:
string
longitude
:
string
name
:
string
expiredDate
:
string
}[]
}
export
class
MyZeemeCompanyModel
extends
BaseModel
implements
ZeemeCompanyModel
{
companyName
:
string
companyType
:
string
website
:
string
metaData
:
string
companyStatus
:
string
suggestion
:
string
radiusStampAllow
:
string
latitude
:
string
longitude
:
string
pictureCompany
:
string
ownerId
:
string
ownerName
:
string
mainbranchId
:
string
mainbranchName
:
string
partitionId
:
string
companyId
:
string
companyCode
:
string
qrCode
:
string
locationList
:
{
latitude
:
string
longitude
:
string
name
:
string
expiredDate
:
string
}[]
constructor
(
data
?:
Partial
<
ZeemeCompanyModel
>
,
translateService
?:
TranslateService
)
{
super
(
data
,
translateService
)
this
.
companyName
=
data
?.
companyName
||
''
this
.
companyType
=
data
?.
companyType
||
''
this
.
website
=
data
?.
website
||
''
this
.
metaData
=
data
?.
metaData
||
''
this
.
companyStatus
=
data
?.
companyStatus
||
''
this
.
suggestion
=
data
?.
suggestion
||
''
this
.
radiusStampAllow
=
data
?.
radiusStampAllow
||
''
this
.
latitude
=
data
?.
latitude
||
''
this
.
longitude
=
data
?.
longitude
||
''
this
.
pictureCompany
=
data
?.
pictureCompany
||
''
this
.
ownerId
=
data
?.
ownerId
||
''
this
.
ownerName
=
data
?.
ownerName
||
''
this
.
mainbranchId
=
data
?.
mainbranchId
||
''
this
.
mainbranchName
=
data
?.
mainbranchName
||
''
this
.
partitionId
=
data
?.
partitionId
||
''
this
.
companyId
=
data
?.
companyId
||
''
this
.
companyCode
=
data
?.
companyCode
||
''
this
.
qrCode
=
data
?.
qrCode
||
''
this
.
locationList
=
(
data
?.
locationList
||
[]).
map
(
e
=>
({
latitude
:
e
.
latitude
||
''
,
longitude
:
e
.
longitude
||
''
,
name
:
e
.
name
||
''
,
expiredDate
:
e
.
expiredDate
||
''
}))
}
}
src/app/portal-manage/mylearn/employee-manage/employee-manage.component.html
0 → 100644
View file @
559c22d0
<app-page-header
[
title
]="'จัดการพนักงาน'"
[
activeTitle
]="'ผู้ดูแลระบบ'"
[
title1
]="'จัดการพนักงาน'"
>
</app-page-header>
<div
class=
"grid grid-cols-12 gap-6"
>
<div
class=
"xl:col-span-12 col-span-12"
>
<div
class=
"box"
>
<div
class=
"box-header justify-between"
>
<div
class=
"box-title"
>
{{ 'All List' | translate}}
<span
class=
"badge bg-light text-default rounded-full ms-1 text-[0.75rem] align-middle"
>
{{hrCompanyListFilter().length}}
</span>
</div>
<div
class=
"flex flex-wrap gap-2"
>
<input
class=
"form-control form-control"
type=
"text"
placeholder=
"ค้นหาบริษัท"
[(
ngModel
)]='
search
'
>
</div>
</div>
<div
class=
"box-body"
>
<div
class=
"table-responsive"
>
<table
class=
"table whitespace-nowrap min-w-full ti-custom-table-hover"
>
<thead>
<tr
class=
"border-b border-defaultborder"
>
<th
scope=
"col"
class=
"text-start"
>
{{"Logo Company"|translate}}
</th>
<th
scope=
"col"
class=
"text-start"
>
{{"Company Code"|translate}}
</th>
<th
scope=
"col"
class=
"text-start"
>
{{"Company Name"|translate}}
</th>
<th
scope=
"col"
class=
"text-start"
>
{{"Agency" | translate}}
</th>
<th
scope=
"col"
class=
"text-start"
>
{{"Company Source" | translate}}
</th>
<th
scope=
"col"
class=
"text-start"
>
{{"Manage Data" | translate}}
</th>
</tr>
</thead>
<tbody>
@if (hrCompanyListFilter().length) {
@for (item of hrCompanyListFilter(); track item.companyId) {
<tr
class=
"border border-defaultborder dark:border-defaultborder/10 cursor-pointer"
>
<td>
<div
class=
"flex items-center"
>
<span
class=
"p-3 me-1"
style=
"width: 200px;"
>
@if(item.companySource=='MyLearn'){
<img
[
src
]="
item
.
logo
?
baseUrlMylearn
+'/
files
/
image
/'+
item
.
logo
:
'
assets
/
images
/
media
/
default-pic-gX
.
png
'
"
id=
"profile-img"
class=
"border-radius-1"
style=
"width: 100px; height: 100px; object-fit: cover;"
>
} @else if(item.companySource=='ZeeMe'){
<img
[
src
]="
item
.
pictureUrl
?
item
.
pictureUrl:
'
assets
/
images
/
media
/
default-pic-gX
.
png
'"
id=
"profile-img"
class=
"border-radius-1"
style=
"width: 100px; height: 100px; object-fit: cover;"
>
} @else{
<img
[
src
]="'
assets
/
images
/
media
/
default-pic-gX
.
png
'"
id=
"profile-img"
class=
"border-radius-1"
style=
"width: 100px; height: 100px; object-fit: cover;"
>
}
</span>
</div>
</td>
<td>
<div>
<span
class=
"block mb-1"
>
{{item.companyCode}}
</span>
</div>
</td>
<td>
<div>
<span
class=
"block mb-1"
>
{{item.companyName}}
</span>
</div>
</td>
<td>
<div>
<span
class=
"block mb-1"
>
{{item.branchName}}
</span>
</div>
</td>
<td>
<div>
<span
class=
"block mb-1"
>
{{item.companySource}}
</span>
</div>
</td>
<td>
<div
class=
"flex flex-row items-center !gap-2 "
>
<a
aria-label=
"anchor"
class=
"ti-btn ti-btn-wave !gap-0 !m-0 bg-info/10 text-info hover:bg-info hover:text-white hover:border-info"
(
click
)="
openEmployeeModal
(
item
)"
>
<i
class=
"ri-pencil-line"
></i>
</a>
</div>
</td>
</tr>
}
} @else {
<tr>
<td
[
attr
.
colspan
]="
5
"
class=
"text-center py-4"
>
@if(state.hrCompany.loading){
<p>
กำลังโหลดข้อมูล หรือไม่มีข้อมูลเลย...
</p>
} @else{
<p>
ไม่พบข้อมูลที่ค้นหา...
</p>
}
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
<div
class=
"box-footer"
>
<div
class=
"flex items-center flex-wrap overflow-auto"
*
ngIf=
"hrCompanyListFilter().length > 0"
>
<div
class=
"mb-2 sm:mb-0"
>
<div>
{{'Showing' | translate}} {{hrCompanyListFilter().length}} {{'entries'
| translate}}
<i
class=
"bi bi-arrow-right ms-2 font-semibold"
></i>
</div>
</div>
<div
class=
"ms-auto"
>
<nav
aria-label=
"Page navigation"
>
<ul
class=
"ti-pagination mb-0"
>
<li
*
ngIf=
"pageIndex>0"
class=
"page-item {{pageIndex==0 ? 'disabled' : ''}}"
><a
class=
"page-link px-3 py-[0.375rem] cursor-pointer"
(
click
)="
pageIndex =
pageIndex-1"
>
{{'Previous' |
translate}}
</a></li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"pageIndex-1>0"
(
click
)="
pageIndex =
pageIndex-2"
>
{{pageIndex-1}}
</a></li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"pageIndex>0 && ((pageIndex-1)*10 < (search == '' ? hrCompanyListFilter().length : hrCompanyListFilter().length))"
(
click
)="
pageIndex =
pageIndex-1"
>
{{pageIndex}}
</a></li>
<li
class=
"page-item"
><a
class=
"page-link active px-3 py-[0.375rem]"
href=
"javascript:void(0);"
>
{{pageIndex +1}}
</a>
</li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"(pageIndex+1)*10 < (search == '' ? hrCompanyListFilter().length : hrCompanyListFilter().length)"
(
click
)="
pageIndex =
pageIndex+1"
>
{{pageIndex +2}}
</a></li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"(pageIndex+2)*10 < (search == '' ? hrCompanyListFilter().length : hrCompanyListFilter().length)"
(
click
)="
pageIndex =
pageIndex+2"
>
{{pageIndex +3}}
</a></li>
<li
*
ngIf=
"(pageIndex+1)*10 < (search == '' ? hrCompanyListFilter().length : hrCompanyListFilter().length)"
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem] cursor-pointer"
(
click
)="
pageIndex =
pageIndex+1"
>
{{'Next' |
translate}}
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
</div>
</div>
<ng-template
#
employeeModal
let-dialogRef
>
<div
class=
"grid grid-cols-12 gap-6"
>
<div
class=
"xl:col-span-12 col-span-12"
>
<div
class=
"box-header justify-between"
>
<div
class=
"box-title"
>
รายการพนักงาน
</div>
<button
type=
"button"
class=
"hs-dropdown-toggle !text-[1rem] !font-semibold !text-defaulttextcolor"
(
click
)="
employeeModalRef
?.
close
()"
>
<span
class=
"sr-only"
>
{{'Close' | translate}}
</span>
<i
class=
"ri-close-line"
></i>
</button>
</div>
<div
class=
"box-body"
style=
"padding: 20px;"
>
<div
class=
"box"
>
<div
class=
"box-header justify-between"
>
<div
class=
"box-title"
>
{{ 'All List' | translate}}
<span
class=
"badge bg-light text-default rounded-full ms-1 text-[0.75rem] align-middle"
>
{{employeeSyncFilter().length}}
</span>
</div>
<div
class=
"flex flex-wrap gap-2"
>
<div>
<input
class=
"form-control form-control"
type=
"text"
placeholder=
"ค้นหาพนักงาน"
[(
ngModel
)]='
searchModal
'
(
ngModelChange
)="
pageModal=
0"
>
</div>
</div>
</div>
<div
class=
"table-responsive"
>
<table
class=
"table whitespace-nowrap min-w-full ti-custom-table-hover"
>
<thead>
<tr
class=
"border-b border-defaultborder"
>
<th
scope=
"col"
class=
"!text-start"
>
<input
class=
"cursor-pointer form-check-input check-all"
type=
"checkbox"
[
checked
]="
state
.
employeeSync
.
selectedIds
.
length =
==
state
.
employeeSync
.
list
.
length
&&
state
.
employeeSync
.
list
.
length
>
0"
(change)="toggleSelectAll('employeeSync', 'employeeId', $event)">
</th>
<th
class=
"text-center"
scope=
"col"
>
รหัสพนักงาน
</th>
<th
class=
"text-center"
scope=
"col"
>
ชื่อพนักงาน
</th>
<th
class=
"text-center"
scope=
"col"
>
ชื่อบริษัท
</th>
<th
class=
"text-center"
scope=
"col"
>
สาขา
</th>
</tr>
</thead>
<tbody
id=
"tableBody"
>
@if(!state.employeeSync.loading
&&
employeeSyncFilter().length){
@for (items of employeeSyncFilter() | slice: pageModal * pageSizeModal : (pageModal + 1) *
pageSizeModal;
track $index) {
<tr
class=
"border border-defaultborder dark:border-defaultborder/10 cursor-pointer"
(
click
)="
toggleSelect
('
employeeSync
',
'
employeeId
',
items
,
$
event
)"
>
<td
class=
"font-16 font-medium"
>
<input
class=
"cursor-pointer form-check-input check-all"
type=
"checkbox"
[
checked
]="
state
.
employeeSync
.
selectedIds
.
includes
(
items
.
employeeId
)"
>
</td>
<td
class=
"font-16 font-medium"
>
{{items.employeeId}}
</td>
<td
class=
"font-16 font-medium"
>
{{items.firstname}} {{items.lastname}}
</td>
<td
class=
"font-16 font-medium"
>
{{items.companyName}}
</td>
<td
class=
"font-16 font-medium"
>
{{items.branchName}}
</td>
</tr>
}
} @else {
<tr>
<td
[
attr
.
colspan
]="
5
"
class=
"text-center py-4"
>
@if(state.employeeSync.loading){
<p>
กำลังโหลดข้อมูล หรือไม่มีข้อมูลเลย...
</p>
} @else{
<p>
ไม่พบข้อมูลที่ค้นหา...
</p>
}
</td>
</tr>
}
</tbody>
</table>
</div>
<div
class=
"flex items-center flex-wrap overflow-auto"
*
ngIf=
"employeeSyncFilter().length > 0"
>
<div
class=
"d-flex justify-content-end p-2"
>
<select
class=
"custom-select m-r-5 border-color-gray-full-focus"
style=
"width: auto"
[(
ngModel
)]="
pageSizeModal
"
(
ngModelChange
)="
pageModal=
0"
>
<option
*
ngFor=
"let item of [10,50,100]"
[
ngValue
]="
item
"
>
{{"รายการต่อหน้า"}}: {{item}}
</option>
</select>
</div>
<div
class=
"mb-2 sm:mb-0"
>
<div>
{{'Showing' | translate}} {{employeeSyncFilter().length}} {{'entries'
| translate}}
<i
class=
"bi bi-arrow-right ms-2 font-semibold"
></i>
</div>
</div>
<div
class=
"ms-auto"
>
<nav
aria-label=
"Page navigation"
>
<ul
class=
"ti-pagination mb-0"
>
<li
*
ngIf=
"pageModal > 0"
class=
"page-item {{pageModal==0 ? 'disabled' : ''}}"
><a
class=
"page-link px-3 py-[0.375rem] cursor-pointer"
(
click
)="
pageModal =
pageModal
-
1
;
"
>
{{'Previous' | translate}}
</a>
</li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"pageModal > 0"
(
click
)="
pageModal =
pageModal
-
1
;
"
>
{{pageModal}}
</a>
</li>
<li
class=
"page-item"
><a
class=
"page-link active px-3 py-[0.375rem]"
href=
"javascript:void(0);"
>
{{pageModal
+ 1}}
</a>
</li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"(pageModal + 1) * pageSizeModal < employeeSyncFilter().length"
(
click
)="
pageModal =
pageModal
+
1
;
"
>
{{pageModal + 2}}
</a></li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"(pageModal + 2) * pageSizeModal < employeeSyncFilter().length"
(
click
)="
pageModal =
pageModal
+
2
;
"
>
{{pageModal + 3}}
</a></li>
<li
*
ngIf=
"(pageModal + 1) * pageSizeModal < employeeSyncFilter().length"
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem] cursor-pointer"
(
click
)="
pageModal =
pageModal
+
1
;
"
>
{{'Next'| translate}}
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div
class=
"box-footer"
style=
"display: flex;justify-content: end;"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-btn-light align-middle"
(
click
)="
employeeModalRef
?.
close
()"
>
{{'Cancel' | translate}}
</button>
<button
type=
"button"
class=
"ti-btn bg-primary text-white !font-medium"
[
class
.
ti-btn-disabled
]="!
state
.
employeeSync
.
selectedIds
.
length
"
[
disabled
]="!
state
.
employeeSync
.
selectedIds
.
length
"
(
click
)="
syncProfile
()"
>
{{'ซิงค์พนักงาน' | translate}}
</button>
</div>
</div>
</div>
</ng-template>
\ No newline at end of file
src/app/portal-manage/mylearn/employee-manage/employee-manage.component.scss
0 → 100644
View file @
559c22d0
.bg-input-readonly
{
background-color
:
#e5e7eb
;
cursor
:
not
-
allowed
;
}
.
\
!
bg-input-readonly
{
background-color
:
#e5e7eb
!
important
;
cursor
:
not
-
allowed
!
important
;
}
\ No newline at end of file
src/app/portal-manage/mylearn/employee-manage/employee-manage.component.ts
0 → 100644
View file @
559c22d0
import
{
ChangeDetectorRef
,
Component
,
ElementRef
,
OnInit
,
TemplateRef
,
ViewChild
}
from
'@angular/core'
;
import
{
SharedModule
}
from
'../../../shared/shared.module'
;
import
{
CommonModule
}
from
'@angular/common'
;
import
{
TranslateModule
,
TranslateService
}
from
'@ngx-translate/core'
;
import
{
UserService
}
from
'../../services/mylearn/user.service'
;
import
{
HrcompanyModel
,
MyHrcompanyModel
,
}
from
'../../models/mylearn/myhrcompany.model'
;
import
{
MyhrcompanyService
}
from
'../../services/mylearn/myhrcompany.service'
;
import
swal
from
'sweetalert'
;
import
{
FormsModule
}
from
'@angular/forms'
;
import
{
Router
}
from
'@angular/router'
;
import
{
ResponseModel
}
from
'../../models/response.model.'
;
import
{
MyZeemeCompanyModel
,
ZeemeCompanyModel
}
from
'../../models/mylearn/zeeme-company.model'
;
import
{
MatDialog
,
MatDialogRef
}
from
'@angular/material/dialog'
;
import
{
FileItem
,
FileUploader
,
FileUploadModule
,
ParsedResponseHeaders
}
from
'ng2-file-upload'
;
import
{
environment
}
from
'../../../../environments/environment'
;
import
{
TokenService
}
from
'../../../shared/services/token.service'
;
import
{
forkJoin
}
from
'rxjs'
;
import
{
EmployeeSyncModel
,
MyEmployeeSyncModel
}
from
'../../models/mylearn/employee-sync.model'
;
@
Component
({
selector
:
'app-employee-manage'
,
templateUrl
:
'./employee-manage.component.html'
,
styleUrls
:
[
'./employee-manage.component.scss'
],
standalone
:
true
,
imports
:
[
CommonModule
,
SharedModule
,
TranslateModule
,
FormsModule
,
FileUploadModule
],
})
export
class
EmployeeManageComponent
implements
OnInit
{
baseUrlMylearn
=
environment
.
baseUrlMylearn
search
=
''
page
=
0
pageIndex
=
10
state
=
{
hrCompany
:
{
loading
:
false
,
list
:
[]
as
HrcompanyModel
[],
selectedIds
:
[]
as
string
[]
},
employeeSync
:
{
loading
:
false
,
list
:
[]
as
EmployeeSyncModel
[],
selectedIds
:
[]
as
string
[]
},
};
@
ViewChild
(
'employeeModal'
)
employeeModal
?:
TemplateRef
<
any
>
;
employeeModalRef
?:
MatDialogRef
<
any
>
;
searchModal
=
''
pageModal
=
0
pageSizeModal
=
10
constructor
(
private
myhrcompanyservice
:
MyhrcompanyService
,
private
userService
:
UserService
,
public
translate
:
TranslateService
,
private
router
:
Router
,
private
modal
:
MatDialog
,
private
tokenService
:
TokenService
,
private
cdr
:
ChangeDetectorRef
)
{
}
ngOnInit
():
void
{
this
.
getHrCompanyList
()
}
getHrCompanyList
()
{
this
.
state
.
hrCompany
.
loading
=
true
this
.
myhrcompanyservice
.
getList
().
subscribe
({
next
:
(
result
)
=>
{
this
.
state
.
hrCompany
.
list
=
result
.
map
(
e
=>
new
MyHrcompanyModel
(
e
)).
filter
(
e
=>
e
.
companySource
==
'ZeeMe'
)
this
.
state
.
hrCompany
.
loading
=
false
this
.
cdr
.
markForCheck
()
},
error
:
(
err
)
=>
{
this
.
state
.
hrCompany
.
loading
=
false
swal
(
'ข้อผิดพลาด'
,
'ไม่สามารถดึงข้อมูลบริษัทได้'
,
'error'
);
this
.
cdr
.
markForCheck
()
}
});
}
hrCompanyListFilter
()
{
return
this
.
state
.
hrCompany
.
list
.
filter
(
e
=>
e
.
companyCode
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
e
.
companyName
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
e
.
branchName
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
())
||
e
.
companySource
.
toLowerCase
().
includes
(
this
.
search
.
toLowerCase
()))
}
getZeemeEmployeeProfileSyncList
(
companyId
:
string
)
{
this
.
state
.
employeeSync
.
loading
=
true
this
.
myhrcompanyservice
.
getZeemeEmployeeProfileSyncList
(
companyId
).
subscribe
({
next
:
(
result
)
=>
{
this
.
state
.
employeeSync
.
list
=
result
.
map
(
e
=>
new
MyEmployeeSyncModel
(
e
))
this
.
state
.
employeeSync
.
loading
=
false
this
.
cdr
.
markForCheck
()
},
error
:
(
err
)
=>
{
this
.
state
.
employeeSync
.
loading
=
false
this
.
cdr
.
markForCheck
()
}
})
}
employeeSyncFilter
()
{
return
this
.
state
.
employeeSync
.
list
.
filter
(
e
=>
e
.
employeeId
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
())
||
e
.
companyName
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
())
||
e
.
branchName
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
())
||
e
.
firstname
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
())
||
e
.
lastname
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
())
||
e
.
firstEngName
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
())
||
e
.
lastEngName
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
()))
}
toggleSelect
(
key
:
keyof
typeof
this
.
state
,
idField
:
string
,
item
:
any
,
event
:
Event
)
{
const
checked
=
(
event
.
target
as
HTMLInputElement
).
checked
;
const
target
=
this
.
state
[
key
];
const
id
=
item
[
idField
];
const
input
=
event
.
target
as
HTMLInputElement
;
if
(
input
&&
'checked'
in
input
)
{
const
checked
=
input
.
checked
;
if
(
checked
)
{
if
(
!
target
.
selectedIds
.
includes
(
id
))
target
.
selectedIds
.
push
(
id
);
}
else
{
target
.
selectedIds
=
target
.
selectedIds
.
filter
(
x
=>
x
!==
id
);
}
}
else
{
if
(
target
.
selectedIds
.
includes
(
id
))
{
target
.
selectedIds
=
target
.
selectedIds
.
filter
(
x
=>
x
!==
id
);
}
else
{
target
.
selectedIds
.
push
(
id
);
}
}
}
toggleSelectAll
(
key
:
keyof
typeof
this
.
state
,
idField
:
string
,
event
:
Event
)
{
const
checked
=
(
event
.
target
as
HTMLInputElement
).
checked
;
const
target
=
this
.
state
[
key
];
if
(
checked
)
{
target
.
selectedIds
=
target
.
list
.
map
(
item
=>
item
[
idField
as
keyof
typeof
item
]);
}
else
{
target
.
selectedIds
=
[];
}
}
openEmployeeModal
(
item
:
HrcompanyModel
)
{
this
.
getZeemeEmployeeProfileSyncList
(
item
.
companyId
)
this
.
pageModal
=
0
;
this
.
pageSizeModal
=
10
;
if
(
this
.
employeeModal
)
{
this
.
employeeModalRef
=
this
.
modal
.
open
(
this
.
employeeModal
,
{
width
:
'1500px'
,
height
:
'700px'
,
maxWidth
:
'none'
,
disableClose
:
true
,
data
:
{}
});
this
.
employeeModalRef
.
afterClosed
().
subscribe
(
result
=>
{
});
}
}
syncProfile
()
{
const
selectedItems
=
this
.
state
.
employeeSync
.
list
.
filter
(
item
=>
this
.
state
.
employeeSync
.
selectedIds
.
includes
(
item
.
employeeId
)
).
map
(
e
=>
new
MyEmployeeSyncModel
(
e
))
swal
({
title
:
'คุณแน่ใจหรือไม่?'
,
text
:
'คุณต้องการบันทึกหรือไม่'
,
icon
:
'warning'
,
dangerMode
:
false
,
buttons
:
[
'ยกเลิก'
,
'ยืนยัน'
],
}).
then
((
willSave
:
any
)
=>
{
if
(
willSave
)
{
this
.
myhrcompanyservice
.
syncProfile
(
selectedItems
).
subscribe
({
next
:
(
result
)
=>
{
this
.
employeeModalRef
?.
close
()
swal
(
'บันทึกสำเร็จ!!'
,
'บันทึกข้อมูลสมาชิก'
,
'success'
);
this
.
state
.
employeeSync
.
selectedIds
=
[]
this
.
ngOnInit
();
},
error
:
(
err
)
=>
{
swal
(
'ข้อผิดพลาด!!'
,
'ไม่สามารถบันทึก/อัปเดตข้อมูลได้'
,
'error'
);
}
})
}
});
}
}
src/app/portal-manage/mylearn/myhrcompany/myhrcompany.component.html
View file @
559c22d0
...
...
@@ -30,12 +30,11 @@
(click)="deleteSelect()"><i class="ri-delete-bin-line font-semibold align-middle"></i>{{ 'Delete' |
translate}}
</a> -->
<div>
<a
href=
"javascript:void(0);"
class=
"hs-dropdown-toggle ti-btn ti-btn-primary-full me-2"
(
click
)="
newHrcompanyModel
()"
data-hs-overlay=
"#modal-detail"
>
<i
class=
"ri-add-line font-semibold align-middle
"
>
</i>
{{ "Create Company" | translate}}
<a
href=
"javascript:void(0);"
class=
"hs-dropdown-toggle ti-btn ti-btn-primary-full me-2"
(
click
)="
newHrcompanyModel
()"
data-hs-overlay=
"#modal-detail
"
>
<i
class=
"ri-add-line font-semibold align-middle"
>
</i>
{{ "Create Company" | translate}}
</a>
</div>
<div>
...
...
@@ -64,7 +63,8 @@
<tbody>
@if (filterList.length > 0) {
@for (item of filterList; track item.companyId) {
<tr
class=
"border border-defaultborder dark:border-defaultborder/10 cursor-pointer"
>
<!-- (click)="goToDetail(item.companyId)" -->
<tr
class=
"border border-defaultborder dark:border-defaultborder/10 cursor-pointer"
>
<!-- (click)="goToDetail(item.companyId)" -->
<td
class=
"product-checkbox"
>
<input
class=
"form-check-input"
type=
"checkbox"
[
checked
]="
selectedItems
.
get
(
item
.
companyId
)
||
false
"
(
change
)="
onCheckboxChange
(
item
.
companyId
)"
aria-label=
"..."
>
...
...
@@ -72,10 +72,19 @@
<td>
<div
class=
"flex items-center"
>
<span
class=
"p-3 me-1"
style=
"width: 200px;"
>
@if(item.companySource=='MyLearn'){
<img
[
src
]="
item
.
pictureUrl =
==
''
?
'
assets
/
images
/
media
/
default-pic-gX
.
png
'
:
item
.
pictureUrl
"
[
src
]="
item
.
logo
?
baseUrlMylearn
+'/
files
/
image
/'+
item
.
logo
:
'
assets
/
images
/
media
/
default-pic-gX
.
png
'
"
id=
"profile-img"
class=
"border-radius-1"
style=
"width: 100px; height: 100px; object-fit: cover;"
>
} @else if(item.companySource=='ZeeMe'){
<img
[
src
]="
item
.
pictureUrl
?
item
.
pictureUrl:
'
assets
/
images
/
media
/
default-pic-gX
.
png
'"
id=
"profile-img"
class=
"border-radius-1"
style=
"width: 100px; height: 100px; object-fit: cover;"
>
} @else{
<img
[
src
]="'
assets
/
images
/
media
/
default-pic-gX
.
png
'"
id=
"profile-img"
class=
"border-radius-1"
style=
"width: 100px; height: 100px; object-fit: cover;"
>
}
</span>
</div>
</td>
...
...
@@ -194,10 +203,11 @@
<div
class=
"ti-modal-header"
>
<h6
class=
"modal-title text-[1rem] font-semibold text-defaulttextcolor"
id=
"mail-ComposeLabel"
>
{{('Form Create Company' | translate)}}
{{('Form Create Company' | translate)}}
</h6>
<button
type=
"button"
class=
"hs-dropdown-toggle !text-[1rem] !font-semibold !text-defaulttextcolor"
data-hs-overlay=
"#modal-detail"
#
closeModal
>
<button
type=
"button"
class=
"hs-dropdown-toggle !text-[1rem] !font-semibold !text-defaulttextcolor"
data-hs-overlay=
"#modal-detail"
#
closeModal
>
<span
class=
"sr-only"
>
{{'Close' | translate}}
</span>
<i
class=
"ri-close-line"
></i>
</button>
...
...
@@ -205,55 +215,80 @@
<div
class=
"ti-modal-body px-4"
>
<div
class=
"grid grid-cols-12 gap-4"
>
<div
class=
"xl:col-span-12 col-span-12 my-2"
>
<div
class=
"xl:col-span-12 col-span-12 my-2"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{ 'Company Source' | translate}}
</label>
@if(action=='add'||(selectHrcompanyModel.companySource=='MyLearn'
&&
action=='edit')){
<div
class=
"flex items-center gap-2 mb-2"
>
<input
type=
"radio"
class=
"custom-control-input cursor-pointer"
name=
"myLearn"
id=
"myLearnCompany"
[
checked
]="
selectHrcompanyModel
.
companySource=
='MyLearn'"
(
click
)="
newHrcompanyModel
();
companySourceChange
('
MyLearn
')"
>
<label
class=
"custom-control-label cursor-pointer font-bold"
for=
"myLearnCompany"
>
MyLearn
</label>
</div>
}
@if(action=='add'||(selectHrcompanyModel.companySource=='ZeeMe'
&&
action=='edit')){
<div
class=
"flex items-center gap-2 mb-2"
>
<input
type=
"radio"
class=
"custom-control-input cursor-pointer"
name=
"zeeme"
id=
"zeemeCompany"
[
checked
]="
selectHrcompanyModel
.
companySource=
='ZeeMe'"
(
click
)="
(
selectHrcompanyModel
.
companySource
!='
ZeeMe
'
?
openCompanyModal
()
:
null
);
companySourceChange
('
ZeeMe
')"
>
<label
class=
"custom-control-label cursor-pointer font-bold"
for=
"zeemeCompany"
style=
"align-items: center;"
>
ZeeMe
</label>
@if(selectHrcompanyModel.companySource=='ZeeMe'
&&
action=='add'){
<label
class=
"custom-control-label cursor-pointer text-info"
style=
"align-items: center;text-decoration: underline"
(
click
)="
openCompanyModal
()"
>
{{ 'เปลี่ยนบริษัท' | translate}}
</label>
}
</div>
}
</div>
@if(selectHrcompanyModel.companySource=='MyLearn'){
<div
class=
"xl:col-span-12 col-span-12 my-2"
>
<span
style=
"display: flex; justify-content: center;"
>
<div
class=
"relative"
>
<label
class=
"form-label !m-0"
style=
"justify-content:center;width: 100%;"
>
{{ 'Logo Company' | translate}}
</label>
<img
[
src
]="
selectHrcompanyModel
.
logo
?
baseUrlMylearn
+'/
files
/
image
/'+
selectHrcompanyModel
.
logo
:
'
assets
/
images
/
media
/
default-pic-gX
.
png
'"
id=
"profile-img"
class=
"border-radius-1"
style=
"max-width:200px;max-height:200px;object-fit: cover;"
[
ngStyle
]="{'
width
'
:
(
selectHrcompanyModel
.
logo
?
'
auto
'
:
'
100px
'),'
height
'
:
(
selectHrcompanyModel
.
logo
?
'
auto
'
:
'
100px
')}"
>
<input
#
logoInputRef
ng2FileSelect
[
uploader
]="
uploaderLogo
"
type=
"file"
name=
"logo"
id=
"logo"
class=
"hidden"
/>
<i
class=
"ri-pencil-line cursor-pointer absolute"
style=
"right: -20px;bottom: -5px;font-size: 15px;"
(
click
)="
logoInputRef
.
click
()"
></i>
@if(selectHrcompanyModel.logo){
<i
class=
"ri-delete-bin-6-line cursor-pointer absolute"
style=
"right: -35px;bottom: -5px;font-size: 15px;"
(
click
)="
clearLogo
(
logoInputRef
)"
></i>
}
</div>
</span>
</div>
<div
class=
"xl:col-span-12 col-span-12 my-2"
>
<label
for=
"companyCode"
class=
"form-label"
>
{{'Company Code' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"companyCode"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyCode
"
[
disabled
]="
action =
==
'
edit
'"
[
ngClass
]="{'!
bg-input-readonly
'
:action =
==
'
edit
'}"
>
<input
type=
"text"
class=
"form-control"
id=
"companyCode"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyCode
"
[
disabled
]="
action =
==
'
edit
'"
[
ngClass
]="{'!
bg-input-readonly
'
:action =
==
'
edit
'}"
>
<div
class=
"text-danger"
*
ngIf=
"!selectHrcompanyModel.companyCode"
>
{{'Please fill in information' | translate}}
</div>
</div>
<div
class=
"xl:col-span-12 col-span-12 my-2"
*
ngIf=
"statusHrcompanyModel=='add'"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{ 'Company Name' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyName
"
>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyName
"
>
<div
class=
"text-danger"
*
ngIf=
"!selectHrcompanyModel.companyName"
>
{{'Please fill in information' | translate}}
</div>
</div>
<!-- <div class="xl:col-span-12 col-span-12 my-2" *ngIf="statusHrcompanyModel=='add'">
<label for="deal-title" class="form-label">{{ 'อีเมลบริษัท' | translate}}</label>
<input type="text"
class="form-control"
id="deal-title"
name="companyEmail"
placeholder=""
required
pattern="^[^\s@]+@[^\s@]+\.[^\s@]+$"
[(ngModel)]="selectHrcompanyModel.companyEmail"
[ngModelOptions]="{ updateOn: 'change' }"
#companyEmailCtrl="ngModel">
<div class="text-danger" *ngIf="companyEmailCtrl.errors?.['required']">
{{ 'Please fill in information' | translate }}
</div>
<div class="text-danger" *ngIf="companyEmailCtrl.errors?.['pattern']">
{{ 'รูปแบบอีเมลไม่ถูกต้อง' | translate }}
</div>
</div> -->
<div
class=
"xl:col-span-12 col-span-12 my-2"
*
ngIf=
"statusHrcompanyModel=='add'"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{ 'Company Email' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
name=
"companyEmail"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyEmail
"
(
blur
)="
onCheckCompanyEmail
()"
>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
name=
"companyEmail"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyEmail
"
(
blur
)="
onCheckCompanyEmail
()"
>
<div
class=
"text-danger"
*
ngIf=
"validateEmail === 'required'"
>
{{ 'Please fill in information' | translate }}
...
...
@@ -265,44 +300,199 @@
{{ 'Unable To Use Email' | translate }}
</div>
</div>
<div
class=
"xl:col-span-12 col-span-12 my-2"
*
ngIf=
"statusHrcompanyModel=='add'"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{ 'Logo Company' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
logo
"
>
</div>
<div
class=
"xl:col-span-12 col-span-12 my-2"
*
ngIf=
"statusHrcompanyModel=='add'"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{ 'Company Address' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyAddr
"
>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyAddr
"
>
</div>
<div
class=
"xl:col-span-12 col-span-12 my-2"
*
ngIf=
"statusHrcompanyModel=='add'"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{ 'Company Tel' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyTel
"
>
<input
type=
"text"
class=
"form-control"
id=
"deal-title"
placeholder=
""
[(
ngModel
)]="
selectHrcompanyModel
.
companyTel
"
>
</div>
}
@if(selectHrcompanyModel.companySource=='ZeeMe'){
<div
class=
"xl:col-span-12 col-span-12 my-2"
>
<span
style=
"display: flex; justify-content: center;"
>
<div
class=
"relative"
>
<label
class=
"form-label !m-0"
style=
"justify-content:center;width: 100%;"
>
{{ 'Logo Company' | translate}}
</label>
<img
[
src
]="
selectHrcompanyModel
.
pictureUrl
?
selectHrcompanyModel
.
pictureUrl:
'
assets
/
images
/
media
/
default-pic-gX
.
png
'"
id=
"pictureUrl"
class=
"border-radius-1"
style=
"max-width:200px;max-height:200px;object-fit: cover;"
[
ngStyle
]="{'
width
'
:
(
selectHrcompanyModel
.
pictureUrl
?
'
auto
'
:
'
100px
'),'
height
'
:
(
selectHrcompanyModel
.
pictureUrl
?
'
auto
'
:
'
100px
')}"
>
</div>
</span>
</div>
<div
class=
"xl:col-span-12 col-span-12 my-2"
>
<label
for=
"companyCode"
class=
"form-label"
>
{{'Company Code' | translate}}
</label>
<input
type=
"text"
class=
"form-control !bg-input-readonly"
disabled
id=
"companyCode"
[(
ngModel
)]="
selectHrcompanyModel
.
companyCode
"
>
</div>
<div
class=
"xl:col-span-12 col-span-12 my-2"
*
ngIf=
"statusHrcompanyModel=='add'"
>
<label
for=
"deal-title"
class=
"form-label"
>
{{ 'Company Source' | translate}}
</label>
<select
class=
"form-control"
[(
ngModel
)]="
selectHrcompanyModel
.
companySource
"
id=
"companySource"
disabled
>
<option
value=
"ZeeMe"
>
ZeeMe
</option>
<option
value=
"MyLearn"
>
MyLearn
</option>
</select>
<div
class=
"text-danger"
*
ngIf=
"!selectHrcompanyModel.companySource"
>
{{'Please fill in information' | translate}}
<label
for=
"name"
class=
"form-label"
>
{{ 'Company Name' | translate}}
</label>
<input
type=
"text"
class=
"form-control !bg-input-readonly"
disabled
id=
"name"
[(
ngModel
)]="
selectHrcompanyModel
.
companyName
"
>
</div>
<div
class=
"xl:col-span-12 col-span-12 my-2"
*
ngIf=
"statusHrcompanyModel=='add'"
>
<label
for=
"email"
class=
"form-label"
>
{{ 'Company Email' | translate}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"email"
name=
"companyEmail"
[(
ngModel
)]="
selectHrcompanyModel
.
companyEmail
"
(
ngModelChange
)="
onCheckCompanyEmail
()"
>
<div
class=
"text-danger"
*
ngIf=
"validateEmail === 'required'"
>
{{ 'Please fill in information' | translate }}
</div>
<div
class=
"text-danger"
*
ngIf=
"validateEmail === 'pattern'"
>
{{ 'Invalid Email Format' | translate }}
</div>
<div
class=
"text-danger"
*
ngIf=
"validateEmail === 'un-usable'"
>
{{ 'Unable To Use Email' | translate }}
</div>
</div>
}
</div>
<div
class=
"ti-modal-footer"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-btn-light align-middle"
data-hs-overlay=
"#modal-detail"
>
{{'Cancel' | translate}}
</button>
<button
type=
"button"
(
click
)="
saveHrcompanyModel
()"
class=
"ti-btn bg-primary text-white !font-medium"
<button
type=
"button"
(
click
)="
saveHrcompanyModel
()"
class=
"ti-btn bg-primary text-white !font-medium"
[
class
.
ti-btn-disabled
]="!
selectHrcompanyModel
.
companyCode
||
!
selectHrcompanyModel
.
companyName
||
!
selectHrcompanyModel
.
companyEmail
||
(
validateEmail
!==
'
usable
')"
[
disabled
]="!
selectHrcompanyModel
.
companyCode
||
!
selectHrcompanyModel
.
companyName
||
!
selectHrcompanyModel
.
companyEmail
||
(
validateEmail
!==
'
usable
')"
>
{{'Save Data Company' | translate}}
</button>
<button
type=
"button"
(
click
)="
generateUsersAdmin
(
selectHrcompanyModel
.
companyId
)"
class=
"ti-btn bg-primary text-white !font-medium"
<button
type=
"button"
(
click
)="
generateUsersAdmin
(
selectHrcompanyModel
.
companyId
)"
class=
"ti-btn bg-primary text-white !font-medium"
[
class
.
ti-btn-disabled
]="!
selectHrcompanyModel
.
companyCode
||
!
selectHrcompanyModel
.
companyName
||
!
selectHrcompanyModel
.
companyEmail
||
(
validateEmail
!==
'
usable
')
||
!
isEnabledBtnAdmin
"
[
disabled
]="!
selectHrcompanyModel
.
companyCode
||
!
selectHrcompanyModel
.
companyName
||
!
selectHrcompanyModel
.
companyEmail
||
(
validateEmail
!==
'
usable
')
||
!
isEnabledBtnAdmin
"
>
{{'Create Data AdminCompany' | translate}}
</button>
</div>
</div>
</div>
</div>
</div>
<ng-template
#
companyModal
let-dialogRef
>
<div
class=
"grid grid-cols-12 gap-6"
>
<div
class=
"xl:col-span-12 col-span-12"
>
<div
class=
"box-header justify-between"
>
<div
class=
"box-title"
>
รายการบริษัท
</div>
<button
type=
"button"
class=
"hs-dropdown-toggle !text-[1rem] !font-semibold !text-defaulttextcolor"
(
click
)="
companyModalRef
?.
close
()"
>
<span
class=
"sr-only"
>
{{'Close' | translate}}
</span>
<i
class=
"ri-close-line"
></i>
</button>
</div>
<div
class=
"box-body"
style=
"padding: 20px;"
>
<div
class=
"box"
>
<div
class=
"box-header justify-between"
>
<div
class=
"box-title"
>
{{ 'All List' | translate}}
<span
class=
"badge bg-light text-default rounded-full ms-1 text-[0.75rem] align-middle"
>
{{companyFilter().length}}
</span>
</div>
<div
class=
"flex flex-wrap gap-2"
>
<div>
<input
class=
"form-control form-control"
type=
"text"
placeholder=
"ค้นหาบริษัท"
[(
ngModel
)]='
searchModal
'
(
ngModelChange
)="
pageModal=
0"
>
</div>
</div>
</div>
<div
class=
"table-responsive"
>
<table
class=
"table whitespace-nowrap min-w-full ti-custom-table-hover"
>
<thead>
<tr
class=
"border-b border-defaultborder"
>
<th
class=
"text-center"
scope=
"col"
>
รหัสบริษัท
</th>
<th
class=
"text-center"
scope=
"col"
>
ชื่อบริษัท
</th>
<th
class=
"text-center"
scope=
"col"
>
สถานะ
</th>
</tr>
</thead>
<tbody
id=
"tableBody"
>
@if(!company.loading
&&
companyFilter().length){
@for (items of companyFilter() | slice: pageModal * pageSizeModal : (pageModal + 1) * pageSizeModal;
track $index) {
<tr
(
click
)="
selectCompany
(
items
);
companyModalRef
?.
close
()"
class=
"border border-defaultborder dark:border-defaultborder/10 cursor-pointer"
>
<td
class=
"font-16 font-medium"
>
{{items.companyCode}}
</td>
<td
class=
"font-16 font-medium"
>
{{items.companyName}}
</td>
<td
class=
"font-16 font-medium"
>
{{items.companyStatus}}
</td>
</tr>
}
} @else {
<tr>
<td
[
attr
.
colspan
]="
3
"
class=
"text-center py-4"
>
@if(company.loading){
<p>
กำลังโหลดข้อมูล หรือไม่มีข้อมูลเลย...
</p>
} @else{
<p>
ไม่พบข้อมูลที่ค้นหา...
</p>
}
</td>
</tr>
}
</tbody>
</table>
</div>
<div
class=
"flex items-center flex-wrap overflow-auto"
*
ngIf=
"companyFilter().length > 0"
>
<div
class=
"d-flex justify-content-end p-2"
>
<select
class=
"custom-select m-r-5 border-color-gray-full-focus"
style=
"width: auto"
[(
ngModel
)]="
pageSizeModal
"
(
ngModelChange
)="
pageModal=
0"
>
<option
*
ngFor=
"let item of [10,50,100]"
[
ngValue
]="
item
"
>
{{"รายการต่อหน้า"}}: {{item}}
</option>
</select>
</div>
<div
class=
"mb-2 sm:mb-0"
>
<div>
{{'Showing' | translate}} {{companyFilter().length}} {{'entries'
| translate}}
<i
class=
"bi bi-arrow-right ms-2 font-semibold"
></i>
</div>
</div>
<div
class=
"ms-auto"
>
<nav
aria-label=
"Page navigation"
>
<ul
class=
"ti-pagination mb-0"
>
<li
*
ngIf=
"pageModal > 0"
class=
"page-item {{pageModal==0 ? 'disabled' : ''}}"
><a
class=
"page-link px-3 py-[0.375rem] cursor-pointer"
(
click
)="
pageModal =
pageModal
-
1
;
"
>
{{'Previous' | translate}}
</a>
</li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"pageModal > 0"
(
click
)="
pageModal =
pageModal
-
1
;
"
>
{{pageModal}}
</a>
</li>
<li
class=
"page-item"
><a
class=
"page-link active px-3 py-[0.375rem]"
href=
"javascript:void(0);"
>
{{pageModal
+ 1}}
</a>
</li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"(pageModal + 1) * pageSizeModal < companyFilter().length"
(
click
)="
pageModal =
pageModal
+
1
;
"
>
{{pageModal + 2}}
</a></li>
<li
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem]"
href=
"javascript:void(0);"
*
ngIf=
"(pageModal + 2) * pageSizeModal < companyFilter().length"
(
click
)="
pageModal =
pageModal
+
2
;
"
>
{{pageModal + 3}}
</a></li>
<li
*
ngIf=
"(pageModal + 1) * pageSizeModal < companyFilter().length"
class=
"page-item"
><a
class=
"page-link px-3 py-[0.375rem] cursor-pointer"
(
click
)="
pageModal =
pageModal
+
1
;
"
>
{{'Next'| translate}}
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div
class=
"box-footer"
style=
"display: flex;justify-content: end;"
>
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-btn-light align-middle"
(
click
)="
companyModalRef
?.
close
()"
>
{{'Cancel' | translate}}
</button>
</div>
</div>
</div>
</ng-template>
\ No newline at end of file
src/app/portal-manage/mylearn/myhrcompany/myhrcompany.component.scss
View file @
559c22d0
.bg-input-readonly
{
background-color
:
#e5e7eb
;
cursor
:
not
-
allowed
;
}
.
\
!
bg-input-readonly
{
background-color
:
#e5e7eb
!
important
;
cursor
:
not
-
allowed
!
important
;
}
\ No newline at end of file
src/app/portal-manage/mylearn/myhrcompany/myhrcompany.component.ts
View file @
559c22d0
import
{
C
omponent
,
ElementRef
,
OnInit
,
ViewChild
}
from
'@angular/core'
;
import
{
C
hangeDetectorRef
,
Component
,
ElementRef
,
OnInit
,
TemplateRef
,
ViewChild
}
from
'@angular/core'
;
import
{
SharedModule
}
from
'../../../shared/shared.module'
;
import
{
CommonModule
}
from
'@angular/common'
;
import
{
TranslateModule
,
TranslateService
}
from
'@ngx-translate/core'
;
...
...
@@ -12,13 +12,19 @@ import swal from 'sweetalert';
import
{
FormsModule
}
from
'@angular/forms'
;
import
{
Router
}
from
'@angular/router'
;
import
{
ResponseModel
}
from
'../../models/response.model.'
;
import
{
MyZeemeCompanyModel
,
ZeemeCompanyModel
}
from
'../../models/mylearn/zeeme-company.model'
;
import
{
MatDialog
,
MatDialogRef
}
from
'@angular/material/dialog'
;
import
{
FileItem
,
FileUploader
,
FileUploadModule
,
ParsedResponseHeaders
}
from
'ng2-file-upload'
;
import
{
environment
}
from
'../../../../environments/environment'
;
import
{
TokenService
}
from
'../../../shared/services/token.service'
;
import
{
forkJoin
}
from
'rxjs'
;
@
Component
({
selector
:
'app-myhrcompany'
,
templateUrl
:
'./myhrcompany.component.html'
,
styleUrls
:
[
'./myhrcompany.component.scss'
],
standalone
:
true
,
imports
:
[
CommonModule
,
SharedModule
,
TranslateModule
,
FormsModule
],
imports
:
[
CommonModule
,
SharedModule
,
TranslateModule
,
FormsModule
,
FileUploadModule
],
})
export
class
MyhrcompanyComponent
implements
OnInit
{
HrcompanyList
:
HrcompanyModel
[]
=
[];
...
...
@@ -32,7 +38,7 @@ export class MyhrcompanyComponent implements OnInit {
validateEmail
:
string
=
'required'
;
// '' | 'required' | 'pattern' | 'un-usable' | 'usable'
isEnabledBtnAdmin
:
boolean
=
false
;
companyId
:
string
;
companyId
:
string
=
''
;
action
=
'new'
;
_searchTerm
=
''
;
...
...
@@ -54,15 +60,56 @@ export class MyhrcompanyComponent implements OnInit {
this
.
updatePagedItems
();
}
}
@
ViewChild
(
'companyModal'
)
companyModal
!
:
TemplateRef
<
any
>
;
@
ViewChild
(
'logoInputRef'
)
logoInputRef
!
:
ElementRef
;
companyModalRef
?:
MatDialogRef
<
any
>
;
tableHover
:
Map
<
string
,
boolean
>
=
new
Map
<
string
,
boolean
>
()
buttonHover
:
Map
<
string
,
boolean
>
=
new
Map
<
string
,
boolean
>
()
pageModal
=
0
pageSizeModal
=
10
company
:
{
loading
:
boolean
,
list
:
ZeemeCompanyModel
[]
}
=
{
loading
:
false
,
list
:
[]
}
uploaderLogo
?:
FileUploader
searchModal
=
''
baseUrlMylearn
=
environment
.
baseUrlMylearn
constructor
(
private
myhrcompanyservice
:
MyhrcompanyService
,
private
userService
:
UserService
,
public
translate
:
TranslateService
,
private
router
:
Router
)
{}
private
router
:
Router
,
private
modal
:
MatDialog
,
private
tokenService
:
TokenService
,
private
cdr
:
ChangeDetectorRef
)
{
this
.
uploadConfig
()
}
ngOnInit
():
void
{
this
.
getListMyHRCompany
();
this
.
getCompanyList
()
}
getCompanyList
()
{
this
.
company
.
loading
=
true
forkJoin
({
hrCompany
:
this
.
myhrcompanyservice
.
getList
(),
zeemeCompany
:
this
.
myhrcompanyservice
.
getZeemeCompanyList
()
}).
subscribe
({
next
:
(
result
)
=>
{
this
.
MyhrcompanyList
=
result
.
hrCompany
.
map
(
(
x
:
HrcompanyModel
)
=>
new
MyHrcompanyModel
(
x
,
this
.
translate
)
)
this
.
HrcompanyList
=
this
.
MyhrcompanyList
;
this
.
updatePagedItems
();
this
.
getMyHRCompanyExternal
();
const
hrCompany
=
new
Set
(
result
.
hrCompany
.
map
(
o
=>
o
.
companyId
));
this
.
company
.
list
=
result
.
zeemeCompany
.
map
(
e
=>
new
MyZeemeCompanyModel
(
e
)).
filter
(
o
=>
!
hrCompany
.
has
(
o
.
companyId
));
this
.
company
.
loading
=
false
this
.
cdr
.
markForCheck
()
},
error
:
(
err
)
=>
{
this
.
company
.
loading
=
false
swal
(
'ข้อผิดพลาด'
,
'ไม่สามารถดึงข้อมูลบริษัทได้'
,
'error'
);
this
.
cdr
.
markForCheck
()
}
});
}
onCheckboxChange
(
companyId
:
string
)
{
...
...
@@ -102,22 +149,7 @@ export class MyhrcompanyComponent implements OnInit {
this
.
filterList
=
this
.
HrcompanyList
.
slice
(
startIndex
,
endIndex
);
}
getListMyHRCompany
()
{
this
.
myhrcompanyservice
.
getList
().
subscribe
({
next
:
(
response
:
HrcompanyModel
[])
=>
{
this
.
MyhrcompanyList
=
response
.
map
(
(
x
:
HrcompanyModel
)
=>
new
MyHrcompanyModel
(
x
,
this
.
translate
)
);
this
.
HrcompanyList
=
this
.
MyhrcompanyList
;
this
.
updatePagedItems
();
this
.
getMyHRCompanyExternal
();
},
error
:
(
error
)
=>
{
console
.
error
(
'error cant get article'
,
error
);
swal
(
'ข้อผิดพลาด'
,
'ไม่สามารถดึงข้อมูลบริษัทได้'
,
'error'
);
},
});
}
getMyHRCompanyExternal
()
{
const
externalCompanyId
=
'5f3c2b6e-8d7a-4b2f-a3e6-9f1d8c4e7b0a'
;
...
...
@@ -128,7 +160,6 @@ export class MyhrcompanyComponent implements OnInit {
this
.
updatePagedItems
();
},
error
:
(
error
)
=>
{
console
.
error
(
"error can't get external company"
,
error
);
swal
(
'เกิดข้อผิดพลาด'
,
'ไม่สามารถดึงข้อมูล external company ได้'
,
...
...
@@ -144,7 +175,6 @@ export class MyhrcompanyComponent implements OnInit {
const
company
=
new
MyHrcompanyModel
(
response
,
this
.
translate
);
},
error
:
(
error
)
=>
{
console
.
error
(
"error can't get myhrcompany by Id"
);
swal
(
'เกิดข้อผิดพลาด'
,
'ไม่สามารถดึงข้อมูลบริษัทได้'
,
'error'
);
},
});
...
...
@@ -154,10 +184,13 @@ export class MyhrcompanyComponent implements OnInit {
this
.
router
.
navigate
([
'/mylearn/myhrcompany/manage-course'
,
companyId
]);
}
companySourceChange
(
companySource
:
'MyLearn'
|
'ZeeMe'
)
{
this
.
selectHrcompanyModel
.
companySource
=
companySource
}
newHrcompanyModel
()
{
this
.
action
=
'add'
;
this
.
statusHrcompanyModel
=
'add'
;
this
.
selectHrcompanyModel
=
new
MyHrcompanyModel
();
this
.
selectHrcompanyModel
.
companyId
=
''
;
this
.
selectHrcompanyModel
.
companyCode
=
''
;
...
...
@@ -185,8 +218,6 @@ export class MyhrcompanyComponent implements OnInit {
viewHrcompanyModel
(
item
:
HrcompanyModel
)
{
this
.
action
=
'edit'
;
this
.
selectHrcompanyModel
=
new
MyHrcompanyModel
(
item
);
console
.
log
(
'viewHrcompanyModel is:'
,
this
.
selectHrcompanyModel
);
if
(
this
.
selectHrcompanyModel
.
companyEmail
===
''
)
{
this
.
validateEmail
=
'required'
;
}
else
{
...
...
@@ -196,10 +227,6 @@ export class MyhrcompanyComponent implements OnInit {
}
saveHrcompanyModel
()
{
console
.
log
(
'Before Save, selectHrcompanyModel is:'
,
this
.
selectHrcompanyModel
);
swal
({
title
:
'คุณแน่ใจหรือไม่?'
,
text
:
'คุณต้องการบันทึกหรือไม่'
,
...
...
@@ -213,13 +240,11 @@ export class MyhrcompanyComponent implements OnInit {
.
postMyHRcompany
(
this
.
selectHrcompanyModel
,
action
)
.
subscribe
(
(
result
)
=>
{
console
.
log
(
result
);
swal
(
'บันทึกสำเร็จ!!'
,
'บันทึกข้อมูลสมาชิก'
,
'success'
);
this
.
ngOnInit
();
this
.
childModal
?.
nativeElement
.
click
();
},
(
error
)
=>
{
console
.
error
(
'เกิดข้อผิดพลาดในการบันทึก/อัปเดต:'
,
error
);
swal
(
'ข้อผิดพลาด!!'
,
'ไม่สามารถบันทึก/อัปเดตข้อมูลได้'
,
'error'
);
}
);
...
...
@@ -320,8 +345,8 @@ export class MyhrcompanyComponent implements OnInit {
if
(
response
.
success
===
true
)
{
const
userResult
=
response
.
resultObject
as
any
;
const
msg
=
"User : "
+
(
userResult
?
userResult
.
username
:
''
)
+
'
\
n'
+
"Password : "
+
(
userResult
?
userResult
.
password
:
''
)
+
'
\
n'
;
swal
(
'บันทึกสำเร็จ!!'
,
'สร้าง User Admin เรียบร้อย
\
n
\
n '
+
msg
,
'success'
);
"Password : "
+
(
userResult
?
userResult
.
password
:
''
)
+
'
\
n'
;
swal
(
'บันทึกสำเร็จ!!'
,
'สร้าง User Admin เรียบร้อย
\
n
\
n '
+
msg
,
'success'
);
this
.
ngOnInit
();
}
else
if
(
response
.
success
===
false
&&
...
...
@@ -353,4 +378,102 @@ export class MyhrcompanyComponent implements OnInit {
},
});
}
openCompanyModal
()
{
this
.
pageModal
=
0
;
this
.
pageSizeModal
=
10
;
this
.
companyModalRef
=
this
.
modal
.
open
(
this
.
companyModal
,
{
width
:
'1500px'
,
height
:
'700px'
,
maxWidth
:
'none'
,
disableClose
:
true
,
data
:
{}
});
this
.
companyModalRef
.
afterClosed
().
subscribe
(
result
=>
{
});
}
companyFilter
()
{
return
this
.
company
.
list
.
filter
(
e
=>
e
.
companyCode
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
())
||
e
.
companyName
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
())
||
e
.
companyStatus
.
toLowerCase
().
includes
(
this
.
searchModal
.
toLowerCase
()))
}
selectCompany
(
body
:
ZeemeCompanyModel
)
{
this
.
selectHrcompanyModel
.
companyId
=
body
.
companyId
this
.
selectHrcompanyModel
.
companyCode
=
body
.
companyCode
;
this
.
selectHrcompanyModel
.
companyName
=
body
.
companyName
;
this
.
selectHrcompanyModel
.
pictureUrl
=
body
.
pictureCompany
;
}
uploadConfig
()
{
this
.
uploaderLogo
=
new
FileUploader
({
url
:
this
.
baseUrlMylearn
+
"/files/upload-image"
,
isHTML5
:
true
,
authToken
:
this
.
tokenService
.
getToken
()
!
,
});
this
.
uploaderLogo
.
onAfterAddingFile
=
(
fileItem
:
FileItem
)
=>
{
fileItem
.
withCredentials
=
false
;
// this.uploadErrorMsg = "";
while
(
this
.
uploaderLogo
!
.
queue
.
length
>
1
)
{
this
.
uploaderLogo
!
.
queue
[
0
].
remove
();
}
if
(
fileItem
.
file
.
size
>
5000000
)
{
// this.uploadErrorMsg = "maximum file size 5mb.";
swal
(
"Opp!!"
,
"ไม่สามารถอัพโหลดได้"
,
"info"
);
fileItem
.
isCancel
=
true
;
return
;
}
if
(
fileItem
.
file
.
type
!
.
indexOf
(
"image"
)
===
-
1
)
{
// this.uploadErrorMsg = "please upload image only.";
swal
(
"Opp!!"
,
"ไม่สามารถอัพโหลดได้"
,
"info"
);
fileItem
.
isCancel
=
true
;
return
;
}
fileItem
.
upload
();
};
this
.
uploaderLogo
.
onCompleteItem
=
(
item
:
FileItem
,
response
:
string
,
status
:
number
,
headers
:
ParsedResponseHeaders
)
=>
{
if
(
item
.
isSuccess
)
{
const
res
=
JSON
.
parse
(
response
);
this
.
selectHrcompanyModel
.
logo
=
res
.
resultObject
;
swal
(
res
.
message
,
"บันทึกสำเร็จ"
,
"success"
);
}
else
{
// this.uploadErrorMsg = "cannot upload file.";
console
.
log
(
'123'
)
swal
(
"Opp!!"
,
"ไม่สามารถอัพโหลดได้"
,
"info"
);
}
};
}
triggerFileInput
():
void
{
if
(
this
.
logoInputRef
)
{
this
.
logoInputRef
.
nativeElement
.
click
();
}
}
clearLogo
(
input
:
HTMLInputElement
)
{
this
.
selectHrcompanyModel
.
logo
=
''
;
input
.
value
=
''
;
if
(
this
.
uploaderLogo
)
{
this
.
uploaderLogo
.
clearQueue
();
}
}
}
src/app/portal-manage/mylearn/mylearn.routes.ts
View file @
559c22d0
...
...
@@ -19,6 +19,10 @@ export const MYLEARN_ROUTES: Routes = [
loadComponent
:
()
=>
import
(
'./myhrcompany/myhrcompany.component'
).
then
((
m
)
=>
m
.
MyhrcompanyComponent
),
},
{
path
:
'employee-manage'
,
loadComponent
:
()
=>
import
(
'./employee-manage/employee-manage.component'
).
then
((
m
)
=>
m
.
EmployeeManageComponent
),
},
{
path
:
'management-user'
,
loadComponent
:
()
=>
import
(
'./management-user/management-user.component'
).
then
((
m
)
=>
m
.
ManagementUserComponent
),
},
...
...
src/app/portal-manage/services/mylearn/myhrcompany.service.ts
View file @
559c22d0
...
...
@@ -5,6 +5,8 @@ import { environment } from '../../../../environments/environment';
import
{
HrcompanyModel
}
from
'../../models/mylearn/myhrcompany.model'
;
import
{
AlertModel
}
from
'../../models/alert.model'
;
import
{
ResponseModel
}
from
'../../models/response.model.'
;
import
{
ZeemeCompanyModel
}
from
'../../models/mylearn/zeeme-company.model'
;
import
{
EmployeeSyncModel
}
from
'../../models/mylearn/employee-sync.model'
;
@
Injectable
({
providedIn
:
'root'
,
...
...
@@ -12,7 +14,7 @@ import { ResponseModel } from '../../models/response.model.';
export
class
MyhrcompanyService
{
api
=
'/myhrcompany'
;
urlApi
=
environment
.
baseUrlMylearn
+
'/myhrcompany'
;
constructor
(
private
http
:
HttpClient
)
{}
constructor
(
private
http
:
HttpClient
)
{
}
getCompany
()
{
return
this
.
http
.
get
<
HrcompanyModel
>
(
this
.
urlApi
);
...
...
@@ -40,4 +42,23 @@ export class MyhrcompanyService {
return
this
.
http
.
get
<
ResponseModel
>
(
`
${
this
.
urlApi
}
/generate-usersadmin?companyId=
${
companyId
}
`
);
}
getZeemeCompanyList
():
Observable
<
ZeemeCompanyModel
[]
>
{
return
this
.
http
.
get
<
ZeemeCompanyModel
[]
>
(
`https://zeeme.myhr.co.th/ZeemeApi/rest/company/list`
);
}
getZeemeCompanyConfig
(
companyId
:
string
):
Observable
<
any
[]
>
{
return
this
.
http
.
get
<
any
[]
>
(
`https://zeeme.myhr.co.th/ZeemeApi/rest/company/config-myhr/
${
companyId
}
`
);
}
getZeemeEmployeeProfileSyncList
(
companyId
:
string
):
Observable
<
EmployeeSyncModel
[]
>
{
return
this
.
http
.
get
<
EmployeeSyncModel
[]
>
(
`https://zeeme.myhr.co.th/ZeemeApi/rest/employee/profile-sync/
${
companyId
}
`
);
}
getZeemeEmployeeProfileSync
(
companyId
:
string
,
memberId
:
string
):
Observable
<
EmployeeSyncModel
>
{
return
this
.
http
.
get
<
EmployeeSyncModel
>
(
`https://zeeme.myhr.co.th/ZeemeApi/rest/employee/profile-sync/
${
companyId
}
/
${
memberId
}
`
);
}
syncProfile
(
employeeSync
:
EmployeeSyncModel
[]):
Observable
<
ResponseModel
>
{
return
this
.
http
.
put
<
ResponseModel
>
(
`
${
environment
.
baseUrlMylearn
}
/sync/profile/v2`
,
employeeSync
);
}
}
src/app/shared/services/http-request.interceptor.ts
View file @
559c22d0
...
...
@@ -30,7 +30,9 @@ export class HttpRequestInterceptor {
let
token
:
string
|
null
=
null
;
// ใช้ fixed token หาก url เป็น portal.myhr.co.th
if
(
fullUrl
.
startsWith
(
environment
.
url
))
{
if
(
fullUrl
.
startsWith
(
'https://zeeme.myhr.co.th/ZeemeApi/rest'
))
{
token
=
`Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBdXRoIiwidWlkIjoiNWRhY2ZhNzAtZmNmMy0xMWU4LWIyM2UtODVlNjZkMDgwNzk5IiwiaXNzIjoiQ29tcHV0ZXIgU2NpZW5jZSBDb3Jwb3JhdGlvbiBMaW1pdGVkIiwiZGV2aWNlbm8iOiJzc3Nzc3NzIiwibWVtYmVySWQiOiI1ZGFjZmE3MC1mY2YzLTExZTgtYjIzZS04NWU2NmQwODA3OTkifQ.KghztZYthsmjaZ36vc6gOa0HJHLT3_i0sKJ_HY4OAaY`
;
}
else
if
(
fullUrl
.
startsWith
(
environment
.
url
))
{
token
=
`Bearer
${
environment
.
portalFixedToken
}
`
;
}
else
if
(
this
.
tokenService
.
getAppToken
())
{
token
=
`Bearer
${
this
.
tokenService
.
getAppToken
()}
`
;
...
...
src/app/shared/services/nav.service.ts
View file @
559c22d0
...
...
@@ -325,6 +325,7 @@ export class NavService implements OnDestroy {
children
:
[
{
path
:
'/portal-manage/mylearn/mylearn-pdpa-manage'
,
title
:
'จัดการ PDPA'
,
type
:
'link'
},
{
path
:
'/portal-manage/mylearn/myhrcompany'
,
title
:
'จัดการบริษัท'
,
type
:
'link'
},
{
path
:
'/portal-manage/mylearn/employee-manage'
,
title
:
'จัดการพนักงาน'
,
type
:
'link'
},
{
path
:
'/portal-manage/mylearn/management-user'
,
title
:
'การจัดการผู้ใช้งาน'
,
type
:
'link'
},
{
path
:
'/portal-manage/mylearn/course-transfer'
,
title
:
'โอนย้ายคอร์ส'
,
type
:
'link'
},
{
path
:
'/portal-manage/mylearn/timeout-screen-manage'
,
title
:
'จัดการเวลาหน้าจอ'
,
type
:
'link'
},
...
...
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