diff --git a/Mohem/package-lock.json b/Mohem/package-lock.json index 37b0624b..2e79c529 100644 --- a/Mohem/package-lock.json +++ b/Mohem/package-lock.json @@ -1383,6 +1383,11 @@ "integrity": "sha512-nsqTN6zUcm9xtdJiM9OvOJ5EF0kOI8f1Zuug27O/rgtxCRJHGqncSWfCMZUP852dCKPsDsYXGvBhxfRjDBkF5Q==", "dev": true }, + "@types/pdfjs-dist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/pdfjs-dist/-/pdfjs-dist-2.0.0.tgz", + "integrity": "sha512-WVPCCHE7a51qBxSdjC3f2q3+h00awOidrsSSnCmHXERMHelO6dpj1tgFiDx2a7qUuQ105u9iKo62aucvmkZ4GA==" + }, "@types/q": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", @@ -1647,6 +1652,15 @@ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true }, + "adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, "adm-zip": { "version": "0.4.13", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", @@ -1681,7 +1695,6 @@ "version": "6.9.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", - "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -1698,8 +1711,7 @@ "ajv-keywords": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==" }, "amdefine": { "version": "1.0.1", @@ -2277,8 +2289,7 @@ "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { "version": "1.13.1", @@ -2709,6 +2720,17 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "cfb": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.1.tgz", + "integrity": "sha512-eov9L63s9/uMiiDvWCiTYbK3AcM5x5AYo4NL1q75G0AZBrD2X0+Lm9hubk94qy1MJP7pYFuM6/xn0h3grAvBXQ==", + "requires": { + "adler-32": "~1.2.0", + "commander": "^2.16.0", + "crc-32": "~1.2.0", + "printj": "~1.1.2" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2946,6 +2968,22 @@ } } }, + "codepage": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", + "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=", + "requires": { + "commander": "~2.14.1", + "exit-on-epipe": "~1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + } + } + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -4116,6 +4154,15 @@ } } }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -4948,8 +4995,7 @@ "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "encodeurl": { "version": "1.0.2", @@ -5255,6 +5301,11 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -5454,14 +5505,12 @@ "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fastparse": { "version": "1.1.2", @@ -5651,6 +5700,11 @@ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", "dev": true }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -7704,8 +7758,7 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stringify-safe": { "version": "5.0.1", @@ -7723,7 +7776,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, "requires": { "minimist": "^1.2.0" } @@ -7968,7 +8020,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^2.0.0", @@ -8594,12 +8645,32 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, + "ng2-file-upload": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ng2-file-upload/-/ng2-file-upload-1.3.0.tgz", + "integrity": "sha512-Pudxik6LWYsT8hNiEW7RfjgGWAnvfQywxwJYMdt1snTUe+KnlRc/QqPv3QEQW6plXTanuLkYz/TbqilSfSHOsw==" + }, + "ng2-pdf-viewer": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-5.3.2.tgz", + "integrity": "sha512-lGen4owSxBdgxtq9Ge5+K5QMkqg3qj/IWuAKrnwIbkvQL2n0uLV0x0r23/mIxxQbI+ITi8wslEzyf9kp6TzvUQ==", + "requires": { + "@types/pdfjs-dist": "^2.0.0", + "pdfjs-dist": "^2.1.266", + "tslib": "^1.9.0" + } + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-ensure": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz", + "integrity": "sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc=" + }, "node-fetch-npm": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", @@ -9416,6 +9487,15 @@ "sha.js": "^2.4.8" } }, + "pdfjs-dist": { + "version": "2.1.266", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.1.266.tgz", + "integrity": "sha512-Jy7o1wE3NezPxozexSbq4ltuLT0Z21ew/qrEiAEeUZzHxMHGk4DUV1D7RuCXg5vJDvHmjX1YssN+we9QfRRgXQ==", + "requires": { + "node-ensure": "^0.0.0", + "worker-loader": "^2.0.0" + } + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -9595,6 +9675,11 @@ "resolved": "https://registry.npmjs.org/primeng/-/primeng-7.1.3.tgz", "integrity": "sha512-t+DC5VtTJBCz4fPa3wMspByhtdQYgyLEIMWok2kH1J/a/2bTXSYM31ueHKjgV8XuUaeDwMzARLTQv+V9HczIEQ==" }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -9827,8 +9912,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { "version": "1.4.1", @@ -11160,6 +11244,14 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "ssf": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.2.tgz", + "integrity": "sha512-rDhAPm9WyIsY8eZEKyE8Qsotb3j/wBdvMWBUsOhJdfhKGLfQidRjiBUV0y/MkyCLiXQ38FG6LWW/VYUtqlIDZQ==", + "requires": { + "frac": "~1.1.2" + } + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -12057,7 +12149,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -12727,6 +12818,26 @@ "errno": "~0.1.7" } }, + "worker-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-2.0.0.tgz", + "integrity": "sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw==", + "requires": { + "loader-utils": "^1.0.0", + "schema-utils": "^0.4.0" + }, + "dependencies": { + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -12751,6 +12862,27 @@ "uuid": "^3.3.2" } }, + "xlsx": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.14.3.tgz", + "integrity": "sha512-wgt9zGKeFp4WIQdPx+j2sNNbDYRbJ+M+uuFcS16pf2yLo/aKcG3RaD4xmS/LHT5rznc6V27NRwIXNWmxLj6eZw==", + "requires": { + "adler-32": "~1.2.0", + "cfb": "^1.1.0", + "codepage": "~1.14.0", + "commander": "~2.17.1", + "crc-32": "~1.2.0", + "exit-on-epipe": "~1.0.1", + "ssf": "~0.10.2" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + } + } + }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", diff --git a/Mohem/package.json b/Mohem/package.json index 4eef272b..44c00fdd 100644 --- a/Mohem/package.json +++ b/Mohem/package.json @@ -93,6 +93,8 @@ "core-js": "^2.5.4", "date-fns": "^1.30.1", "mx.ferreyra.callnumber": "0.0.2", + "ng2-file-upload": "^1.3.0", + "ng2-pdf-viewer": "^5.3.2", "phonegap-plugin-barcodescanner": "^8.1.0", "phonegap-plugin-multidex": "^1.0.0", "phonegap-plugin-push": "2.2.3", @@ -101,6 +103,7 @@ "run": "1.4.0", "rxjs": "~6.3.3", "uk.co.workingedge.phonegap.plugin.launchnavigator": "^3.2.2", + "xlsx": "^0.14.3", "zone.js": "~0.8.29" }, "devDependencies": { diff --git a/Mohem/src/app/app-routing.module.ts b/Mohem/src/app/app-routing.module.ts index 5c1ce544..c36f4a97 100644 --- a/Mohem/src/app/app-routing.module.ts +++ b/Mohem/src/app/app-routing.module.ts @@ -13,7 +13,8 @@ const routes: Routes = [ { path: 'accrual-balances', loadChildren: './accrual-balances/accrual-balances.module#AccrualBalancesPageModule' }, { path: 'my-team', loadChildren: './my-team/my-team.module#MyTeamPageModule' }, { path: 'attendance', loadChildren: './attendance/attendance.module#AttendancePageModule' }, - { path: 'eit', loadChildren: './eit/eit.module#EITPageModule' }, { path: 'absence', loadChildren: './absence/absence.module#AbsencePageModule' } + { path: 'eit', loadChildren: './eit/eit.module#EITPageModule' }, { path: 'absence', loadChildren: './absence/absence.module#AbsencePageModule' }, + { path: 'notification', loadChildren: './notification/notification.module#NotificationPageModule' } ]; diff --git a/Mohem/src/app/eit/add-attach/add-attach.component.html b/Mohem/src/app/eit/add-attach/add-attach.component.html new file mode 100644 index 00000000..515acb5d --- /dev/null +++ b/Mohem/src/app/eit/add-attach/add-attach.component.html @@ -0,0 +1,62 @@ + + + + {{'general, addAttach' | translate}} + + + + + + + + + + + + + + +
{{"addAttach.title" | translate}}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + {{'general, ok' | translate}} +
+
\ No newline at end of file diff --git a/Mohem/src/app/eit/add-attach/add-attach.component.scss b/Mohem/src/app/eit/add-attach/add-attach.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/Mohem/src/app/eit/add-attach/add-attach.component.spec.ts b/Mohem/src/app/eit/add-attach/add-attach.component.spec.ts new file mode 100644 index 00000000..d0646cb7 --- /dev/null +++ b/Mohem/src/app/eit/add-attach/add-attach.component.spec.ts @@ -0,0 +1,27 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddAttachComponent } from './add-attach.component'; + +describe('AddAttachComponent', () => { + let component: AddAttachComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AddAttachComponent ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AddAttachComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/eit/add-attach/add-attach.component.ts b/Mohem/src/app/eit/add-attach/add-attach.component.ts new file mode 100644 index 00000000..8afdc22d --- /dev/null +++ b/Mohem/src/app/eit/add-attach/add-attach.component.ts @@ -0,0 +1,172 @@ +import { AddEitResponse } from './../models/add.eit.response'; +import { CommonService } from 'src/app/hmg-common/services/common/common.service'; +import { Component, OnInit } from '@angular/core'; +import { FileUploader } from 'ng2-file-upload'; +import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service'; +import { ModalController } from '@ionic/angular'; + + +@Component({ + selector: 'app-add-attach', + templateUrl: './add-attach.component.html', + styleUrls: ['./add-attach.component.scss'], +}) +export class AddAttachComponent implements OnInit { + + private eitResponse: any;//AddEitResponse=new AddEitResponse(); + isUpload: boolean = false; + inQueue: boolean = false; + addAttachmentListReq: any; + attachmentID: number = 0; + addAttachRequest: any = []; + fileData: any; + fileType: any; + index: any = 1; + dirPage: any; + TransactionID: any; + indexLastObj: any + filterAllowedType: any = ['application/pdf', 'image/jpeg', 'image/png', 'text/plain', 'image/jpg', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']; + + + constructor(public cs: CommonService, public ts: TranslatorService, public modalCtrl: ModalController) { + this.eitResponse = this.cs.sharedService.getSharedData(AddEitResponse.SHARED_DATA, false); + this.TransactionID = this.cs.sharedService.getSharedData('TransactionID', false); + this.indexLastObj = this.cs.sharedService.getSharedData('indexLastObj', false); + + // console.log("this.TransactionID : "+ this.TransactionID); + this.isUpload = false; + } + + ngOnInit() { } + + public uploader: FileUploader = new FileUploader({ + allowedMimeType: ['application/pdf', 'image/jpeg', 'image/png', 'text/plain', 'image/jpg', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'], + maxFileSize: 10 * 1024 * 1024, + formatDataFunctionIsAsync: true, + formatDataFunction: async (item) => { + return new Promise((resolve, reject) => { + resolve({ + name: item._file.name, + length: item._file.size, + contentType: item._file.type, + date: new Date() + }); + }); + } + }); + + public hasBaseDropZoneOver: boolean = false; + public hasAnotherDropZoneOver: boolean = false; + + public fileOverBase(e: any): void { + this.hasBaseDropZoneOver = e; + } + + public fileOverAnother(e: any): void { + this.hasAnotherDropZoneOver = e; + } + + OkBtnModal() { + let fileCount: number = this.uploader.queue.length; + if (fileCount > 0) { + let data: any = this.addAttachRequest; + // this.viewCtrl.dismiss(data); + + this.modalCtrl.dismiss(data); + + } + else { + let msg: string = ""; + msg = this.ts.trPK("general", "noFileSelect"); + this.cs.presentAlert(msg); + return; + } + } // end ok button + + closeBtnModal() { + // this.viewCtrl.dismiss("cancel"); + this.modalCtrl.dismiss("cancel"); + + } + + onFileSelected(input) { + + // this.uploader.onWhenAddingFileFailed = function (item: any, filter: any, options: any){ + + if (!(this.filterAllowedType.indexOf(input.target.files[0].type) > -1)) { + let msg: string = ""; + msg = this.ts.trPK("general", "notSupport"); + this.cs.presentAlert(msg); + return + } // todo: show alert that you tried uploading wrong files + + else { + + const file = input.target.files[0]; + + // console.log(file); + + //var encoded = Base64.encode(file); + this.getBase64(file).then( + data => this.pushObject(data, file.name, file.type) + ); + + // } + // }; + + } + } + + + getBase64(file) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = () => resolve(reader.result); + reader.onerror = error => reject(error); + }); + } + + + pushObject(fileData, name, type) { + + // console.log("before push: "+ this.index); + this.indexLastObj++; + try { + let array = name.split('.'); + let attachType: string = array[array.length - 1]; + + this.addAttachRequest.push( + { + AttachmentID: this.indexLastObj, + P_FILE_CONTENT_TYPE: attachType,//type.split('/')[1], + P_FILE_DATA: fileData.split(',')[1], + P_FILE_NAME: name,//.split('.')[0], + P_TRANSACTION_ID: this.TransactionID + }) + + } catch (e) { + + } + + + //console.log("after push: "+ this.index); + // return this.addAttachRequest + } + + + removeFile(objectitem) { + + let objIndex1 = this.uploader.queue.findIndex(item => item == objectitem); + this.uploader.queue.splice(objIndex1, 1); + let objIndex = this.addAttachRequest.findIndex(item => item.AttachmentID == objectitem.AttachmentID); + this.addAttachRequest.splice(objIndex, 1); + // this.addAttachRequest =this.addAttachRequest.filter(item => item.AttachmentID !== objectitem.AttachmentID); + + } + + + + + +} diff --git a/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.html b/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.html index a27c9bab..b30c7c36 100644 --- a/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.html +++ b/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.html @@ -1,3 +1,183 @@ -

- confirm-add-eit works! -

+ + + + {{headerTitle}} + + + + + + + +
{{"confirmAddEit.approverList" | translate}}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + {{'confirmAddEit, comment' | translate}} + + + + + + + + + +
+ + + +
{{"absenceList, attachList" | translate}}
+ + +
+ + +
+ + +
+
+ + {{attachList.P_FILE_NAME }} + +
+ + + + +
+
+ +
+ +
+ + +
+
+ + {{attachRes.FILE_NAME }} + +
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+ + +
+ + {{ (isDelete ? 'general, delete' : 'general, submit') | translate }} +
+
\ No newline at end of file diff --git a/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.scss b/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.scss index e69de29b..44d1bc00 100644 --- a/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.scss +++ b/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.scss @@ -0,0 +1,7 @@ +.footer-button { + border-radius: 2px; + padding: 0 1.1em; + min-height: 45px; + min-width: 200px; + } + \ No newline at end of file diff --git a/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.ts b/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.ts index eb4d817b..b1579cc8 100644 --- a/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.ts +++ b/Mohem/src/app/eit/confirm-add-eit/confirm-add-eit.component.ts @@ -1,4 +1,17 @@ +import { WorkListAttachViewComponent } from './../../notification/work-list-attach-view/work-list-attach-view.component'; +import { AddAttachComponent } from './../add-attach/add-attach.component'; +import { NotificationGetAttachResponse } from './../models/NotificationGetAttachRes'; +import { EITNotificatonBodyResponse } from './../models/EITNotificationBodyRes'; +import { WorkListButtonRequest } from './../models/NotificationButtonReq'; +import { ApproversList } from './../../absence/models/approvers'; +import { EitRequest } from './../models/eit.request'; import { Component, OnInit } from '@angular/core'; +import { MenuResponse } from 'src/app/hmg-common/services/menu/models/menu-response'; +import { ModalController } from '@ionic/angular'; +import { CommonService } from 'src/app/hmg-common/services/common/common.service'; +import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service'; +import { EitService } from '../services/eit.service'; +import { AddEitResponse } from '../models/add.eit.response'; @Component({ selector: 'app-confirm-add-eit', @@ -7,8 +20,446 @@ import { Component, OnInit } from '@angular/core'; }) export class ConfirmAddEitComponent implements OnInit { - constructor() { } + private P_TransactionID: number; + private eitRequest: EitRequest; + approversList: ApproversList; + addrespList: any;//EitRespModel; + eitComments: string = ""; + menuType: string = ""; + selEmp: string = ""; + respID: number; + selMenu: MenuResponse; + getAttachList: any; + attachListDisplay: any; + headerTitle: string = ""; + isTrue: any = 0; + attachItems: any; + private isResubmitEIT: boolean = false; + private itemKey: string = ""; + private pActionMode: string = "SUBMIT"; + attachReqObj: WorkListButtonRequest = new WorkListButtonRequest(); + attachmentRes: any; + objIndex1: any; + attachListOver: any = []; + index: any = 0; + getPassNotificationDetails: any; + isSubmitBtnClicked: boolean; + isDelete: boolean = false; - ngOnInit() {} + constructor(public modalController: ModalController, public cs: CommonService, private ts: TranslatorService, private eitService: EitService) { + this.isSubmitBtnClicked = false; + this.eitRequest = new EitRequest(); + } + + ngOnInit() { + // console.log('ionViewDidLoad ConfirmAddEitPage'); + // let selMenu:MenuResponse=new MenuResponse(); + this.selMenu = this.cs.sharedService.getSharedData(MenuResponse.SHARED_DATA, false); + this.selEmp = this.cs.sharedService.getSharedData(MenuResponse.SHARED_SEL_EMP, false); + this.respID = this.cs.sharedService.getSharedData(MenuResponse.SHARED_SEL_RESP_ID, false); + this.eitRequest = this.cs.sharedService.getSharedData(EitRequest.SHARED_DATA, false); + + this.isResubmitEIT = this.cs.sharedService.getSharedData('confirmAddEITData', false).isResubmit; + + if (this.isResubmitEIT) { + this.getPassNotificationDetails = this.cs.sharedService.getSharedData(EITNotificatonBodyResponse.NOT_WORKLIST, true); + // console.log("this.getPassNotificationDetails: " + this.getPassNotificationDetails); + this.P_TransactionID = this.cs.sharedService.getSharedData("TransactionIDResubmit", true); + let notification = this.cs.sharedService.getSharedData(EITNotificatonBodyResponse.NOT_WORKLIST, true); + this.itemKey = notification.ITEM_KEY; + this.pActionMode = "RESUBMIT"; + this.menuType = "E"; + this.respID = -999; + this.selEmp = this.eitRequest.P_SELECTED_EMPLOYEE_NUMBER; + this.getApproversList(); + this.getAttachment(this.getPassNotificationDetails.NOTIFICATION_ID); + let msg: string = ""; + msg = this.ts.trPK("eit", "update-title"); + this.headerTitle = msg; + } else { + this.menuType = this.selMenu.List_Menu.MENU_TYPE; + this.headerTitle = this.selMenu.GetMenuEntriesList.PROMPT; + this.addrespList = this.cs.sharedService.getSharedData(AddEitResponse.SHARED_DATA); + this.itemKey = this.addrespList.SubmitEITTransactionList.P_ITEM_KEY; + this.P_TransactionID = this.addrespList.SubmitEITTransactionList.P_TRANSACTION_ID; + + this.isDelete = this.isResubmitEIT = this.cs.sharedService.getSharedData('confirmAddEITData', false).isDelete; + + + this.getApproversList(); + // this.confirmAddEit.submitEit(this.eitRequest).subscribe((result: AddEitResponse) => { + // this.handleSubmitEitResult(result); + // }); + } + } + + getApproversList() { + let body: any = { + P_TRANSACTION_ID: this.P_TransactionID, + P_AME_TRANSACTION_TYPE: "SSHRMS", + P_PAGE_NUM: 1, + P_PAGE_LIMIT: 1000 + } + this.eitService.getApproversList( + body). + subscribe((result: any) => { + this.handleApproversResult(result); + }); + } + + handleApproversResult(result) { + if (this.cs.validResponse(result)) { + this.approversList = result.GetApprovesList; + // console.log("approvers List" + this.approversList); + } + } + + startEitApproval() { + //first call add attach inside success call submit + // if(this.isResubmitEIT){ + // this.startEITApprovalProcess(); + // }else{ + // let listToAdd:any=[]; + if (this.attachListOver) { + // this.attachListOver.forEach(element => { + // if(element.toAdd==true) + // listToAdd.push(element); + // }); + + let request = { + AddAttachmentList: this.attachListOver + + } + this.eitService.addAttachment( + request). + subscribe((result: any) => { + this.handleAddAttachmentResults(result); + }); + } else { + this.startEITApprovalProcess(); + } + // } + } + + + handleAddAttachmentResults(result) { + + if (this.cs.validResponse(result)) { + //this.isUpload=true; + this.isTrue = 0; + for (let i = 0; i < result.AddAttSuccessList.length; i++) { + if (!result.AddAttSuccessList[i].AddSuccess) { + this.attachListOver[i].isSuccess = false; + //this.attachItems[i].isSuccess = false; + // if false display cancel button with waring icon or design + }// end if + else { + // if true remove cancel and set isSuccess = true + // this.attachItems[i].isSuccess = true; + this.attachListOver[i].isSuccess = true; + this.isTrue = this.isTrue + 1; //count flag of attach status + } // end else + } // end for + + if (this.isTrue == result.AddAttSuccessList.length) { + this.startEITApprovalProcess(); + } + else { + //stope + let filtered = this.attachListOver.filter(function (el) { return el.isSuccess == true; }); + this.attachListOver = filtered; + let msg: string = ""; + msg = this.ts.trPK("eit", "attach-errorMsg"); + this.cs.presentAlert(msg); + // this.cs.presentAlert("fail to upload some attach file"); + } + } + } + + startEITApprovalProcess() { + let request: any = {}; + request.P_SELECTED_EMPLOYEE_NUMBER = this.selEmp; + request.P_MENU_TYPE = this.menuType; + request.P_SELECTED_RESP_ID = this.respID; + request.P_TRANSACTION_ID = this.P_TransactionID; + request.P_ITEM_KEY = this.itemKey; + request.P_ACTION_MODE = this.pActionMode; + request.P_COMMENTS = this.eitComments; + this.eitService.startEitApprovalProcess( + request). + subscribe((result: any) => { + this.handleResults(result); + }); + } + cancelEitProcess() { + let body: any = { + P_TRANSACTION_ID: this.P_TransactionID + } + this.eitService.cancelHRTransaction( + body). + subscribe((result: any) => { + this.handleCancelResults(result); + }); + + } + handleCancelResults(result) { + if (this.cs.validResponse(result)) { + this.isSubmitBtnClicked = false; + // this.navCtrl.popToRoot(); + } + } + handleResults(result) { + if (this.cs.validResponse(result)) { + this.isSubmitBtnClicked = true; + //if(this.isResubmitEIT==false){ + let msg: string = this.ts.trPK("eit", "approval-message-success"); + this.cs.presentAlert(msg); + // } + // this.navCtrl.popToRoot(); + + this.cs.openHome(); + } + } + + // addAttachment(){ + // this.navCtrl.push('AddAttachPage'); + + + // } + + async addAttachment(str: boolean, attachItems: any) { + // console.log("inside attach modal"); + //open the modal with return data + let attachDocID = attachItems.ATTACHED_DOCUMENT_ID; + + const modal = await this.modalController.create({ + component: AddAttachComponent + }); + + modal.onDidDismiss() + .then((data) => { + if (data == "cancel" || data == "undefined") { + return; + } else { + if (!str) { + + // this.attachItems = data.map(function(el) { + // var o = Object.assign({}, el); + // o.isSuccess = false; + // return o; + // }) + // this.objIndex1 =this.attachmentRes.findIndex(item => item == attachItems); //to use it in remove attach + //.ATTACHED_DOCUMENT_ID + this.updateFile(data, attachDocID); + } else { + this.attachListDisplay = data; + this.attachItems = this.attachListDisplay.map(function (el) { + var o = Object.assign({}, el); + o.isSuccess = false; + return o; + }); + + this.attachListOver = this.attachListOver ? this.attachListOver.concat(this.attachItems) : this.attachItems; + } + // this.attachListDisplay=data; + + // this.attachItems = this.attachListDisplay.map(function(el) { + // var o = Object.assign({}, el); + // o.isSuccess = false; + // return o; + // }) + // console.log(this.attachListDisplay); + // console.log(this.attachItems); + } + }); + + return await modal.present(); + + // var modalPage = this.modalController.create('AddAttachPage', { indexLastObj: this.attachListOver.length, TransactionID: this.P_TransactionID, enableBackdropDismiss: false });//enableBackdropDismiss: false ,enableBackdropDismiss: false + + // modalPage.onDidDismiss(data => { + // if (data == "cancel" || data == "undefined") { + + // return; + // } + + // else { + // if (!str) { + + // // this.attachItems = data.map(function(el) { + // // var o = Object.assign({}, el); + // // o.isSuccess = false; + // // return o; + // // }) + // // this.objIndex1 =this.attachmentRes.findIndex(item => item == attachItems); //to use it in remove attach + // //.ATTACHED_DOCUMENT_ID + // this.updateFile(data, attachDocID); + // } + + // else { + // this.attachListDisplay = data; + // this.attachItems = this.attachListDisplay.map(function (el) { + // var o = Object.assign({}, el); + // o.isSuccess = false; + // return o; + // }); + + // this.attachListOver = this.attachListOver ? this.attachListOver.concat(this.attachItems) : this.attachItems; + + + // } + + // // this.attachListDisplay=data; + + // // this.attachItems = this.attachListDisplay.map(function(el) { + // // var o = Object.assign({}, el); + // // o.isSuccess = false; + // // return o; + // // }) + // // console.log(this.attachListDisplay); + // // console.log(this.attachItems); + + + // }// end else + // }); + // modalPage.present(); + + } + + removeFile(objectitem) { + + + // if (this.attachItems) { + // let index1 = this.attachItems.findIndex(item => item == objectitem); + // if (index1 > -1) { + + // this.attachItems.splice(index1, 1); + // } + // this.attachListDisplay =this.attachListDisplay.filter(item => item.AttachmentID !== objectitem.AttachmentID); + // } + if (this.attachListOver) { + let index2 = this.attachListOver.findIndex(item => item == objectitem); + if (index2 > -1) { + this.attachListOver.splice(index2, 1); + } + //this.attachListOver =this.attachListOver.filter(item => item.AttachmentID !== objectitem.AttachmentID); + } + if (this.attachmentRes) { + + let index3 = this.attachmentRes.findIndex(item => item == objectitem); + if (index3 > -1) { + + this.attachmentRes.splice(index3, 1); + } + } + + } + + + getAttachment(NotificationID) { + + this.attachReqObj.P_NOTIFICATION_ID = NotificationID; + + this.eitService.getAttach(this.attachReqObj). + subscribe((result: NotificationGetAttachResponse) => { + this.handleWorkListAttachResult(result); + }); + } + + handleWorkListAttachResult(result) { + if (this.cs.validResponse(result)) { + // this.sharedData.setSharedData(result, WorKListResponse.SHARED_DATA); + if (result.GetAttachementList != null) { + this.attachmentRes = result.GetAttachementList; + } // if result == null + } // valid it + + } + + async OpenAttachFiles(value, Type) { + // let modal: Modal = this.modalCtrl.create('WorkListAttachViewPage', { displayData: value, TypeData: Type }); + // modal.present(); + + this.cs.sharedService.setSharedData({ displayData: value, TypeData: Type }, 'WorkListAttachViewPage'); + const modal = await this.modalController.create({ + component: WorkListAttachViewComponent + }); + + modal.onDidDismiss() + .then((data) => { + }); + + return await modal.present(); + } + + + delelteFile(attach) { + // let alert = this.cs.confirmAlertDialog(this.translate.translate('general.deletePerm')); + + this.cs.confirmAlertDialog((data) => { + if (data == true) { + this.continueDelete(attach); + } + }, this.ts.trPK('general', 'ok'), () => { + + }, this.ts.trPK('general', 'cancel'), this.ts.trPK('general', 'alert'), this.ts.trPK('eit', 'delete-perm')); + + // alert.onDidDismiss((data) => { + // if (data == true) { + // this.continueDelete(attach); + // } + // }); + + + } + continueDelete(attach) { + // console.log("trst" + attach.ATTACHED_DOCUMENT_ID); + let req = { + P_ATTACHED_DOCUMENT_ID: attach.ATTACHED_DOCUMENT_ID + } + this.eitService.deleteAttach(req). + subscribe((result: any) => { + if (this.cs.validResponse(result)) { + if (result.DeleteAttachmentList.P_RETURN_STATUS === "S") { + this.getAttachment(this.getPassNotificationDetails.NOTIFICATION_ID); + let msg: string = ""; + msg = this.ts.trPK("eit", "deleteAttach"); + this.cs.presentAlert(msg); + //this.cs.presentAlert("Success" ); + } + } + }); + } + + updateFile(attachList, attachDocID) { + //console.log("updateFile" + attachDocID.ATTACHED_DOCUMENT_ID); + let req = { + P_ATTACHED_DOCUMENT_ID: attachDocID, + P_FILE_DATA: attachList[0].P_FILE_DATA, + P_FILE_NAME: attachList[0].P_FILE_NAME, + P_FILE_CONTENT_TYPE: attachList[0].P_FILE_CONTENT_TYPE + } + this.eitService.updateAttach(req). + subscribe((result: any) => { + if (this.cs.validResponse(result)) { + if (result.MessageStatus == 1) { + let msg: string = ""; + msg = this.ts.trPK("eit", "attachUpdate"); + this.cs.presentAlert(msg); + // this.cs.presentAlert("updated attach successfully" ); + + //flag to disable update and enable remove + // this.removeFile(attachList); + this.getAttachment(this.getPassNotificationDetails.NOTIFICATION_ID); + } + } // val + }); + } + + + ionViewWillLeave() { + if (this.P_TransactionID && this.isSubmitBtnClicked == false) + this.cancelEitProcess(); + } } diff --git a/Mohem/src/app/eit/eit-list/eit-list.component.html b/Mohem/src/app/eit/eit-list/eit-list.component.html index 8a518869..a8d86bf5 100644 --- a/Mohem/src/app/eit/eit-list/eit-list.component.html +++ b/Mohem/src/app/eit/eit-list/eit-list.component.html @@ -55,11 +55,11 @@ -

{{'general.noData' | translate}}

+

{{'general, noData' | translate}}

- -
+
+ diff --git a/Mohem/src/app/eit/eit-list/eit-list.component.scss b/Mohem/src/app/eit/eit-list/eit-list.component.scss index a27a7ef0..e10a250d 100644 --- a/Mohem/src/app/eit/eit-list/eit-list.component.scss +++ b/Mohem/src/app/eit/eit-list/eit-list.component.scss @@ -1,6 +1,11 @@ .footer-button { - border-radius: 2px; - padding: 0 1.1em; - min-height: 45px; - min-width: 200px; - } \ No newline at end of file + border-radius: 2px; + padding: 0 1.1em; + min-height: 45px; + min-width: 200px; +} +h4 { + font-size: 2.2rem; + text-align: center; + color: #000000; +} diff --git a/Mohem/src/app/eit/eit.module.ts b/Mohem/src/app/eit/eit.module.ts index 8a7977d6..cf75a356 100644 --- a/Mohem/src/app/eit/eit.module.ts +++ b/Mohem/src/app/eit/eit.module.ts @@ -1,3 +1,4 @@ +import { AddAttachComponent } from './add-attach/add-attach.component'; import { ConfirmAddEitComponent } from './confirm-add-eit/confirm-add-eit.component'; import { AddEitComponent } from './add-eit/add-eit.component'; import { HmgCommonModule } from 'src/app/hmg-common/hmg-common.module'; @@ -5,13 +6,12 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { Routes, RouterModule } from '@angular/router'; - import { IonicModule } from '@ionic/angular'; - import { EITPage } from './eit.page'; import { HomeComponent } from './home/home.component'; import { EitListComponent } from './eit-list/eit-list.component'; import { DatePicker } from '@ionic-native/date-picker/ngx'; +import { FileSelectDirective } from 'ng2-file-upload'; const routes: Routes = [ { @@ -33,6 +33,10 @@ const routes: Routes = [ { path: 'confirm-add-eit', component: ConfirmAddEitComponent + }, + { + path: 'add-attach', + component: AddAttachComponent } ] } @@ -51,7 +55,9 @@ const routes: Routes = [ HomeComponent, EitListComponent, AddEitComponent, - ConfirmAddEitComponent + ConfirmAddEitComponent, + AddAttachComponent, + FileSelectDirective ], providers: [ DatePicker diff --git a/Mohem/src/app/eit/models/EITNotificationBodyItems.ts b/Mohem/src/app/eit/models/EITNotificationBodyItems.ts new file mode 100755 index 00000000..4c1bf836 --- /dev/null +++ b/Mohem/src/app/eit/models/EITNotificationBodyItems.ts @@ -0,0 +1,18 @@ +export class EITNotificationBodyItems { + public TRANSACTION_NUMBER :number; + public DESC_FLEX_NAME : string; + public ACTION : string; + public EXTRA_INFO_ID :number; + public DESC_FLEX_CONTEXT_COD : string; + public APPLICATION_COLUMN_NAME : string; + public SEGMENT_SEQ_NUM :number; + public DATATYPE : string; + public SEGMENT_NAME : string; + public VARCHAR2_VALUE : string; + public SEGMENT_PROMPT : string; + public NUMBER_VALUE :number; + public SEGMENT_VALUE_DSP : string; + public DATE_VALUE : string ; + public PREV_SEGMENT_VALUE_DSP : string; + public DISPLAY_FLAG : string ; +} \ No newline at end of file diff --git a/Mohem/src/app/eit/models/EITNotificationBodyRes.ts b/Mohem/src/app/eit/models/EITNotificationBodyRes.ts new file mode 100755 index 00000000..f6051d5d --- /dev/null +++ b/Mohem/src/app/eit/models/EITNotificationBodyRes.ts @@ -0,0 +1,8 @@ +import { EITNotificationBodyItems } from './EITNotificationBodyItems'; +import { Response } from '../../hmg-common/services/models/response'; + +export class EITNotificatonBodyResponse extends Response { +public static SHARED_DATA = 'Notif_BODY_List'; +public static NOT_WORKLIST = 'Notif_WORK_LOST'; +public EITNotificationBodyItems: EITNotificationBodyItems []; +} \ No newline at end of file diff --git a/Mohem/src/app/eit/models/NotificationButtonReq.ts b/Mohem/src/app/eit/models/NotificationButtonReq.ts new file mode 100755 index 00000000..908ddc4f --- /dev/null +++ b/Mohem/src/app/eit/models/NotificationButtonReq.ts @@ -0,0 +1,6 @@ +import { Request } from '../../hmg-common/services/models/request'; + +export class WorkListButtonRequest extends Request{ + //public static SHARED_DATA = ''; + public P_NOTIFICATION_ID :any; +} \ No newline at end of file diff --git a/Mohem/src/app/eit/models/NotificationGetAttachRes.ts b/Mohem/src/app/eit/models/NotificationGetAttachRes.ts new file mode 100755 index 00000000..109fe921 --- /dev/null +++ b/Mohem/src/app/eit/models/NotificationGetAttachRes.ts @@ -0,0 +1,21 @@ +import { Response } from '../../hmg-common/services/models/response'; + +export class NotificationGetAttachResponse extends Response { +public static SHARED_DATA = ''; +public SEQ_NUM = 0;// Int +public FILE_NAME = '';//String +public FILE_DATA = '';//base64 +public PK1_VALUE = '';//String +public PK2_VALUE = '';//String +public PK3_VALUE = '';//String +public PK4_VALUE = '';//String +public FILE_CONTENT_TYPE = '';//String +public ATTACHED_DOCUMENT_ID = 0;//Int +public DOCUMENT_ID = 0;//Int +public CATEGORY_ID = 0;//Int +public DATATYPE_ID = 0;//Int +public ENTITY_NAME = '';//String +public FILE_ID = 0;//Int +public PK5_VALUE = '';//String + +} \ No newline at end of file diff --git a/Mohem/src/app/eit/services/eit.service.ts b/Mohem/src/app/eit/services/eit.service.ts index 86d089d6..37ab4bd0 100644 --- a/Mohem/src/app/eit/services/eit.service.ts +++ b/Mohem/src/app/eit/services/eit.service.ts @@ -1,9 +1,12 @@ +import { NotificationGetAttachResponse } from './../models/NotificationGetAttachRes'; import { EITTransactionsRequest } from './../models/EITTransactionsReq'; import { Observable } from 'rxjs'; import { Injectable } from '@angular/core'; import { AuthenticationService } from 'src/app/hmg-common/services/authentication/authentication.service'; import { ConnectorService } from 'src/app/hmg-common/services/connector/connector.service'; import { AddEitResponse } from '../models/add.eit.response'; +import { ApproversList } from 'src/app/absence/models/approvers'; +import { WorkListButtonRequest } from '../models/NotificationButtonReq'; @Injectable({ providedIn: 'root' @@ -21,7 +24,11 @@ export class EitService { public static resubmitEit = 'Services/ERP.svc/REST/RESUBMIT_EIT_TRANSACTION'; public static startEitProcess = 'Services/ERP.svc/REST/START_EIT_APPROVAL_PROCESS'; public static updateAttach = 'Services/ERP.svc/REST/UPDATE_ATTACHMENT'; - public static delteAttach = 'Services/ERP.svc/REST/DELETE_ATTACHMENT'; + public static deleteAttach = 'Services/ERP.svc/REST/DELETE_ATTACHMENT'; + public static getApproversList = 'Services/ERP.svc/REST/GET_APPROVERS_LIST'; + public static addAttachment = 'Services/ERP.svc/REST/ADD_ATTACHMENT'; + public static cancelHRTransaction = 'Services/ERP.svc/REST/CANCEL_HR_TRANSACTION' + public static getAttach = 'Services/ERP.svc/REST/GET_ATTACHMENTS'; constructor(public authService: AuthenticationService, public con: ConnectorService) { } @@ -69,4 +76,49 @@ export class EitService { return this.con.post(EitService.getDefaultValue, request, onError, errorLabel); } + public getApproversList(abProcess: any, onError?: any, errorLabel?: string): Observable { + const request = abProcess; + request.P_AME_TRANSACTION_TYPE = "SSHRMS"; + request.P_PAGE_NUM = 1; + request.P_PAGE_LIMIT = 1000;//check later on + this.authService.authenticateRequest(request); + return this.con.post(EitService.getApproversList, request, onError, errorLabel); + } + + public addAttachment(addAttachrequest: any, onError?: any, errorLabel?: string): Observable { + const request = addAttachrequest; + this.authService.authenticateRequest(request); + return this.con.post(EitService.addAttachment, request, onError, errorLabel); + } + + public startEitApprovalProcess(eitProcess: any, onError?: any, errorLabel?: string): Observable { + const request = eitProcess; + this.authService.authenticateRequest(request); + return this.con.post(EitService.startEitProcess, request, onError, errorLabel); + } + + public cancelHRTransaction(transactionID: any, onError?: any, errorLabel?: string): Observable { + const request = transactionID; + this.authService.authenticateRequest(request); + return this.con.post(EitService.cancelHRTransaction, request, onError, errorLabel); + } + + public getAttach(getAttachReq: WorkListButtonRequest, onError?: any, errorLabel?: string): Observable { + const request = getAttachReq; + this.authService.authenticateRequest(request); + return this.con.post(EitService.getAttach, request, onError, errorLabel); + } + + public deleteAttach(delteAttachReq: any, onError?: any, errorLabel?: string): Observable { + const request = delteAttachReq; + this.authService.authenticateRequest(request); + return this.con.post(EitService.deleteAttach, request, onError, errorLabel); + } + + public updateAttach(updateAttachReq: any, onError?: any, errorLabel?: string): Observable { + const request = updateAttachReq; + this.authService.authenticateRequest(request); + return this.con.post(EitService.updateAttach, request, onError, errorLabel); + } + } diff --git a/Mohem/src/app/hmg-common/services/common/common.service.ts b/Mohem/src/app/hmg-common/services/common/common.service.ts index 0ef1525f..17c20035 100644 --- a/Mohem/src/app/hmg-common/services/common/common.service.ts +++ b/Mohem/src/app/hmg-common/services/common/common.service.ts @@ -925,9 +925,6 @@ export class CommonService { public openConfirmEitPage() { this.nav.navigateForward(["/eit/confirm-add-eit"]); } - - - public openHome() { this.nav.navigateRoot(["/home"]); } @@ -958,6 +955,9 @@ export class CommonService { public openSubmitAbsencePage() { this.nav.navigateForward(["/absence/submit-absence"]); } + public openWorkListAttachViewPage() { + this.nav.navigateForward(["/notification/work-list-attach-view"]); + } public reload(url: string, from: string) { console.log("force reload called from:" + from); diff --git a/Mohem/src/app/notification/home/home.component.html b/Mohem/src/app/notification/home/home.component.html new file mode 100644 index 00000000..afc16a36 --- /dev/null +++ b/Mohem/src/app/notification/home/home.component.html @@ -0,0 +1,3 @@ +

+ home works! +

diff --git a/Mohem/src/app/notification/home/home.component.scss b/Mohem/src/app/notification/home/home.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/Mohem/src/app/notification/home/home.component.spec.ts b/Mohem/src/app/notification/home/home.component.spec.ts new file mode 100644 index 00000000..5ec1377b --- /dev/null +++ b/Mohem/src/app/notification/home/home.component.spec.ts @@ -0,0 +1,27 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeComponent } from './home.component'; + +describe('HomeComponent', () => { + let component: HomeComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ HomeComponent ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/notification/home/home.component.ts b/Mohem/src/app/notification/home/home.component.ts new file mode 100644 index 00000000..a7aad8ad --- /dev/null +++ b/Mohem/src/app/notification/home/home.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'], +}) +export class HomeComponent implements OnInit { + + constructor() { } + + ngOnInit() {} + +} diff --git a/Mohem/src/app/notification/notification.module.ts b/Mohem/src/app/notification/notification.module.ts new file mode 100644 index 00000000..3e7edeea --- /dev/null +++ b/Mohem/src/app/notification/notification.module.ts @@ -0,0 +1,44 @@ +import { HmgCommonModule } from './../hmg-common/hmg-common.module'; +import { WorkListAttachViewComponent } from './work-list-attach-view/work-list-attach-view.component'; +import { HomeComponent } from './home/home.component'; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { Routes, RouterModule } from '@angular/router'; +import { IonicModule } from '@ionic/angular'; +import { NotificationPage } from './notification.page'; +import { PdfViewerModule } from 'ng2-pdf-viewer'; + +const routes: Routes = [ + { + path: '', + component: NotificationPage, + children: [ + { + path: 'homepage', + component: HomeComponent + }, + { + path: 'work-list-attach-view', + component: WorkListAttachViewComponent + } + ] + } +]; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + HmgCommonModule, + PdfViewerModule, + RouterModule.forChild(routes) + ], + declarations: [ + NotificationPage, + HomeComponent, + WorkListAttachViewComponent + ] +}) +export class NotificationPageModule {} diff --git a/Mohem/src/app/notification/notification.page.html b/Mohem/src/app/notification/notification.page.html new file mode 100644 index 00000000..67cbe279 --- /dev/null +++ b/Mohem/src/app/notification/notification.page.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Mohem/src/app/notification/notification.page.scss b/Mohem/src/app/notification/notification.page.scss new file mode 100644 index 00000000..e69de29b diff --git a/Mohem/src/app/notification/notification.page.spec.ts b/Mohem/src/app/notification/notification.page.spec.ts new file mode 100644 index 00000000..5bb35a34 --- /dev/null +++ b/Mohem/src/app/notification/notification.page.spec.ts @@ -0,0 +1,27 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NotificationPage } from './notification.page'; + +describe('NotificationPage', () => { + let component: NotificationPage; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ NotificationPage ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(NotificationPage); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/notification/notification.page.ts b/Mohem/src/app/notification/notification.page.ts new file mode 100644 index 00000000..8289777e --- /dev/null +++ b/Mohem/src/app/notification/notification.page.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-notification', + templateUrl: './notification.page.html', + styleUrls: ['./notification.page.scss'], +}) +export class NotificationPage implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.html b/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.html new file mode 100644 index 00000000..59bda499 --- /dev/null +++ b/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.html @@ -0,0 +1,68 @@ + + + + {{'workListMain, suppDoc' | translate}} + + + + + + + + + + + + +
+ + + + + + + + +
+
+ Select Image +
+ +
+

+ +
+ +
+ + Choose a worksheet: + + +
+ + + +
+
+
+ + + + + {{val}} + + + +
+
+
\ No newline at end of file diff --git a/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.scss b/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.spec.ts b/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.spec.ts new file mode 100644 index 00000000..e30a031e --- /dev/null +++ b/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.spec.ts @@ -0,0 +1,27 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { WorkListAttachViewComponent } from './work-list-attach-view.component'; + +describe('WorkListAttachViewComponent', () => { + let component: WorkListAttachViewComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ WorkListAttachViewComponent ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(WorkListAttachViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.ts b/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.ts new file mode 100644 index 00000000..91ff7a92 --- /dev/null +++ b/Mohem/src/app/notification/work-list-attach-view/work-list-attach-view.component.ts @@ -0,0 +1,147 @@ +import { ModalController } from '@ionic/angular'; +import { CommonService } from 'src/app/hmg-common/services/common/common.service'; +import { Component, OnInit } from '@angular/core'; +import * as XLSX from 'xlsx'; +import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service'; + +type AOA = any[][]; +const ZOOM_STEP: number = 0.25; +const DEFAULT_ZOOM: number = 1; + +@Component({ + selector: 'app-work-list-attach-view', + templateUrl: './work-list-attach-view.component.html', + styleUrls: ['./work-list-attach-view.component.scss'], +}) +export class WorkListAttachViewComponent implements OnInit { + + displayPdf: string = ""; + displayImage: string = ""; + TypeData: string = ""; + displayData: string = ""; + decodedString: any; + displayxlsx: string = ""; + public pdfZoom: number = DEFAULT_ZOOM; + sheetNameList: any = []; + sheetDataList: any = []; + + data: any[][];//[[1,2,3],[4,5,6]]; + + constructor(private cs: CommonService, private ts: TranslatorService, private modalCtrl: ModalController) { + this.displayData = this.cs.sharedService.getSharedData('WorkListAttachViewPage', false).displayData; + this.TypeData = this.cs.sharedService.getSharedData('WorkListAttachViewPage', false).TypeData; + + if (this.TypeData == "png" || this.TypeData == "jpeg" || this.TypeData == "jpg" || this.TypeData == "PNG" || this.TypeData == "JPEG" || this.TypeData == "JPG") { + this.displayImage = 'data:image/' + this.TypeData + ';base64,' + this.displayData; + } + else if (this.TypeData == "pdf" || this.TypeData == "PDF") { + this.displayPdf = 'data:application/octet-stream;base64,' + this.displayData; + } + else if (this.TypeData == "txt") { + // + this.decodedString = atob(this.displayData); + // console.log("..."+ this.decodedString); + } + else if (this.TypeData == "xlx" || this.TypeData == "xlsx") { + this.displayxlsx = this.displayData; + var base64 = this.displayxlsx;//.split(";base64,") + var binary = ""; + var raw = window.atob(base64); + var rawLength = raw.length; + var array = new Uint8Array(new ArrayBuffer(rawLength)); + + for (let i = 0; i < rawLength; i++) { + array[i] = raw.charCodeAt(i); + } + + var length = array.byteLength; + for (let i = 0; i < length; i++) { + binary += String.fromCharCode(array[i]); + } + const wb: XLSX.WorkBook = XLSX.read(binary, { type: 'binary', cellDates: true }); + + /* grab first sheet */ + const wsname: string = wb.SheetNames[0]; + const ws: XLSX.WorkSheet = wb.Sheets[wsname]; + // if(ws["!type"]=="chart") + // { + // alert("chart"); + // } + // else alert("able"); + + this.data = (XLSX.utils.sheet_to_json(ws, { header: 1 })); + + // const wsname1: string = wb.SheetNames[1]; + // const ws1: XLSX.WorkSheet = wb.Sheets[wsname]; + // console.log("wsname..."+wsname); + // console.log("ws..."+ws); + /* save data */ + // this.data = (XLSX.utils.sheet_to_json(ws, {header: 1})); + // this.data = (XLSX.utils.sheet_to_json(ws1, {header: 1})); + + + for (let i = 0; i < wb.SheetNames.length; ++i) { + const sheetName = wb.SheetNames[i]; + const ws: XLSX.WorkSheet = wb.Sheets[sheetName]; + this.sheetNameList.push({ id: i, sheetName: sheetName }); + this.sheetDataList.push({ id: i, sheetData: ws }); + } + }//if file == xlx/s + else { + let msg: string = ""; + msg = this.ts.trPK("general", "notSupportFile"); + this.cs.presentAlert(msg); + } + } + + ngOnInit() { } + + public zoomIn() { + this.pdfZoom += ZOOM_STEP; + } + + public zoomOut() { + if (this.pdfZoom > DEFAULT_ZOOM) { + this.pdfZoom -= ZOOM_STEP; + } + } + + public resetZoom() { + this.pdfZoom = DEFAULT_ZOOM; + } + + onClose(): void { + this.modalCtrl.dismiss(); + } + + base64ToByteArray(base64String) { + try { + var sliceSize = 1024; + var byteCharacters = atob(base64String); + var bytesLength = byteCharacters.length; + var slicesCount = Math.ceil(bytesLength / sliceSize); + var byteArrays = new Array(slicesCount); + + for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { + var begin = sliceIndex * sliceSize; + var end = Math.min(begin + sliceSize, bytesLength); + + var bytes = new Array(end - begin); + for (var offset = begin, i = 0; offset < end; ++i, ++offset) { + bytes[i] = byteCharacters[offset].charCodeAt(0); + } + byteArrays[sliceIndex] = new Uint8Array(bytes); + } + return byteArrays; + } catch (e) { + //console.log("Couldn't convert to byte array: " + e); + return undefined; + } + } + + + openSheet(obj) { + this.data = (XLSX.utils.sheet_to_json(this.sheetDataList[obj.id].sheetData, { header: 1 })); + } + +} diff --git a/Mohem/src/app/uI-elements/date.input.ts b/Mohem/src/app/uI-elements/date.input.ts index 6bab87c5..9692b42a 100644 --- a/Mohem/src/app/uI-elements/date.input.ts +++ b/Mohem/src/app/uI-elements/date.input.ts @@ -41,7 +41,8 @@ export class DateInput extends UiElement { "" + " " + this.label + "" + // "
" + this.value + "
" + - "" + + // "" + + "" + // " "+ // " "+ // " "+ diff --git a/Mohem/src/assets/localization/i18n.json b/Mohem/src/assets/localization/i18n.json index f88752dc..6526e503 100644 --- a/Mohem/src/assets/localization/i18n.json +++ b/Mohem/src/assets/localization/i18n.json @@ -680,6 +680,26 @@ "attemptDel": { "en": "You are attempting to delete a row that has already been deleted.", "ar": "أنت تحاول حذف صف تم حذفه بالفعل." + }, + "noData": { + "en": "The are no requests", + "ar": "لا توجد طلبات" + }, + "noFileSelect": { + "en": "No file selected", + "ar": "لم يتم اختيار اي ملف" + }, + "notSupport": { + "en": "This file type can't be attached", + "ar": "لا يمكن إرفاق نوع الملف هذا" + }, + "notSupportFile": { + "en": "This file type is not supported", + "ar": "نوع الملف هذا غير مدعوم" + }, + "addAttach": { + "en": "Add Attachment", + "ar": "إضافة مرفق" } }, "home": { @@ -1104,6 +1124,26 @@ "update-title": { "en": "Update", "ar": "تحديث" + }, + "attach-errorMsg": { + "en": "Failed to upload some of the attached files", + "ar": "فشل تحميل بعض الملفات المرفقة" + }, + "approval-message-success": { + "en": "Your request has been submitted for approvals.", + "ar": "تم إرسال طلبك للحصول على الموافقات." + }, + "delete-perm": { + "en": "Are you sure from deleting this file permanently?", + "ar": "هل أنت متأكد من حذف هذا الملف نهائيًا؟" + }, + "attachUpdate": { + "en": "Attachment updated successfully", + "ar": "تحديث" + }, + "deleteAttach": { + "en": "Attachment deleted successfully", + "ar": "تحديث" } }, "submitAbsence": { @@ -1178,5 +1218,53 @@ "en":"Please select absence type", "ar":"اختر نوع الإجازة" } + }, + "confirmAddEit": { + "confirmAddEit": { + "en": "Confirm Add Eit", + "ar": "تأكيد" + }, + "start": { + "en": "Submit", + "ar": "تنفيذ" + }, + "cancel": { + "en": "Cancel", + "ar": "إلغاء" + }, + "no": { + "en": "No", + "ar": "رقم" + }, + "approver": { + "en": "Approver", + "ar": "الموافق" + }, + "status": { + "en": "Status", + "ar": "حاله" + }, + "approverCategory": { + "en": "Approver Category", + "ar": "فئة الموافقة" + }, + "approverType": { + "en": "Approver Type", + "ar": "نوع الموافقة" + }, + "comment": { + "en": "Comment", + "ar": "تعليق" + }, + "approverList": { + "en": "Approvers List", + "ar": "قائمة الموافقين" + } + }, + "workListMain": { + "suppDoc": { + "en": "Support Documents", + "ar": "مستندات الدعم" + } } } \ No newline at end of file