diff --git a/Mohem/install-plugins.bat b/Mohem/install-plugins.bat
index b7c27e78..20088fa5 100644
--- a/Mohem/install-plugins.bat
+++ b/Mohem/install-plugins.bat
@@ -137,6 +137,18 @@ call npm install @ionic-native/app-availability
call ionic cordova plugin add cordova-plugin-apprate
call npm install @ionic-native/app-rate
+@echo install file plugin
+call ionic cordova plugin add cordova-plugin-file
+call npm install @ionic-native/file
+
+@echo install filePath plugin
+call ionic cordova plugin add cordova-plugin-filepath
+call npm install @ionic-native/file-path
+
+@echo install Base64 plugin
+call ionic cordova plugin add com-badrit-base64
+call npm install @ionic-native/base64
+
@echo reinitializing git repository
@echo git init
@echo git remote add origin https://enas_yaghi@hmg.git.cloudforge.com/patientappionic.git
diff --git a/Mohem/package-lock.json b/Mohem/package-lock.json
index 73fb0606..0908127d 100644
--- a/Mohem/package-lock.json
+++ b/Mohem/package-lock.json
@@ -797,6 +797,21 @@
"@types/cordova": "^0.0.34"
}
},
+ "@ionic-native/base64": {
+ "version": "5.15.1",
+ "resolved": "https://registry.npmjs.org/@ionic-native/base64/-/base64-5.15.1.tgz",
+ "integrity": "sha512-VZs/n/5qJ1VwDQRvsJ4jWlWL6f+K21vFjX6EJJM6k2lZp6IbV9+N9oU5B/yjHX/SaVqJzAVge0tm0EIhLiWSHg==",
+ "requires": {
+ "@types/cordova": "^0.0.34"
+ },
+ "dependencies": {
+ "@types/cordova": {
+ "version": "0.0.34",
+ "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
+ "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
+ }
+ }
+ },
"@ionic-native/ble": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/ble/-/ble-5.8.0.tgz",
@@ -859,6 +874,36 @@
}
}
},
+ "@ionic-native/file": {
+ "version": "5.15.1",
+ "resolved": "https://registry.npmjs.org/@ionic-native/file/-/file-5.15.1.tgz",
+ "integrity": "sha512-/wGAefEQroNR+n9t01+tu47lHFrwSwlN5fs+YaFSW2yAFax7nuG9y2l047CAHZd9/4+SRKQjCgvrc4dtAaFYow==",
+ "requires": {
+ "@types/cordova": "^0.0.34"
+ },
+ "dependencies": {
+ "@types/cordova": {
+ "version": "0.0.34",
+ "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
+ "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
+ }
+ }
+ },
+ "@ionic-native/file-path": {
+ "version": "5.15.1",
+ "resolved": "https://registry.npmjs.org/@ionic-native/file-path/-/file-path-5.15.1.tgz",
+ "integrity": "sha512-pAVUPzRzvghV53CZBwWd5ZOSkcFPBJLywgrnx6xX50tIsfXUG1oSwYPDM3ZLHPUefl1mIcjziXLbmlDyOjCg0A==",
+ "requires": {
+ "@types/cordova": "^0.0.34"
+ },
+ "dependencies": {
+ "@types/cordova": {
+ "version": "0.0.34",
+ "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
+ "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
+ }
+ }
+ },
"@ionic-native/fingerprint-aio": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/fingerprint-aio/-/fingerprint-aio-5.8.0.tgz",
@@ -2875,6 +2920,11 @@
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
},
+ "com-badrit-base64": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/com-badrit-base64/-/com-badrit-base64-0.2.0.tgz",
+ "integrity": "sha1-u9hgM6oeGs/37kRqbIDIvUL03Tc="
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -4259,6 +4309,16 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.0.3.tgz",
"integrity": "sha512-Jb3V72btxf3XHpkPQsGdyc8N6tVBYn1vsxSFj43fIz9vonJDUThYPCJJHqk6PX6N4dJw6I4FjxkpfCR4LDYMlw=="
},
+ "cordova-plugin-file": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-6.0.2.tgz",
+ "integrity": "sha512-m7cughw327CjONN/qjzsTpSesLaeybksQh420/gRuSXJX5Zt9NfgsSbqqKDon6jnQ9Mm7h7imgyO2uJ34XMBtA=="
+ },
+ "cordova-plugin-filepath": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-filepath/-/cordova-plugin-filepath-1.5.6.tgz",
+ "integrity": "sha512-YvrnXfoq4hzruVXnKo2qAiWlJ6xqo9RWLycEOI13WAIb69pzVvvFHXLREv7otSXkTn2tugpHQWcopxnPPOvFtA=="
+ },
"cordova-plugin-geolocation": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-geolocation/-/cordova-plugin-geolocation-4.0.2.tgz",
@@ -7114,12 +7174,12 @@
"dev": true
},
"https-proxy-agent": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
- "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.3.tgz",
+ "integrity": "sha512-Ytgnz23gm2DVftnzqRRz2dOXZbGd2uiajSw/95bPp6v53zPRspQjLm/AfBgqbJ2qfeRXWIOMVLpp86+/5yX39Q==",
"dev": true,
"requires": {
- "agent-base": "^4.1.0",
+ "agent-base": "^4.3.0",
"debug": "^3.1.0"
},
"dependencies": {
diff --git a/Mohem/package.json b/Mohem/package.json
index 3025b3b2..3674ed31 100755
--- a/Mohem/package.json
+++ b/Mohem/package.json
@@ -27,12 +27,15 @@
"@ionic-native/background-geolocation": "^5.4.0",
"@ionic-native/badge": "^5.8.0",
"@ionic-native/barcode-scanner": "^5.14.0",
+ "@ionic-native/base64": "^5.15.1",
"@ionic-native/ble": "^5.8.0",
"@ionic-native/camera": "^5.14.0",
"@ionic-native/core": "^5.8.0",
"@ionic-native/date-picker": "^5.10.0",
"@ionic-native/device": "^5.8.0",
"@ionic-native/diagnostic": "^5.14.0",
+ "@ionic-native/file": "^5.15.1",
+ "@ionic-native/file-path": "^5.15.1",
"@ionic-native/fingerprint-aio": "^5.8.0",
"@ionic-native/geolocation": "^5.10.0",
"@ionic-native/globalization": "^5.8.0",
@@ -54,6 +57,7 @@
"angular-calendar": "^0.26.11",
"app": "0.1.0",
"chart.js": "^2.8.0",
+ "com-badrit-base64": "^0.2.0",
"cordova-android": "8.1.0",
"cordova-android-support-gradle-release": "^3.0.1",
"cordova-browser": "5.0.4",
@@ -64,6 +68,8 @@
"cordova-plugin-camera": "^4.1.0",
"cordova-plugin-datepicker": "^0.9.3",
"cordova-plugin-device": "^2.0.3",
+ "cordova-plugin-file": "^6.0.2",
+ "cordova-plugin-filepath": "^1.5.6",
"cordova-plugin-geolocation": "^4.0.2",
"cordova-plugin-globalization": "^1.11.0",
"cordova-plugin-ionic-keyboard": "^2.1.3",
@@ -143,7 +149,10 @@
"cordova-open-native-settings": {},
"cordova-plugin-camera": {
"ANDROID_SUPPORT_V4_VERSION": "27.+"
- }
+ },
+ "cordova-plugin-file": {},
+ "cordova-plugin-filepath": {},
+ "com-badrit-base64": {}
},
"platforms": [
"browser",
@@ -151,4 +160,4 @@
"android"
]
}
-}
\ No newline at end of file
+}
diff --git a/Mohem/src/app/app.component.html b/Mohem/src/app/app.component.html
index aa840934..42310a69 100644
--- a/Mohem/src/app/app.component.html
+++ b/Mohem/src/app/app.component.html
@@ -7,7 +7,9 @@
diff --git a/Mohem/src/app/app.component.ts b/Mohem/src/app/app.component.ts
index 9040df11..b1132673 100644
--- a/Mohem/src/app/app.component.ts
+++ b/Mohem/src/app/app.component.ts
@@ -9,6 +9,7 @@ import { KeyboardService } from "./hmg-common/services/keyboard/keyboard.service
import { SMSCheckResponse } from "src/app/hmg-common/services/authentication/models/smscheck.response";
import { LazyLoadingService } from "./hmg-common/services/lazy-loading/lazy-loading.service";
+import { DomSanitizer } from '@angular/platform-browser';
@Component({
selector: "app-root",
@@ -21,7 +22,7 @@ export class AppComponent implements OnInit, AfterViewInit {
start: any = false;
menuList: any = [];
User_name_Emp: string = "";
- user_image: string = "../assets/imgs/profile.png";
+ user_image: any = "../assets/imgs/profile.png";
menuSide: string = "left";
notBadge: number;
companyUrl: string = "../assets/imgs/CS.png";
@@ -36,7 +37,17 @@ export class AppComponent implements OnInit, AfterViewInit {
private keyboardService: KeyboardService,
private menu: MenuController,
private authService: AuthenticationService,
- ) {}
+ private sanitizer: DomSanitizer,
+
+ ) {
+ this.events.subscribe("img-change", displayImg => {
+ console.log("app compont: "+displayImg);
+ //this.user_image = "data:image/png;base64"+displayImg;
+ this.user_image = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+displayImg);
+
+ });
+
+ }
ngOnInit() {
this.initializeApp();
}
diff --git a/Mohem/src/app/app.module.ts b/Mohem/src/app/app.module.ts
index 1eb960c3..6b711832 100644
--- a/Mohem/src/app/app.module.ts
+++ b/Mohem/src/app/app.module.ts
@@ -11,8 +11,10 @@ import { AppRoutingModule } from './app-routing.module';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ZBar } from '@ionic-native/zbar/ngx';
import { Geolocation } from '@ionic-native/geolocation/ngx';
-
-
+import {Camera,CameraOptions,PictureSourceType} from'@ionic-native/Camera/ngx';
+import { FilePath } from "@ionic-native/file-path/ngx";
+import { File } from "@ionic-native/file/ngx";
+import { Base64 } from "@ionic-native/base64/ngx";
@NgModule({
declarations: [AppComponent],
entryComponents: [],
@@ -30,6 +32,10 @@ import { Geolocation } from '@ionic-native/geolocation/ngx';
SplashScreen,
ZBar,
Geolocation,
+ Camera,
+ File,
+ FilePath,
+ Base64,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]
diff --git a/Mohem/src/app/hmg-common/hmg-common.module.ts b/Mohem/src/app/hmg-common/hmg-common.module.ts
index e3e64734..575ea4b1 100644
--- a/Mohem/src/app/hmg-common/hmg-common.module.ts
+++ b/Mohem/src/app/hmg-common/hmg-common.module.ts
@@ -94,6 +94,9 @@ import { ReplacementListComponent } from '../vacation-rule/replacement-list/repl
import { FileSelectDirective } from 'ng2-file-upload';
import { PdfViewerModule } from 'ng2-pdf-viewer';
import { WorkListAttachViewComponent } from '../notification/work-list-attach-view/work-list-attach-view.component';
+import {Camera,CameraOptions, PictureSourceType} from '@ionic-native/Camera/ngx';
+import {File} from '@ionic-native/file/ngx';
+import {FileUploderProfileComponent} from './ui/file-uploder-profile/file-uploder-profile.component'
import { OpenNativeSettings } from '@ionic-native/open-native-settings/ngx';
@NgModule({
@@ -158,7 +161,8 @@ import { OpenNativeSettings } from '@ionic-native/open-native-settings/ngx';
//PaymentComponent,
ReplacementListComponent,
FileSelectDirective,
- WorkListAttachViewComponent
+ WorkListAttachViewComponent,
+ FileUploderProfileComponent
],
exports: [
NumberRangeComponent,
@@ -208,7 +212,8 @@ import { OpenNativeSettings } from '@ionic-native/open-native-settings/ngx';
//PaymentComponent,
ReplacementListComponent,
FileSelectDirective,
- WorkListAttachViewComponent
+ WorkListAttachViewComponent,
+ FileUploderProfileComponent
],
providers: [
ConnectorService,
@@ -245,6 +250,8 @@ import { OpenNativeSettings } from '@ionic-native/open-native-settings/ngx';
RatingService,
InAppBrowser,
RateService,
+ Camera,
+ File,
//PaymentService,
MenuService,
OpenNativeSettings
diff --git a/Mohem/src/app/hmg-common/services/authentication/models/authenticated-user.ts b/Mohem/src/app/hmg-common/services/authentication/models/authenticated-user.ts
index fd842744..76d05310 100644
--- a/Mohem/src/app/hmg-common/services/authentication/models/authenticated-user.ts
+++ b/Mohem/src/app/hmg-common/services/authentication/models/authenticated-user.ts
@@ -2,6 +2,7 @@ import { PatientUserModel } from './PatientUserModel';
import { TestBed } from '@angular/core/testing';
export class AuthenticatedUser extends PatientUserModel {
+public static SHARED_DATA = 'user-info';
TokenID:string;
ACTUAL_TERMINATION_DATE: string;
ASSIGNMENT_END_DATE: string;
@@ -75,6 +76,7 @@ USER_STATUS: string;
P_SESSION_ID:number;
MobileNumber:string;
LogInTokenID:string;
-CompanyImageDescription: string
-CompanyImageURL: string
+CompanyImageDescription: string;
+CompanyImageURL: string;
+
}
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 6f917c85..980f5c5a 100644
--- a/Mohem/src/app/hmg-common/services/common/common.service.ts
+++ b/Mohem/src/app/hmg-common/services/common/common.service.ts
@@ -77,6 +77,8 @@ export class CommonService {
private progressLoaders: any[] = [];
private loadingProgress: any;
+ public updateImage:boolean=false;
+ public setUpdateImg:any;
constructor(
public nav: NavController,
public router: Router,
@@ -1001,6 +1003,10 @@ export class CommonService {
public openMySubordinatePage() {
this.nav.navigateForward(["/my-subordinate/home"]);
}
+
+ public openChangeImagePage() {
+ this.nav.navigateForward(["/profile/profileImg"]);
+ }
public reload(url: string, from: string) {
console.log("force reload called from:" + from);
// window.location.reload();
@@ -1182,4 +1188,21 @@ export class CommonService {
}
return FormatedDate;
}
+
+ public setUpdateImage (image){
+ console.log("setUpdateImage");
+ this.setUpdateImg=image;
+ this.updateImage=true;
+ }
+ public getUpdateImage(){
+ console.log("getUpdateImage");
+ const objImg={
+ img: this.setUpdateImg,
+ status: this.updateImage
+ }
+ return objImg;
+
+ }
+
+
}
diff --git a/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.html b/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.html
new file mode 100644
index 00000000..4cabc97c
--- /dev/null
+++ b/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.html
@@ -0,0 +1,18 @@
+
+
+
+ {{'userProfile,changeImg' | translate}}
+
+
+
+
+
+
+
+
+
+
{{data.name}}
+ ![]()
+
+
+
diff --git a/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.scss b/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.scss
new file mode 100644
index 00000000..e3f037ce
--- /dev/null
+++ b/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.scss
@@ -0,0 +1,20 @@
+ //test
+ .changeImgBtn{
+ margin: 0;
+ position: absolute;
+ top: 80%;
+ left: 53%;
+ -ms-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ }
+ .btnImge{
+ button{
+ border-color:transparent !important;
+ }
+ }
+//test
+ .changeIcon{
+ background: #19a163;
+ width: 15px;
+ height: 15px;
+ }
\ No newline at end of file
diff --git a/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.spec.ts b/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.spec.ts
new file mode 100644
index 00000000..8fb62b1b
--- /dev/null
+++ b/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.spec.ts
@@ -0,0 +1,27 @@
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { FileUploderProfileComponent } from './file-uploder-profile.component';
+
+describe('FileUploderProfileComponent', () => {
+ let component: FileUploderProfileComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ FileUploderProfileComponent ],
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(FileUploderProfileComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.ts b/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.ts
new file mode 100644
index 00000000..4a17f31b
--- /dev/null
+++ b/Mohem/src/app/hmg-common/ui/file-uploder-profile/file-uploder-profile.component.ts
@@ -0,0 +1,169 @@
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { ActionSheetController,Events, NavController } from '@ionic/angular';
+import {CameraOptions,Camera,PictureSourceType} from '@ionic-native/Camera/ngx';
+// import { FileChooser } from '@ionic-native/file-chooser';
+import { FilePath } from "@ionic-native/file-path/ngx";
+import { File } from "@ionic-native/file/ngx";
+import { TranslatorService } from '../../services/translator/translator.service';
+import { Base64 } from "@ionic-native/base64/ngx";
+// import { Chooser } from '@ionic-native/chooser';
+
+@Component({
+ selector: 'app-file-uploder-profile',
+ templateUrl: './file-uploder-profile.component.html',
+ styleUrls: ['./file-uploder-profile.component.scss'],
+})
+export class FileUploderProfileComponent implements OnInit {
+
+ @Input() multiupload = false;
+ @Input() attachmentname = 'attachment-loader';
+ public attachmentData: string;
+ @Input() maxFileSize = 10 * 1024 * 1024;
+ @Output() fileSelected = new EventEmitter();
+ @Output() onimgLoad = new EventEmitter();
+ public image: string;
+ public attachmentImg = 'assets/icon/attachment.png';
+ public deleteImg = 'assets/icon/delete.png';
+ public selectedImage:any;
+ public nativePath: any;
+ public errorMsg:any;
+ public allowdType: any = ["jpg", "jpeg", "png"];
+
+ constructor(
+ public cameraController:Camera,
+ public actionSheetCtrl:ActionSheetController,
+ public event:Events,
+ public nav: NavController,
+ private filePath: FilePath,
+ // public FileChooser:FileChooser,
+ private file: File,
+ public ts: TranslatorService,
+ public base64:Base64,
+ // private chooser: Chooser
+
+
+ ) { }
+
+ ngOnInit() {
+
+ }
+
+ @Input() set src(src: string) {
+ this.image = src;
+ }
+ get src(): string {
+ return this.image;
+ }
+
+ //open the presentsheet
+ //selected attach
+ //need convert
+ //insert or display
+ async openFile(){
+ const actionSheet = await this.actionSheetCtrl.create({
+ header: 'Change Profile Photo',
+ buttons: [{
+ text: 'Delete Current Image',
+ role: 'destructive',
+ icon: 'trash',
+ handler: () => {
+ console.log('Delete clicked');
+ }
+ }, {
+ text: 'Take Photo',
+ icon: 'camera',
+ handler: () => {
+ console.log('Take Photo');
+ this.takePicture(this.cameraController.PictureSourceType.CAMERA);
+
+ }
+ }, {
+
+ text: 'Choose from Library',
+ icon: 'images',
+ handler: () => {
+ console.log('Favorite clicked');
+ this.takePicture(this.cameraController.PictureSourceType.PHOTOLIBRARY);
+
+ }
+ }, {
+ text: 'Cancel',
+ icon: 'close',
+ role: 'cancel',
+ handler: () => {
+ console.log('Cancel clicked');
+ }
+ }]
+ });
+ await actionSheet.present();
+ }
+
+ public takePicture(sourceType: PictureSourceType) {
+ console.log("sourceType: "+sourceType);
+ const options: CameraOptions = {
+ quality: 50,
+ destinationType: this.cameraController.DestinationType.DATA_URL,
+ encodingType: this.cameraController.EncodingType.JPEG,
+ sourceType: sourceType,
+ correctOrientation:true,
+ targetWidth: 512,
+ targetHeight: 512
+ };
+
+
+ this.cameraController.getPicture(options).then(imageData => {
+ const data = "data:image/jpeg;base64," + imageData;
+ this.event.publish('Image', {message:"hello"});
+ this.selectedImage = "data:image/jpeg;base64, " + imageData;
+ this.onimgLoad.emit(this.selectedImage);
+ });
+
+ }
+
+ public deleteCurrent(){
+ // send empty image
+ //this.onimgLoad.emit("");
+
+ }
+
+ readFile(fileUrl: any) {
+ this.filePath.resolveNativePath(fileUrl).then(filePathResult => {
+ this.nativePath = filePathResult;
+ this.file.resolveLocalFilesystemUrl(this.nativePath).then(entry => {
+ entry.getMetadata(metadata => {
+ if (metadata.size <= this.maxFileSize) {
+ this.errorMsg = null;
+ this.encodeFiles(entry);
+ } else {
+ this.errorMsg = this.ts.trPK("general", "large-file");
+ }
+ });
+ });
+ });
+ }
+
+ encodeFiles(entry) {
+
+ this.base64.encodeFile(this.nativePath).then(
+ (base64File: string) => {
+
+ const type = this.nativePath.substr(
+ this.nativePath.lastIndexOf(".") + 1
+ );
+
+ console.log("base64File 1" + base64File);
+
+ if (this.allowdType.includes(type.toLowerCase())) {
+ } else {
+ this.attachmentData = null;
+ this.errorMsg = this.ts.trPK("general", "not-supported");
+ }
+ },
+ err => {
+ console.log(err);
+ }
+ );
+ }
+
+
+}
diff --git a/Mohem/src/app/home/home.page.html b/Mohem/src/app/home/home.page.html
index ad69c875..917b961e 100644
--- a/Mohem/src/app/home/home.page.html
+++ b/Mohem/src/app/home/home.page.html
@@ -13,7 +13,24 @@
{{ts.trPK('home','hello')}}, {{userData.EMPLOYEE_DISPLAY_NAME}}
-
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Mohem/src/app/home/home.page.scss b/Mohem/src/app/home/home.page.scss
index ff6ff455..d595c8a9 100644
--- a/Mohem/src/app/home/home.page.scss
+++ b/Mohem/src/app/home/home.page.scss
@@ -98,4 +98,19 @@ top: 40px;
-moz-box-shadow: none;
border: 2px solid var(--gray);
min-width: auto;
- }
\ No newline at end of file
+ }
+ //test
+ .changeImgBtn{
+ margin: 0;
+ position: absolute;
+ top: 80%;
+ left: 53%;
+ -ms-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ }
+//test
+ .changeIcon{
+ background: #19a163;
+ width: 15px;
+ height: 15px;
+ }
diff --git a/Mohem/src/app/home/home.page.ts b/Mohem/src/app/home/home.page.ts
index d6ea2479..e248574f 100644
--- a/Mohem/src/app/home/home.page.ts
+++ b/Mohem/src/app/home/home.page.ts
@@ -1,7 +1,7 @@
import { EitService } from "./../eit/services/eit.service";
import { Component, OnInit } from "@angular/core";
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
-import { MenuController, Events } from "@ionic/angular";
+import { MenuController, Events, ActionSheetController } from "@ionic/angular";
import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
import { AuthenticatedUser } from "src/app/hmg-common/services/authentication/models/authenticated-user";
import { MenuService } from "src/app/hmg-common/services/menu/menuservice.service";
@@ -15,6 +15,15 @@ import { attendanceSwipeScannerRequest } from "./models/attendanceSwipe.Request"
import { Response } from "src/app/hmg-common/services/models/response";
import { AttendanceService } from "./services/attendance.services";
import { LoginRequest } from "../hmg-common/services/authentication/models/login.request";
+import {FileUploaderComponent} from '../hmg-common/ui/file-uploader/file-uploader.component'
+import { Camera, CameraOptions,PictureSourceType} from "@ionic-native/Camera/ngx";
+//import { FileChooser } from "@ionic-native/file-chooser/ngx";
+import { File } from "@ionic-native/file/ngx";
+import { DomSanitizer } from '@angular/platform-browser';
+//import { FilePath } from "@ionic-native/file-path/ngx";
+//import { Base64 } from "@ionic-native/base64/ngx";
+import {FileUploderProfileComponent} from '../hmg-common/ui/file-uploder-profile/file-uploder-profile.component'
+import { SharedDataService } from '../hmg-common/services/shared-data-service/shared-data.service';
import { DevicePermissionsService } from '../hmg-common/services/device-permissions/device-permissions.service';
@Component({
@@ -32,6 +41,9 @@ export class HomePage implements OnInit {
lat: any;
longt: any;
deviceID: string;
+ public maxFileSize =10 * 1024 * 1024;
+ public fileUploder :FileUploaderComponent;
+ // public fileUploderProfile:FileUploderProfileComponent
location: boolean;
camera: boolean
constructor(
@@ -47,15 +59,34 @@ export class HomePage implements OnInit {
private attendance_service: AttendanceService,
private eitService: EitService,
private barcodeScanner: BarcodeScanner,
+ public actionSheetCtrl: ActionSheetController,
+ private cameraController: Camera,
+ public sharedData: SharedDataService,
+ private sanitizer: DomSanitizer,
+ //private transfer: Transfer,
+ private file: File,
+ //private filePath: FilePath
private permissions: DevicePermissionsService
- ) { }
+ ) {
+ this.events.subscribe("img-change", displayImg => {
+
+ // this.user_image = "data:image/jpeg;base64"+displayImg;
+ // alert("home app: ");
+ this.user_image = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+displayImg);
+ console.log("html saved img: "+this.user_image);
+ });
+ }
+
+
ngOnInit() {
this.getUserDetails();
this.getMenu();
this.setServicesPrivilage();
this.getCount();
+
+
this.events.subscribe("getNotCount", badge => {
this.notBadge = badge;
});
@@ -137,6 +168,8 @@ export class HomePage implements OnInit {
// }
ionViewDidLoad() {
+ this.getUserDetails();
+ console.log("getUserDetails");
this.geolocation
.getCurrentPosition()
.then(resp => {
@@ -162,6 +195,8 @@ export class HomePage implements OnInit {
if (user) {
this.events.publish("setMenu");
this.userData = user;
+ //set User Info
+ this.sharedData.setSharedData(this.userData, AuthenticatedUser.SHARED_DATA);
this.user_image = user.EMPLOYEE_IMAGE
? "data:image/png;base64," + user.EMPLOYEE_IMAGE
: this.user_image;
@@ -189,6 +224,11 @@ export class HomePage implements OnInit {
private accrualBalance() {
this.common.openAccuralPage();
}
+
+ private changeImage() {
+ this.common.openChangeImagePage();
+ }
+
public getMeunDetails(index) {
let item = this.menuList[index];
let selMenu: MenuResponse = new MenuResponse();
diff --git a/Mohem/src/app/profile/home/home.component.ts b/Mohem/src/app/profile/home/home.component.ts
index f5e10adf..52e10d4d 100644
--- a/Mohem/src/app/profile/home/home.component.ts
+++ b/Mohem/src/app/profile/home/home.component.ts
@@ -3,6 +3,8 @@ import { CommonService } from "src/app/hmg-common/services/common/common.service
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
import { AuthenticatedUser } from "src/app/hmg-common/services/authentication/models/authenticated-user";
+import { Events } from "@ionic/angular";
+import { DomSanitizer } from '@angular/platform-browser';
@Component({
selector: "app-home",
templateUrl: "./home.component.html",
@@ -10,12 +12,28 @@ import { AuthenticatedUser } from "src/app/hmg-common/services/authentication/mo
})
export class HomeComponent implements OnInit {
personalInfo: any;
- imageSrc: string = "../assets/imgs/profile.png";
+ setImage:any;
+ imageSrc: any = "../assets/imgs/profile.png";
constructor(
public ts: TranslatorService,
public cs: CommonService,
- public authService: AuthenticationService
- ) {}
+ public authService: AuthenticationService,
+ private events: Events,
+ private sanitizer: DomSanitizer,
+
+
+ ) {
+
+ this.events.subscribe("img-change", displayImg => {
+ // alert("1 - profile home : "+displayImg);
+ //this.user_image = "data:image/png;base64"+displayImg;
+ this.setImage = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+displayImg);
+ this.imageSrc = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+displayImg);
+
+ });
+
+
+ }
ngOnInit() {
this.getProfile();
@@ -26,12 +44,19 @@ export class HomeComponent implements OnInit {
.subscribe((user: AuthenticatedUser) => {
if (user) {
this.personalInfo = user;
+ if(this.cs.getUpdateImage().status){
+ // this.imageSrc = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+this.cs.getUpdateImage().img);
+ this.imageSrc = "data:image/png;base64,"+this.cs.getUpdateImage().img;
+ // alert("this.imageSrc"+ this.imageSrc);
+ }else{
this.imageSrc = user.EMPLOYEE_IMAGE
? "data:image/png;base64," + user.EMPLOYEE_IMAGE
: this.imageSrc;
- console.log(user);
- } else {
- console.log(user);
+ console.log("2-"+user);
+ }
+ }
+ else {
+ console.log("3-"+user);
}
});
}
diff --git a/Mohem/src/app/profile/profile-image/profile-image.component.html b/Mohem/src/app/profile/profile-image/profile-image.component.html
new file mode 100644
index 00000000..0544d51b
--- /dev/null
+++ b/Mohem/src/app/profile/profile-image/profile-image.component.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Mohem/src/app/profile/profile-image/profile-image.component.scss b/Mohem/src/app/profile/profile-image/profile-image.component.scss
new file mode 100644
index 00000000..b5280fee
--- /dev/null
+++ b/Mohem/src/app/profile/profile-image/profile-image.component.scss
@@ -0,0 +1,47 @@
+// .imgCircle{
+// height: 30vh;
+// width: 30vh;
+// margin: auto;
+// display: block;
+// // background: red;
+// overflow: hidden;
+// background: transparent;
+// border-radius: 50% !important;
+// }
+
+
+.imgCircle{
+// width: 90px;
+// height: 90px;
+// display: inline-flex;
+// overflow: hidden;
+// background: transparent;
+// -webkit-border-radius:50% !important;
+// -moz-border-radius:50% !important;
+// border-radius: 50% !important;
+// // margin:0 auto 40px;
+
+position: relative;
+width: 400px;
+height: 400px;
+ margin: auto;
+ display: block;
+ // background: red;
+ overflow: hidden;
+ background: transparent;
+ border-radius: 50% !important;
+ color:#fff;
+ background-color: rgba(0,0,0,0.1);
+ box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
+
+ img{
+ -webkit-border-radius:50% !important;
+ -moz-border-radius:50% !important;
+ border-radius: 50% !important;
+ height: auto !important;
+ width: 70% !important;
+ }
+ //box-shadow: 0px 0px 0px 10px #8c8c8c;
+
+
+}
\ No newline at end of file
diff --git a/Mohem/src/app/profile/profile-image/profile-image.component.spec.ts b/Mohem/src/app/profile/profile-image/profile-image.component.spec.ts
new file mode 100644
index 00000000..58925904
--- /dev/null
+++ b/Mohem/src/app/profile/profile-image/profile-image.component.spec.ts
@@ -0,0 +1,27 @@
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ProfileImageComponent } from './profile-image.component';
+
+describe('ProfileImageComponent', () => {
+ let component: ProfileImageComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ ProfileImageComponent ],
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ProfileImageComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/Mohem/src/app/profile/profile-image/profile-image.component.ts b/Mohem/src/app/profile/profile-image/profile-image.component.ts
new file mode 100644
index 00000000..e62cb912
--- /dev/null
+++ b/Mohem/src/app/profile/profile-image/profile-image.component.ts
@@ -0,0 +1,87 @@
+import { Component, OnInit } from '@angular/core';
+import { CommonService } from 'src/app/hmg-common/services/common/common.service';
+import { AuthenticatedUser } from "src/app/hmg-common/services/authentication/models/authenticated-user";
+import { TranslatorService } from 'src/app/hmg-common/services/translator/translator.service';
+import { Events } from '@ionic/angular';
+import {ProfileService} from '../service/profile.service'
+import { DomSanitizer } from '@angular/platform-browser';
+@Component({
+ selector: 'app-profile-image',
+ templateUrl: './profile-image.component.html',
+ styleUrls: ['./profile-image.component.scss'],
+})
+export class ProfileImageComponent implements OnInit {
+public userData:AuthenticatedUser;
+//public src ="../assets/imgs/HMG.png";
+public src :any ="";
+public oldImage="";
+public displayImg="";
+public saveChange:any="";
+public setImage:any;
+// public Imge:"C:\Users\ashwaq.jaafar\Desktop\mohemmionic5\Mohem\src\assets\imgs\HMG.png";
+ constructor(
+ public common:CommonService,
+ public ts: TranslatorService,
+ public event:Events,
+ public profileService:ProfileService,
+ private sanitizer: DomSanitizer,
+
+ ) {
+
+ this.userData =this.common.sharedService.getSharedData(AuthenticatedUser.SHARED_DATA,false);
+
+
+ this.event.subscribe("img-change", displayImg => {
+ // this.user_image = "data:image/jpeg;base64"+displayImg;
+ console.log("change profile photo" +displayImg);
+ this.src = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+displayImg);
+ });
+ }
+ showImg(event){
+ console.log("selected profile "+event);
+ this.saveChange=event;
+ this.src=event;
+ }
+ ngOnInit() {
+ // get passing image
+ console.log("ngOnInit change profile");
+ if(this.common.getUpdateImage().status){
+ // this.imageSrc = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+this.cs.getUpdateImage().img);
+ this.src = "data:image/png;base64,"+this.common.getUpdateImage().img;
+ console.log("this.imageSrc"+ this.src);
+ }else{
+
+ this.src= "data:image/png;base64," + this.userData.EMPLOYEE_IMAGE;
+ this.oldImage =this.src;
+
+ }
+}
+
+ updateImageProfile(){
+ console.log("update");
+ const srcImge=this.src.split(',')[1];
+ this.displayImg=srcImge
+ console.log("gallery srcImge" + srcImge);
+ const body = {
+ P_IMAGE: srcImge,
+ };
+ this.profileService.updateImageProfile(body).subscribe((result:any) =>
+ { this.handleUpdateImageProfileResult(result);
+ }
+ )
+
+
+ }
+
+ handleUpdateImageProfileResult(result) {
+ if (this.common.validResponse(result)) {
+ this.common.setUpdateImage(this.displayImg);
+ this.event.publish('img-change', this.displayImg);
+ let msg: string = this.ts.trPK("userProfile", "successChange");
+ this.common.presentAlert(msg);
+ this.common.back();
+
+ } // valid it
+ }// End handleWorkListButtonsResult
+
+}
diff --git a/Mohem/src/app/profile/profile.module.ts b/Mohem/src/app/profile/profile.module.ts
index 6688ce80..d18c2b78 100644
--- a/Mohem/src/app/profile/profile.module.ts
+++ b/Mohem/src/app/profile/profile.module.ts
@@ -2,11 +2,13 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
+import { HmgCommonModule } from '../hmg-common/hmg-common.module';
import { IonicModule } from '@ionic/angular';
import { ProfilePage } from './profile.page';
import { HomeComponent } from './home/home.component';
+import {ProfileImageComponent} from './profile-image/profile-image.component'
const routes: Routes = [
{
path: '',
@@ -17,6 +19,16 @@ const routes: Routes = [
component: HomeComponent
}
],
+ },
+ {
+ path: '',
+ component: ProfilePage,
+ children: [
+ {
+ path: 'profileImg',
+ component: ProfileImageComponent
+ }
+ ],
}
];
@@ -25,8 +37,9 @@ const routes: Routes = [
CommonModule,
FormsModule,
IonicModule,
+ HmgCommonModule,
RouterModule.forChild(routes)
],
- declarations: [ProfilePage , HomeComponent]
+ declarations: [ProfilePage , HomeComponent,ProfileImageComponent]
})
export class ProfilePageModule {}
diff --git a/Mohem/src/app/profile/service/profile.service.ts b/Mohem/src/app/profile/service/profile.service.ts
new file mode 100644
index 00000000..ce94bf0a
--- /dev/null
+++ b/Mohem/src/app/profile/service/profile.service.ts
@@ -0,0 +1,27 @@
+import { Injectable } from '@angular/core';
+import { Observable } from "rxjs";
+import { ConnectorService } from 'src/app/hmg-common/services/connector/connector.service';
+import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
+@Injectable({
+ providedIn: 'root'
+})
+export class ProfileService {
+ public static updateEmpImage ="Services/ERP.svc/REST/UPDATE_EMPLOYEE_IMAGE";
+ constructor(
+ public api: ConnectorService,
+ public authService: AuthenticationService
+ ) {}
+
+ public updateImageProfile( updateImgRequest: any,onError?: any,errorLabel?: string
+ ): Observable {
+ console.log("services");
+ const request = updateImgRequest;
+ this.authService.authenticateRequest(request);
+ return this.api.post(
+ ProfileService.updateEmpImage,
+ request,
+ onError,
+ errorLabel
+ );
+ }
+}
\ No newline at end of file
diff --git a/Mohem/src/assets/localization/i18n.json b/Mohem/src/assets/localization/i18n.json
index 249e0a44..4b18e08b 100644
--- a/Mohem/src/assets/localization/i18n.json
+++ b/Mohem/src/assets/localization/i18n.json
@@ -868,6 +868,14 @@
"category": {
"en": "Category",
"ar": "الفئة"
+ },
+ "changeImg":{
+ "en":"Change Profile Photo",
+ "ar":"تغيير الصورة"
+ },
+ "successChange":{
+ "en":"Profile Photo changed successfully ",
+ "ar": "تم تغيير الصورة الشخصية بنجاح"
}
},
"changePassword": {