Advertisement
Guest User

Untitled

a guest
Aug 1st, 2018
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.29 KB | None | 0 0
  1. import { HttpClient, HttpHeaders } from '@angular/common/http';
  2. import { Injectable } from '@angular/core';
  3. import { Platform, Config, LoadingController, Loading } from 'ionic-angular';
  4. import { UrlEnvironment } from '../service/urlEnvironment';
  5. import { UserProfileService } from '../service/userProfileService';
  6. // import { EmptyObservable } from 'rxjs/Observable';
  7. import 'rxjs/add/operator/catch';
  8. import 'rxjs/add/operator/map'
  9. import * as firebase from 'firebase/app';
  10. import '@firebase/messaging';
  11. import { AngularFireAuth } from 'angularfire2/auth';
  12. import { FirebaseIdToken } from '../pojo/firebaseIdToken';
  13. import { ContractorCertificates } from '../pojo/contractorCertificates';
  14. import { ToastController } from 'ionic-angular';
  15. // import { ErrorObservable } from 'rxjs/';
  16. import { Observable } from 'rxjs';
  17. import { SaveJobPojoInterface } from '../pojo/saveJobPojoInterface';
  18. import { DateTimeInterface } from '../pojo/dateTimeInterface';
  19. import { StripeBankPojo } from '../pojo/stripeBankPojo';
  20. // import { EmptyObservable } from 'rxjs/observable/EmptyObservable';
  21. // import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
  22. // import { empty } from 'rxjs/observable/empty';
  23. import { creditCardInterface } from '../pojo/creditCardInterface';
  24. import { CoordinatesXY } from '../pojo/coordinateXY';
  25. // import { FCM } from '@ionic-native/fcm';
  26. import { Firebase } from '@ionic-native/firebase';
  27. import 'rxjs/add/operator/map';
  28.  
  29. declare var Stripe: any;
  30.  
  31. @Injectable()
  32. export class ContractorService {
  33.  
  34. // public userProfile: UserProfileProvider;
  35. public loading: Loading;
  36. public uid: string;
  37. public idToken: string;
  38. public email: string;
  39. private appName = this.config.get('appName');
  40. private appContra = this.config.get('appName') == 'contractor' ? true : false;
  41. public appContractor: string = 'contractor';
  42. private readonly googleMapsApi = "AIzaSyCamwzln1uomIwJhNl_9ingqGYolUR3wyc";
  43.  
  44. private readonly vapidKey = "BNsAFAIfl4pZECCtvaM8zCtpK-caM2r0KNkqgrme121nSjMPVp2ZXg578dNA-0xDTX1kQIG2BEtYViYSFAAZVys";
  45.  
  46. constructor(public http: HttpClient
  47. , public platform: Platform
  48. , public config: Config
  49. , public loadingCtrl: LoadingController
  50. , public afAuth: AngularFireAuth
  51. , public toastCtrl: ToastController
  52. , public userProfile: UserProfileService
  53. , public fcm: Firebase
  54. , public urlEnvironment: UrlEnvironment) {
  55.  
  56. // Token for login
  57. firebase.auth().onIdTokenChanged((user: firebase.User) => {
  58. console.log("onIdTokenChanged");
  59. if (user && user.uid) {
  60. user.getIdToken(false)
  61. .then((data: any) => {
  62. this.idToken = data;
  63. });
  64. }
  65. });
  66.  
  67. // Token for push to the phone.
  68. if (this.platform.is('cordova') && this.platform.ready()) {
  69. setTimeout(() => {
  70. this.fcm.onTokenRefresh()
  71. .subscribe((token: any) => {
  72. console.log("token onTokenRefresh: ", token);
  73. this.saveToken(token, null);
  74. });
  75. }, 1000);
  76. }
  77.  
  78. }
  79.  
  80. //-----------------------------------------------------JobBoard----------------------------------------------------
  81.  
  82. public saveJobBoard(singleFieldPojo: SaveJobPojoInterface): Observable<any> {
  83. singleFieldPojo.uid = this.uid;
  84. console.log("saveJobPojo: ", singleFieldPojo);
  85. let objectToSend = {
  86. singleFieldPojo: singleFieldPojo
  87. }
  88. console.log("saveJobBoard, objectToSend: ", objectToSend);
  89. return this.http.post(this.urlEnvironment.saveJobBoard(), singleFieldPojo, this.getHeaders());
  90. }
  91.  
  92. public block(contractorUid: String): Observable<any> {
  93. let objectToSend = {
  94. contractorUid: contractorUid,
  95. consumerUid: this.uid
  96. }
  97. console.log("saveJobBoard, objectToSend: ", objectToSend);
  98. return this.http.post(this.urlEnvironment.block(), objectToSend, this.getHeaders());
  99. }
  100.  
  101. public test(): Observable<any> {
  102. return this.http.post(this.urlEnvironment.test(), null, this.getHeaders());
  103. }
  104.  
  105. public getPostedJobs(userProfile: UserProfileService): Observable<any> {
  106. // return this.http.post(this.urlEnvironment.getPostedJobs(), userProfile);
  107. return;
  108. }
  109.  
  110. public checkJobStatus(): Observable<any> {
  111. return this.http.get(this.urlEnvironment.getJobStatus());
  112. }
  113.  
  114. public updateJobStatus(jobBoardId: string, jobStatus: string, contractorUid: string): Observable<any> {
  115. let objectToSend = {
  116. jobBoardId: jobBoardId,
  117. jobStatus: jobStatus,
  118. contractorUid: contractorUid
  119. }
  120. console.log("objectToSend: ", objectToSend);
  121. return this.http.post(this.urlEnvironment.updateJobStatus(), objectToSend, this.getHeaders());
  122. }
  123.  
  124. public getContractorJobs(): Observable<any> {
  125. // console.log("uid: ", this.uid);
  126. if (this.appContractor == this.getAppName()) {
  127. let objectToSend = {
  128. uid: this.uid
  129. }
  130. return this.http.post(this.urlEnvironment.getContractorJobs(), objectToSend, this.getHeaders());
  131. } else {
  132. return;
  133. }
  134. }
  135.  
  136. private getHeaders(): any {
  137. // console.log("this.idToken: ", this.idToken);
  138. if (this.idToken != null) {
  139. const httpOptions = {
  140. headers: new HttpHeaders({
  141. 'Content-Type': 'application/json',
  142. 'Authorization': this.idToken
  143. })
  144. };
  145. return httpOptions;
  146. }
  147. }
  148.  
  149. public getJobBoard(): Observable<any> {
  150. let objectToSend = {
  151. uid: this.uid,
  152. contractor: false
  153. }
  154. if (this.appName == this.appContractor) {
  155. objectToSend.contractor = true;
  156. }
  157. return this.http.post(this.urlEnvironment.getJobBoard(), objectToSend, this.getHeaders());
  158. }
  159.  
  160. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  161.  
  162. //-----------------------------------------------------Contractor favorites -------------------------------------------------------------
  163.  
  164. public addToFavorites(contractorUid: string): Observable<any> {
  165. let objectToSend = {
  166. consumerUid: this.uid,
  167. contractorUid: contractorUid,
  168. contractor: false
  169. }
  170. if (this.appName == this.appContractor) {
  171. objectToSend.contractor = true;
  172. }
  173. return this.http.post(this.urlEnvironment.addToFavorites(), objectToSend, this.getHeaders());
  174. }
  175.  
  176. public getFavoriteContractors(): Observable<any> {
  177. let objectToSend = {
  178. consumerUid: this.uid
  179. }
  180. return this.http.post(this.urlEnvironment.addToFavorites(), objectToSend, this.getHeaders());
  181. }
  182.  
  183. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  184.  
  185. //-----------------------------------------------------Send Notification ---------------------------------------------------------------
  186.  
  187. public sendNotification(jobBoardId: string, browserIdToken: string, phoneIdToken: string): Observable<any> {
  188. console.log("id: ", jobBoardId);
  189. console.log("app: ", this.getAppName(), "appCont: ", this.appContractor);
  190. console.log("this.uid: ", this.uid);
  191. let objectToSend = {
  192. jobBoardId: jobBoardId,
  193. browserIdToken: browserIdToken,
  194. phoneIdToken: phoneIdToken,
  195. contractor: false,
  196. contractorUid: null,
  197. uid: null
  198. }
  199.  
  200. if (this.getAppName() == this.appContractor) {
  201. objectToSend.contractor = true;
  202. objectToSend.contractorUid = this.uid;
  203. }
  204.  
  205. console.log("objectToSend: ", objectToSend);
  206.  
  207. return this.http.post(this.urlEnvironment.sendNotification(), objectToSend, this.getHeaders());
  208. }
  209.  
  210. public getUserLocation(): Observable<any> {
  211. let objectToSend = {
  212. }
  213. return this.http.post(this.urlEnvironment.getUserLocation() + this.googleMapsApi, objectToSend, this.getHeaders());
  214. }
  215.  
  216. public getUserAddress(lat: string, lng: string): Observable<any> {
  217. return this.http.get(this.urlEnvironment.getUserAddress() + lat + ',' + lng + '&key=' + this.googleMapsApi);
  218. }
  219.  
  220. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  221.  
  222. // options = new RequestOptions({ headers: this.headers });
  223.  
  224. public showLoading(): void {
  225. console.log("showLoading");
  226. this.loading = this.loadingCtrl.create({
  227. content: 'Please wait...'
  228. });
  229. this.loading.present();
  230. }
  231.  
  232. public showOnDemandLoading(): void {
  233. this.loading = this.loadingCtrl.create({
  234. content: 'Please wait finding contractors...'
  235. });
  236. this.loading.present();
  237. }
  238.  
  239. public hideLoading(): void {
  240. if (this.loading) {
  241. this.loading.dismiss();
  242. this.loading = null;
  243. }
  244. }
  245.  
  246. public sendBrowserMessage(): void {
  247. // firebase.messaging().
  248. const messaging = firebase.messaging();
  249. messaging.requestPermission().then((data: any) => {
  250. console.log('Notification permission granted.');
  251. messaging.getToken().then((data: any) => {
  252. if (data) {
  253. console.log("data: ", data);
  254. // sendTokenToServer(currentToken);
  255. // updateUIForPushEnabled(currentToken);
  256. } else {
  257. // Show permission request.
  258. console.log('No Instance ID token available. Request permission to generate one.');
  259. }
  260. }).catch((err) => {
  261. console.log('An error occurred while retrieving token. ', err);
  262. });
  263. }).catch((err) => {
  264. console.log('Unable to get permission to notify.', err);
  265. });
  266. }
  267.  
  268. public saveToken(phoneIdToken: string, browserIdToken: string): Observable<any> {
  269. var objectToSend = {
  270. consumerUid: null,
  271. contractorUid: null,
  272. idToken: this.idToken,
  273. phoneIdToken: phoneIdToken,
  274. browserIdToken: browserIdToken,
  275. contractor: false
  276. }
  277. if (this.appName == this.appContractor) {
  278. objectToSend.contractor = true;
  279. objectToSend.contractorUid = this.uid;
  280. } else {
  281. objectToSend.consumerUid = this.uid;
  282. }
  283. console.log("objectToSend: ", objectToSend);
  284. // console.log("this.idToken: ", this.idToken);
  285. return this.http.post(this.urlEnvironment.saveToken(), objectToSend, this.getHeaders());
  286. }
  287.  
  288. public saveGeo(posX: number, posY: number): Observable<any> {
  289. let geoCoor = <CoordinatesXY>{};
  290. geoCoor.x = posX;
  291. geoCoor.y = posY;
  292. var objectToSend = {
  293. consumerUid: null,
  294. contractorUid: null,
  295. contractor: false,
  296. geo: geoCoor
  297. }
  298. if (this.appName == this.appContractor) {
  299. objectToSend.contractor = true;
  300. objectToSend.contractorUid = this.uid;
  301. } else {
  302. objectToSend.consumerUid = this.uid;
  303. }
  304. console.log("objectToSend: ", objectToSend);
  305. // console.log("this.idToken: ", this.idToken);
  306. return this.http.post(this.urlEnvironment.saveGeo(), objectToSend, this.getHeaders());
  307. }
  308.  
  309. public getAppName(): string {
  310. return this.config.get("appName");
  311. }
  312.  
  313. public saveCreditCard(token: string, firstName: string, lastName: string, cellphoneNumber: string): Observable<any> {
  314. console.log("save CC");
  315. var objectToSend = {
  316. uid: this.uid,
  317. token: token,
  318. email: this.email,
  319. firstName: firstName,
  320. lastName: lastName,
  321. cellphoneNumber: cellphoneNumber
  322. }
  323. return this.http.post(this.urlEnvironment.saveCreditCard(), objectToSend, this.getHeaders());
  324. }
  325.  
  326. ///////////////////////////////////////--------BANK-------------/////////////////////////////////////////////////////////////////////
  327.  
  328. public getStripeBankToken(accountNumber: string, routingNumber: string): Promise<any | Error> {
  329. let stripe = new Stripe(this.urlEnvironment.getPublishableKey());
  330. return stripe.createToken('bank_account', {
  331. country: 'US',
  332. currency: 'usd',
  333. routing_number: routingNumber,
  334. account_number: accountNumber,
  335. account_holder_name: name,
  336. account_holder_type: 'individual',
  337. })
  338. .then((result) => {
  339. console.log("result: ", result);
  340. if (result && result.error) {
  341. return;
  342. }
  343. if (result && result.token && result.token.id) {
  344. console.log("tokenId: ", result.token.id);
  345. return result.token.id;
  346. // return Observable.of(result.token.id);
  347. }
  348. })
  349. .catch((err) => {
  350.  
  351. return err;
  352. });
  353. }
  354.  
  355. public updateStripeBankAccount(stripeBankPojo: StripeBankPojo): Observable<any> {
  356. console.log("stripeBankPojo: ", stripeBankPojo);
  357. return this.http.post(this.urlEnvironment.updateStripeBankAccount(), stripeBankPojo, this.getHeaders());
  358. }
  359.  
  360. public deleteBankAccount(last4: string): Observable<any> {
  361. var objectToSend = {
  362. uid: this.uid,
  363. last4: last4
  364. }
  365. return this.http.post(this.urlEnvironment.deleteBankAccount(), objectToSend, this.getHeaders());
  366. }
  367.  
  368. public listBankAccounts(): Observable<any> {
  369. var objectToSend = {
  370. uid: this.uid
  371. }
  372. return this.http.post(this.urlEnvironment.listBankAccounts(), objectToSend, this.getHeaders());
  373. }
  374.  
  375. //////////////////////////////////////////////----Credit Card//////////////////////////////////////////////////////////////////
  376.  
  377. public listCreditCards(): Observable<any> {
  378. var objectToSend = {
  379. uid: this.uid
  380. }
  381. return this.http.post(this.urlEnvironment.listCreditCards(), objectToSend, this.getHeaders());
  382. }
  383.  
  384. public updateCreditCard(creditCard: creditCardInterface, action: string): Observable<any> {
  385. var objectToSend = {
  386. uid: this.uid,
  387. action: action,
  388. creditCardId: creditCard.id
  389. }
  390. return this.http.post(this.urlEnvironment.updateCreditCard(), objectToSend, this.getHeaders());
  391. }
  392.  
  393. public deleteCreditCard(creditCard: creditCardInterface): Observable<any> {
  394. var objectToSend = {
  395. uid: this.uid,
  396. creditCardId: creditCard.id
  397. }
  398. return this.http.post(this.urlEnvironment.deleteCreditCard(), objectToSend, this.getHeaders());
  399. }
  400. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  401.  
  402. public getConsumerRequests(): Observable<any> {
  403. var objectToSend = {
  404. uid: this.uid
  405. }
  406. return this.http.post(this.urlEnvironment.getConsumerRequests(), objectToSend, this.getHeaders());
  407. }
  408.  
  409. public getContractorStripeAcct(): Observable<any> {
  410. var objectToSend = {
  411. uid: this.uid
  412. }
  413. return this.http.post(this.urlEnvironment.getContractorStripeAcct(), objectToSend, this.getHeaders());
  414. }
  415.  
  416. //////////////////////////////////////////////----Document//////////////////////////////////////////////////////////////////
  417.  
  418.  
  419. public saveCertificate(certificatePojo: ContractorCertificates): Observable<any> {
  420. certificatePojo.uid = this.uid;
  421. console.log("certificatePojo: ", certificatePojo);
  422. return this.http.post(this.urlEnvironment.saveCertificate(), certificatePojo, this.getHeaders());
  423. }
  424.  
  425. public saveLicense(imgSrcFront: string, imgSrcBack: string): Observable<any> {
  426. var objectToSend = {
  427. uid: this.uid,
  428. imgSrcFront: imgSrcFront,
  429. imgSrcBack: imgSrcBack
  430. }
  431. return this.http.post(this.urlEnvironment.saveLicense(), objectToSend, this.getHeaders());
  432. }
  433.  
  434. public getLicense(): Observable<any> {
  435. var objectToSend = {
  436. uid: this.uid
  437. }
  438. return this.http.post(this.urlEnvironment.getLicense(), objectToSend, this.getHeaders());
  439. }
  440.  
  441. // tested
  442. public getCertificate(categoryName: string) {
  443. let objectToSend = {
  444. uid: this.uid,
  445. categoryName: categoryName
  446. }
  447. console.log("objectToSend: ", objectToSend);
  448. return this.http.post(this.urlEnvironment.getContractorCertificate(), objectToSend, this.getHeaders());
  449. }
  450.  
  451. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  452.  
  453. // tested
  454. public saveUserProfile(userProfile: UserProfileService): Observable<any> {
  455. return this.http.post(this.urlEnvironment.saveUserProfile(), userProfile, this.getHeaders());
  456. }
  457.  
  458. public saveLoggedIn(loggedIn: boolean) {
  459. console.log("this.uid: ", this.uid);
  460. if (this.uid == null) {
  461. return;
  462. }
  463. let objectToSend = {
  464. uid: this.uid,
  465. loggedIn: loggedIn
  466. }
  467.  
  468. console.log("objectToSend: ", objectToSend);
  469. return this.http.post(this.urlEnvironment.saveLoggedIn(), objectToSend, this.getHeaders());
  470. }
  471.  
  472. public getUserProfile(userProfile: UserProfileService): Observable<any> {
  473. return this.http.post(this.urlEnvironment.getUserProfile(), userProfile, this.getHeaders())
  474. .map((data: any) => {
  475. console.log("data: ", data);
  476. if (data && data.uid) {
  477. this.userProfile.setUserUserProfile(data);
  478. return this.userProfile;
  479. } else {
  480. throw Observable.throw("returnning error");
  481. }
  482. })
  483. }
  484.  
  485. public getContractors(uids: string[], categoryName: string, action: string): Observable<any> {
  486. let objectToSend = {
  487. uids: uids,
  488. categoryName: categoryName,
  489. consumerUid: this.uid,
  490. action: action
  491. }
  492. console.log("objectToSend: ", objectToSend);
  493. return this.http.post(this.urlEnvironment.getContractors(), objectToSend, this.getHeaders())
  494. }
  495.  
  496. public saveContractorRating(jobBoardId: string): Observable<any> {
  497. let objectToSend = {
  498. jobBoardId: jobBoardId
  499. }
  500. console.log("objectToSend: ", objectToSend);
  501. return this.http.post(this.urlEnvironment.saveContractorRating(), objectToSend, this.getHeaders())
  502. }
  503.  
  504. // tested
  505. public getCategories(): Observable<any> {
  506. return this.http.get(this.urlEnvironment.getCategories(), this.getHeaders());
  507. }
  508.  
  509. public signUp(email: string, password: string): Promise<any> {
  510. return firebase.auth()
  511. .createUserWithEmailAndPassword(email, password)
  512. .then(() => {
  513. // .then((currUser: firebase.User) => {
  514. // let user = firebase.auth().currentUser;
  515. // console.log("user: ", user);
  516. // console.log("currUser: ", currUser);
  517. // return user.sendEmailVerification()
  518. // .then((currUser: firebase.User) => {
  519. // console.log("currUser: ", currUser);
  520. // // Email sent.
  521. // }).catch((error: any) => {
  522. // console.log("signUp catch error: ", error);
  523. // });
  524. })
  525. .then((user) => {
  526. return this.signOut();
  527. });
  528. }
  529. public signIn(email: string, password: string): Promise<any> {
  530. return firebase.auth().signInWithEmailAndPassword(email, password);
  531. }
  532.  
  533. public showToast(message: string): Promise<any> {
  534. let toast = this.toastCtrl.create({
  535. message: message,
  536. duration: 3000,
  537. position: 'bottom'
  538. });
  539. return toast.present();
  540. }
  541.  
  542. // ---------------------------------------SOCIAL LOGIN-------------------------------------------------------------------------------------
  543. private socialSignIn(provider): Promise<any> {
  544. if (this.platform.is('cordova')) {
  545. return firebase.auth().signInWithRedirect(provider)
  546. .then((data: any) => {
  547. console.log("data: ", data);
  548. return firebase.auth().getRedirectResult();
  549. });
  550. } else {
  551. return this.afAuth.auth.signInWithPopup(provider)
  552. .then((credential) => {
  553. return credential;
  554. });
  555. }
  556. }
  557.  
  558. public googleLogin(): Promise<void> {
  559. return this.socialSignIn(new firebase.auth.GoogleAuthProvider)
  560. .then((credential: any) => {
  561. return credential;
  562. });
  563. }
  564.  
  565. public facebookLogin(): Promise<void> {
  566. return this.socialSignIn(new firebase.auth.FacebookAuthProvider)
  567. .then((credential: any) => {
  568. return credential;
  569. });
  570. }
  571.  
  572. public twitterLogin(): Promise<void> {
  573. return this.socialSignIn(new firebase.auth.TwitterAuthProvider)
  574. .then((credential: any) => {
  575. return credential;
  576. });
  577. }
  578.  
  579. public updateDisplayName(displayName: string): void {
  580. firebase.auth().currentUser.updateProfile({
  581. displayName: displayName,
  582. photoURL: ""
  583. }).then((data: any) => {
  584. console.log("data: ", data);
  585. });
  586. }
  587.  
  588. public signOut(): Promise<any> {
  589. return firebase.auth().signOut();
  590. }
  591.  
  592. public initialiazeWebFCM(): firebase.messaging.Messaging {
  593. const messaging = firebase.messaging();
  594. messaging.usePublicVapidKey(this.vapidKey);
  595. return messaging;
  596. }
  597.  
  598. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement