import {Injectable} from '@angular/core'; import { BarcodeScanner } from '@ionic-native/barcode-scanner'; import * as qrcode from 'qrcode-generator'; import { CartsProvider } from '../../services'; import { Cart, CartItem } from '../../classes'; // @Component({ // selector: 'qqrcode', // providers: [ProductProvider, CartsProvider], // template: '' // }) @Injectable() export class QRProvider { // productProvider: ProductProvider; // cartProvider: CartsProvider; qrIMage: string; constructor(private barcodeScanner: BarcodeScanner ) { } createQRCode(data: string) { try { let qr: any; qr = qrcode(5, 'M'); qr.addData(data); qr.make(); return qr.createImgTag(4 , 2); }catch (e) { console.error( 'Error generating QR Code:' + e.message); } } ScanCart(userId: string, cartsProvider: CartsProvider) { let data: string; this.barcodeScanner.scan() .then((result) => { if (!result.cancelled) { // const barcodeData = new BarcodeData(result.text, result.format); data = result.text; this.parseQRCode(data, userId, cartsProvider); console.log(data); } }) .catch((err) => { alert(err); }); } parseQRCode (scannedData: string, userId: string, cartsProvider: CartsProvider) { // split by ?, first element is the storeID and every other elemtn is a product in cart const qrCodeValues = scannedData.split('?'); // retrieve cartId let cartId = qrCodeValues[0]; // retrieve said cart cartsProvider.retrieve(cartId).then( (cartToPass: Cart) => { cartsProvider.retrieveAllCarts().then( (response) => { // retrieve array of carts for user !!!! should return single not array cartsProvider.retrieveByUserAndStore(cartToPass.tenantId, cartToPass.storeId, userId).then( (cartsOfUser: Cart[]) => { cartsOfUser = cartsOfUser.filter((cart: Cart) => { return cart.status === 'open'; }); // if exists add if (cartsOfUser.length > 0 ) { this.passCartItems(cartToPass, cartsOfUser[0], cartsProvider); // else create and then add }else { cartsProvider.create(cartToPass.tenantId, cartToPass.getStoreId(), userId).then( (destiNationCart: Cart) => { this.passCartItems(cartToPass, destiNationCart, cartsProvider); } ); } } ); } ); }); } passCartItems(source: Cart, destination: Cart, cartsProvider: CartsProvider) { source.getCartItems().forEach( (cItem: CartItem) => { cartsProvider.addItem(destination.id , cItem); }); } }