envoyer-carte.component.ts conflict fix

thierry
Viiciouss 7 years ago
commit 5cd1e72b9d

@ -0,0 +1,7 @@
[
{
"origin": ["*"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
]

@ -3,6 +3,22 @@
"rules": "database.rules.json"
},
"hosting": {
"headers": [
{
"source": "**/**",
"headers": [{
"key":"Access-Control-Allow-Origin",
"value":"*"
}]
},
{
"source" : "**/*.@(jpg|jpeg|gif|png)",
"headers" : [ {
"key" : "Access-Control-Allow-Origin",
"value" : "*"
} ]
}
],
"public": "dist",
"ignore": [
"firebase.json",

@ -31,6 +31,8 @@ import { CarteEnvoyerComponent } from './components/carteParrainage/carte-envoye
import { NavCommercantComponent } from './components/navigationBar/nav-commercant/nav-commercant.component';
import { NavParrainComponent } from './components/navigationBar/nav-parrain/nav-parrain.component';
import { AuthGuard } from './core/auth.guard';
import { AuthService } from './services/auth/auth.service';
@NgModule({
@ -68,7 +70,7 @@ import { NavParrainComponent } from './components/navigationBar/nav-parrain/nav-
// apiKey: 'google_maps_api_key'
// })
],
providers: [],
providers: [AuthGuard, AuthService],
bootstrap: [AppComponent],
schemas: [NO_ERRORS_SCHEMA]
})

@ -10,6 +10,7 @@ import { ScannerCarteComponent } from './components/opCommercial/scanner-carte/s
import { EditProfilComponent } from './components/profil/edit-profil/edit-profil.component'
import { DebiterCarteComponent } from './components/opCommercial/debiter-carte/debiter-carte.component';
import { CarteEnvoyerComponent } from './components/carteParrainage/carte-envoyer/carte-envoyer.component';
import {AuthGuard} from './core/auth.guard';
@ -17,13 +18,13 @@ export const AppRoutes = [
{path: '', component: HomeComponent},
{path: 'login', component: LoginComponent},
{path: 'register', component: RegisterComponent},
{path: 'profil', component: ProfilComponent},
{path: 'opCommercial', component: OpCommercialComponent},
{path: 'creationOpCommercial', component: CreationOpComComponent},
{path: 'carteParrainageComponent', component: CarteParrainageComponent},
{path: 'EnvoyerCarte/:idOp', component: EnvoyerCarteComponent},
{path: 'scannerCarte/:idOp', component: ScannerCarteComponent},
{path: 'debiterCarte/:idOp', component: DebiterCarteComponent},
{path: 'editProfil', component: EditProfilComponent},
{path: 'historiqueCarte', component: CarteEnvoyerComponent }
{path: 'profil', component: ProfilComponent, canActivate: [AuthGuard]},
{path: 'opCommercial', component: OpCommercialComponent, canActivate: [AuthGuard]},
{path: 'creationOpCommercial', component: CreationOpComComponent, canActivate: [AuthGuard]},
{path: 'carteParrainageComponent', component: CarteParrainageComponent, canActivate: [AuthGuard]},
{path: 'EnvoyerCarte/:idOp', component: EnvoyerCarteComponent, canActivate: [AuthGuard]},
{path: 'scannerCarte/:idOp', component: ScannerCarteComponent, canActivate: [AuthGuard]},
{path: 'debiterCarte/:idOp', component: DebiterCarteComponent, canActivate: [AuthGuard]},
{path: 'editProfil', component: EditProfilComponent, canActivate: [AuthGuard]},
{path: 'historiqueCarte', component: CarteEnvoyerComponent, canActivate: [AuthGuard]}
];

@ -5,27 +5,30 @@
<div class="list-group">
<div class="card mainCard" *ngFor="let crt of carteParrData | async">
<div class="row">
<div class="col-md-6 card-image mb-1 subCard1" [ngStyle]="{ 'background-image': 'url(' + crt.carteTemplate.downloadURL + ')'}">
<img class="col-md-6 card-image mb-1 subCard1" src={{crt.carteTemplate.downloadURL}}>
<!--<div class="col-md-6 card-image mb-1 subCard1" [ngStyle]="{ 'background-image': 'url(' + crt.carteTemplate.downloadURL + ')'}">
<div class="view">
<div class="row firstRow">
<div *ngIf="commercant !== undefined" >
<div class="col-md-6 flex-center card-block cardPart1">{{commercant.commercialName}}</div>
<div class="col-md-6 flex-center card-block card-image mb-1 cardPart2" [ngStyle]="{ 'background-image': 'url(' + commercant.image.downloadURL + ')'}">
<p>test2</p>
<div class="col-md-6 flex-center card-block cardPart1"></div>
<div class="col-md-6 flex-center card-block card-image mb-1 cardPart2">
<p></p>
</div>
</div>
</div>
<div class="row secondRow">
<div class="col-md-6 flex-center cardPart3"><p></p></div>
<div class="col-md-6 flex-center cardPart4"><p>{{crt.uid}}</p></div>
<div class="col-md-6 flex-center cardPart4"><p></p></div>
</div>
</div>
</div>
</div>-->
<div class="col-md-6 card subCard2">
<label>date Debut: {{crt.dateDebut}}</label>
<label>date Fin: {{crt.dateFin}}</label>
<label>date Debut: {{crt.dateDebut | date:'dd/MM/yyyy'}}</label>
<label>date Fin: {{crt.dateFin | date:'dd/MM/yyyy'}}</label>
<label>avantage Cumule: {{crt.avantageCumule}}</label>
<label>avantage Recuperer: {{crt.avantageRecuperer}}</label>
<label>ID de la carte: {{crt.uid}}</label>
</div>
</div>
</div>

@ -39,11 +39,10 @@ export class CarteParrainageComponent implements OnInit, OnDestroy {
this.parrain = new Parrain();
this.user.subscribe(
(auth) => {
console.log('be' + auth.uid);
if (auth) {
this.carteParrData = this.afDb.list('/CarteParrainage/', {
query: {
orderByChild: 'parrainID',
orderByChild: 'parrainCarte/uid',
equalTo: auth.uid.toString()
}
}
@ -53,7 +52,7 @@ export class CarteParrainageComponent implements OnInit, OnDestroy {
this.commList = this.afDb.list('/Commercant/', {
query: {
orderByChild: 'uid',
equalTo: elementCar.commercantID
equalTo: elementCar.commercantCarte.uid
}
}
);

@ -9,11 +9,11 @@
</div>
<div class="md-form">
<i class="fa fa-calendar-check-o prefix grey-text"></i>
<input type="date" id="orangeForm-Date" placeholder="Date debut">
<input type="date" id="orangeForm-Date" [(ngModel)]="opComm.dateDebut" placeholder="Date debut">
</div>
<div class="md-form">
<i class="fa fa-calendar-times-o prefix grey-text"></i>
<input type="date" id="orangeForm-Date" placeholder="Date fin">
<input type="date" id="orangeForm-Date" [(ngModel)]="opComm.dateFin" placeholder="Date fin">
</div>

@ -15,6 +15,7 @@ import { AngularFireAuthModule } from 'angularfire2/auth';
import { OpCommercialService } from '../../../services/opCommercial/op-commercial.service';
import { FireImg } from '../../../../models/FireImg';
import {Commercant} from '../../../../models/Commercant';
@Component({
@ -48,7 +49,7 @@ export class CreationOpComComponent implements OnInit, OnDestroy {
this.user.subscribe(
(auth) => {
if (auth) {
this.opCommData = this.afDb.list('/' + auth.displayName + '/', {
this.opCommData = this.afDb.list('/Commercant/', {
query: {
orderByChild: 'uid',
equalTo: auth.uid.toString()
@ -57,12 +58,15 @@ export class CreationOpComComponent implements OnInit, OnDestroy {
);
this.opCommData.forEach(utilisateur => {
utilisateur.forEach(element => {
console.log('element.uid: ' + element.uid);
this.opComm.idCommercant = element.uid;
console.log('element.uid: ' + element.raisonSociale);
this.opComm.commercantOpCom = element;
this.opComm.status = 'Non active';
// let file = this.selectedFiles.item(0);
// this.opComm.carteTemplate = file;
// this.upload();
this.opComm.nbScan = '';
this.opComm.nbEnvoie = '';
this.opComm.nbDebiter = '';
console.log('element.uid: ' + element.uid);
this.opComService.saveOpComm(element, this.opComm);
});
@ -108,7 +112,7 @@ export class CreationOpComComponent implements OnInit, OnDestroy {
this.opComm = {
uid : '',
name : '',
idCommercant : '',
commercantOpCom : new Commercant(),
dateDebut : new Date(),
dateFin : new Date(),
carteTemplate : new FireImg(),
@ -118,7 +122,10 @@ export class CreationOpComComponent implements OnInit, OnDestroy {
avantageFilleul : '',
deviseAvantageFilleul : '',
tarifXJCFilleul : '',
status : ''
status : '',
nbScan : '',
nbEnvoie : '',
nbDebiter : ''
};
}
}

@ -14,11 +14,18 @@
<p class="h5 text-center mb-4">Débiter Carte</p>
<!-- Si cest un filleul existant -->
<div class="md-form">
<i class="fa fa-user prefix grey-text"></i>
<input type="text" id="orangeForm-Familyname" placeholder="ID carte" ><!--[(ngModel)]="filleul.idCard"-->
<i class="fa fa-address-card prefix grey-text"></i>
<input
#query
(keyup)="filterCarte(query.value)"
type="text" class="form-control" placeholder="ID carte">
<!--<input type="text" id="orangeForm-Familyname" placeholder="ID carte" [(ngModel)]="carteIDTemp">[(ngModel)]="filleul.idCard"-->
</div>
<div class="md-form">
<i class="fa fa-euro prefix grey-text"></i>
<input type="text" id="orangeForm-Familyname" [(ngModel)]="valeurRecup" placeholder="Combien le parrain souhaite utiliser ?" ><!--[(ngModel)]="filleul.idCard"-->
</div>
<!--
<div class="md-form">
<p>{{parSelect}}</p>
<i class="fa fa-user prefix grey-text"></i>
@ -30,10 +37,13 @@
<a (click)="getIdParrain(parrain.uid)">{{parrain.firstname}} {{parrain.familyname}}</a>
</div>
</div>
-->
<div class="md-form">
<i class="fa fa-user prefix grey-text"></i>
<input type="text" id="orangeForm-Familyname" placeholder="Code confidentiel du parrain" ><!--[(ngModel)]="filleul.idCard"-->
<input type="text" id="orangeForm-Familyname" [(ngModel)]="codeTemp" placeholder="Code confidentiel du parrain" name="codeT" #codeT="ngModel"><!--[(ngModel)]="filleul.idCard"-->
<div *ngIf="(codeTemp !== cartePar.parrainCarte.secretCode) && (codeT.dirty || codeT.touched)" class="alert alert-danger">
Code is required and it should be the same of <strong><i>{{cartePar.parrainCarte.firstname}} {{cartePar.parrainCarte.familyname}}</i></strong>.
</div>
</div>
<label>
@ -42,7 +52,7 @@
données, y compris notre Utilisation des cookies.
</label>
<div class="text-center" style="margin-top:5%">
<button class="btn btn-light-green waves-light" (click)="debiterCarte()">Débiter Carte</button>
<button class="btn btn-light-green waves-light" [disabled]="codeTemp !== cartePar.parrainCarte.secretCode" (click)="debiterCarte()">Débiter Carte</button>
<button class="btn btn-cyan" (click)="goToOpComm()">Back</button>
</div>

@ -50,6 +50,13 @@ export class DebiterCarteComponent implements OnInit, OnDestroy {
parrainsTest: Parrain[];
filteredParrainsTest: any[];
subscription: Subscription;
carteTest: Filleul[];
codeTemp: string;
valeurRecup: string;
filteredCartesTest: any[];
subscriptionCarte: Subscription;
//startAt = new Subject();
//endAt = new Subject();
/////
@ -57,7 +64,6 @@ export class DebiterCarteComponent implements OnInit, OnDestroy {
private router: Router, private authService: AuthService,
private opComService: OpCommercialService, private route: ActivatedRoute) {
this.radioParrain = '';
this.localUser = new User();
this.parrain = new Parrain();
this.commercant = new Commercant();
@ -65,21 +71,69 @@ export class DebiterCarteComponent implements OnInit, OnDestroy {
this.parrainAffList = null;
this.user = afAuth.authState;
this.databaseRef = firebase.database().ref();
}
debiterCarte(){}
getIdParrain(parUid) {
this.parrainExistList.forEach(parEx => {
parEx.forEach(elementparEx => {
if (elementparEx.uid === parUid){
this.parSelect = 'Vous avez selectionner le parrain : '
+ elementparEx.familyname + ' '
+ elementparEx.firstname;
this.user.subscribe(
(auth) => {
if (auth) {
this.route.params.subscribe(params => {
// this.test = params['idOp'];
this.opCommList = this.afDb.list('/OperationCommercial/', {
query: {
orderByChild: 'uid',
equalTo: params['idOp']
}
}
);
this.opCommList.forEach(op => {
op.forEach(element => {
this.opComm = element;
});
});
});
}
});
});
}
filterCarte(query: string) {
this.filteredCartesTest = (query) ?
this.carteTest.filter(c => (c.uid).includes(query)) :
[];
if (this.filteredCartesTest !== []){
for(let i = 0; i < this.filteredCartesTest.length;i++){
if (this.filteredCartesTest[i].uid === query) {
console.log('succes id carte est: ' + this.filteredCartesTest[i].uid);
console.log('succes parrain carte est: ' + this.filteredCartesTest[i].parrainCarte.firstname);
console.log('succes code secret parrain carte est: ' + this.filteredCartesTest[i].parrainCarte.secretCode);
this.cartePar = this.filteredCartesTest[i];
}else{
console.log('echec de la carte ! ');
}
}
}
}
debiterCarte() {
console.log('+this.cartePar.avantageCumule : ' + (+this.cartePar.avantageCumule));
console.log('+this.cartePar.avantageRecuperer : ' + (+this.cartePar.avantageRecuperer));
this.cartePar.avantageCumule = ((+this.cartePar.avantageCumule) - (+this.valeurRecup)).toString();
this.cartePar.avantageRecuperer = ((+this.cartePar.avantageRecuperer) + (+this.valeurRecup)).toString();
console.log('+this.cartePar.avantageCumule : ' + this.cartePar.avantageCumule);
console.log('+this.cartePar.avantageRecuperer : ' + this.cartePar.avantageRecuperer);
console.log('carte iiiiid: ' + this.cartePar.uid);
const carteCumuRef = this.databaseRef.child('CarteParrainage').child(this.cartePar.uid.toString()).child('avantageCumule');
carteCumuRef.set(this.cartePar.avantageCumule);
const carteRecuRef = this.databaseRef.child('CarteParrainage').child(this.cartePar.uid.toString()).child('avantageRecuperer');
carteRecuRef.set(this.cartePar.avantageRecuperer);
console.log(this.opComm.nbDebiter);
this.opComm.nbDebiter = ((+this.opComm.nbDebiter) + 1).toString();
console.log(this.opComm.nbDebiter);
const opEnvRef = this.databaseRef.child('OperationCommercial').child(this.opComm.uid.toString()).child('nbDebiter');
opEnvRef.set(this.opComm.nbDebiter);
}
filter(query: string) {
this.filteredParrainsTest = (query) ?
this.parrainsTest.filter(p => (p.firstname.toLowerCase() + p.familyname.toLowerCase()).includes(query.toLowerCase())) :
@ -93,16 +147,19 @@ export class DebiterCarteComponent implements OnInit, OnDestroy {
ngOnInit() {
this.subscription = this.opComService.getParrains()
.subscribe(parrains => this.parrainsTest = parrains);
this.subscriptionCarte = this.opComService.getCartes()
.subscribe(cartes => this.carteTest = cartes);
}
//////
ngOnDestroy() {
this.subscription.unsubscribe();
this.subscriptionCarte.unsubscribe();
this.cartePar = {
uid: '',
name: '',
parrainID: '',
commercantID: '',
parrainCarte: new Parrain(),
commercantCarte: new Commercant(),
operationCommercialID: '',
dateDebut: new Date(),
dateFin: new Date(),

@ -14,27 +14,7 @@
<div class="card">
<div class="well">
<p class="h5 text-center mb-4">Envoyer Carte</p>
<div class="col-md-12 subCard1 card" id="subCard1">
<img src="{{cartePar.carteTemplate.downloadURL}}" id="image1" class="mx-auto d-block flex-center card-img-overlay" alt="Responsive image">
<div class="view">
<div class="row firstRow">
<div class="col-md-6 flex-center card-block cardPart1"><label>{{commercant.commercialName}}</label></div>
<div class="col-md-6 flex-center card-block card-image mb-1 cardPart2 image2" [ngStyle]="{ 'background-image': 'url(' + commercant.image.downloadURL + ')'}">
</div>
</div>
<div class="row secondRow">
<div class="col-md-6 flex-center cardPart3 flex-column">
<label>{{cartePar.name}}</label>
</div>
<div class="col-md-6 flex-center cardPart4"><label>{{cartePar.uid}}</label></div>
</div>
<div class="col-md-12 text-center" id="dateFin">
<label>Valable jusqu'au: {{cartePar.dateFin | date:'dd/MM/yyyy'}}</label>
</div>
</div>
</div>
<p class="text-center mb-4" style="padding-top: 2%;">Choisissez quelle type de parrain à qui envoyer la carte</p>
<form class="form-inline flex-center">
<div class="md-form" style="padding-left: 2%;">
@ -98,7 +78,7 @@
<!-- Si cest un parrain existant -->
<div *ngIf="radioParrain === 'ParrainExist'">
<p>{{parSelect}}</p>
<!--
<div class="dropdown" dropdown>
<button dropdownToggle type="button" class="btn btn-primary dropdown-toggle waves-light" mdbRippleRadius>
@ -128,7 +108,10 @@
<div class="md-form" style="padding-top:2%;">
<i class="fa fa-birthday-cake prefix grey-text"></i>
<input type="date" id="orangeForm-Birthday" placeholder="Birthday">
<input type="date" id="orangeForm-Birthday" [(ngModel)]="birthdayTemp" placeholder="Birthday" name="birthday" #birthday="ngModel">
<div *ngIf="(birthdayTemp !== parrain.birthday) && (birthday.dirty || birthday.touched)" class="alert alert-danger">
Birthday is required and it should be the same of <strong><i>{{parrain.firstname}} {{parrain.familyname}}</i></strong>.
</div>
</div>
<label>
@ -137,42 +120,34 @@
données, y compris notre Utilisation des cookies.
</label>
<div class="text-center" style="margin-top:5%">
<button class="btn btn-light-green waves-light" [disabled]="parSelect === ''" (click)="creerCartePar()">Envoyer Carte et affilié le parrain</button>
<button class="btn btn-light-green waves-light" [disabled]="(parSelect === '') || (birthdayTemp !== parrain.birthday)" (click)="creerCartePar()">Envoyer Carte {{parSelect}}</button>
<button class="btn btn-cyan" (click)="goToOpComm()">Back</button>
</div>
</div>
<!-- Fin Si cest un parrain existant -->
<!-- Si cest un parrain connu et affilié
<div *ngIf="radioParrain === 'ParrainAffi'">
<p>{{parSelect}}</p>
<div class="dropdown" dropdown>
<button dropdownToggle type="button" class="btn btn-primary dropdown-toggle waves-light" mdbRippleRadius>
Parrains Affilié
</button>
<!-- Fin Si cest un parrain existant -->
<div class="col-md-12 subCard1 card" id="subCard1">
<img src="{{cartePar.carteTemplate.downloadURL}}" id="image1" crossorigin="anonymous" class="mx-auto d-block flex-center card-img-overlay" alt="Responsive image">
<div class="view">
<div class="row firstRow">
<div class="col-md-6 flex-center card-block cardPart1"><label>{{commercant.commercialName}}</label></div>
<div class="col-md-6 flex-center card-block card-image mb-1 cardPart2 image2" [ngStyle]="{ 'background-image': 'url(' + commercant.image.downloadURL + ')'}">
<div class="dropdown-menu">
<h6 class="dropdown-header">Parrains Affilié</h6>
<a class="dropdown-item" *ngFor="let parAf of parrainAffListTemp" (click)="getIdParrain(parAf.uid)">{{parAf.firstname}}</a>
</div>
</div>
</div>
<div class="md-form" style="padding-top: 2%;">
<i class="fa fa-birthday-cake prefix grey-text"></i>
<input type="date" id="orangeForm-Birthday" placeholder="Birthday">
<div class="row secondRow">
<div class="col-md-6 flex-center cardPart3 flex-column">
<label>{{cartePar.name}}</label>
</div>
<div class="col-md-6 flex-center cardPart4"><label>{{cartePar.uid}}</label></div>
</div>
<label>
En cliquant sur Créer un compte, vous acceptez nos Conditions
et indiquez que vous aves lu notre Politique d'utilisation des
données, y compris notre Utilisation des cookies.
</label>
<div class="text-center" style="margin-top:5%">
<button class="btn btn-light-green waves-light" [disabled]="parSelect === ''" (click)="creerCartePar()">Envoyer Carte</button>
<button class="btn btn-cyan" (click)="goToOpComm()">Back</button>
<div class="col-md-12 text-center" id="dateFin">
<label>Valable jusqu'au: {{cartePar.dateFin | date:'dd/MM/yyyy'}}</label>
</div>
</div>-->
<!-- Fin Si cest un parrain connu et affilié -->
<button class="btn btn-blue waves-light" (click)="sectionToImage()"> screen </button>
</div>
</div>
<!--<button class="btn btn-blue waves-light" (click)="sectionToImage()"> screen </button>-->
</div>
</div>

@ -36,10 +36,11 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
commercant: Commercant;
opComm: OperationCommerciale;
cartePar: CarteParrainage;
birthdayTemp: Date;
commList: FirebaseListObservable<any[]>;
opCommList: FirebaseListObservable<any[]>;
parrainExistList: FirebaseListObservable<any[]>;
parrainSelected: FirebaseListObservable<any[]>;
parrainAffList: FirebaseListObservable<any[]>;
carteParList: FirebaseListObservable<any[]>;
parSelect: string;
@ -51,6 +52,8 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
parrainsTest: Parrain[];
filteredParrainsTest: any[];
subscription: Subscription;
validC: string;
//startAt = new Subject();
//endAt = new Subject();
/////
@ -62,7 +65,7 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
this.radioParrain = '';
this.validC = '';
this.localUser = new User();
this.parrain = new Parrain();
this.commercant = new Commercant();
@ -83,9 +86,9 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
this.commList.forEach(commerc => {
commerc.forEach(elementCommerc => {
this.commercant = elementCommerc;
});
this.commercant = elementCommerc;
});
});
// initialisation carte
this.route.params.subscribe(params => {
// this.test = params['idOp'];
@ -101,16 +104,16 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
this.opComm = element;
this.cartePar.uid = firebase.database().ref().child('CarteParrainage').push().key;
this.cartePar.name = this.opComm.name;
this.cartePar.commercantID = this.opComm.idCommercant;
this.cartePar.commercantCarte = this.opComm.commercantOpCom;
this.cartePar.operationCommercialID = this.opComm.uid;
this.cartePar.dateDebut = this.opComm.dateDebut;
this.cartePar.dateFin = this.opComm.dateFin;
console.log('this.opComm.dateFin: '+ this.opComm.dateFin);
console.log('this.opComm.dateFin: ' + this.opComm.dateFin);
/*
var dateTest = this.opComm.dateFin.toString().split(/[- :]/);
this.cartePar.dateFin = new Date(Number(dateTest[0]), Number(dateTest[1]) - 1,
Number(dateTest[2]), Number(dateTest[3]), Number(dateTest[4]), Number(dateTest[5]));
*/
var dateTest = this.opComm.dateFin.toString().split(/[- :]/);
this.cartePar.dateFin = new Date(Number(dateTest[0]), Number(dateTest[1]) - 1,
Number(dateTest[2]), Number(dateTest[3]), Number(dateTest[4]), Number(dateTest[5]));
*/
this.cartePar.carteTemplate = this.opComm.carteTemplate;
});
});
@ -123,17 +126,13 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
}
}
);
console.log(params['idOp']);
this.carteParList.forEach(carte => {
console.log('carte :' + carte.length);
carte.forEach(elementCarte => {
console.log("elementCarte.parrainID : " + elementCarte.parrainID);
console.log("elementCarte..parrainCarte.uid : " + elementCarte.parrainCarte.uid);
this.parrainAffList = this.afDb.list('/Parrain/', {
query: {
orderByChild: 'uid',
equalTo: elementCarte.parrainID
equalTo: elementCarte.parrainCarte.uid
}
}
);
@ -177,6 +176,7 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
registerNewParrain() {
this.parrain.status = 'Parrain';
this.parrain.secretCode = this.getRandomArbitrary(1111, 9999).toString();
this.parrain.password = this.getRandomArbitrary(111111, 999999).toString();
// this.authService.signUp(this.parrain);
@ -192,13 +192,14 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
emailVerified: true
});
this.cartePar.parrainID = userCreate.uid;
this.cartePar.parrainCarte = userCreate;
this.parrain.uid = userCreate.uid;
this.parrain.emailVerified = userCreate.emailVerified;
userRef.set(this.parrain);
this.creerCartePar();
firebase.auth().sendPasswordResetEmail(this.parrain.email);
userCreate.sendEmailVerification();
firebase.auth().signOut();
firebase.auth().signInWithEmailAndPassword(this.commercant.email, this.commercant.password);
});
@ -212,8 +213,19 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
}
getIdParrain(parUid) {
var parlistTemp = this.afDb.list('/Parrain/', {
query: {
orderByChild: 'uid',
equalTo: parUid
}
}
);
this.cartePar.parrainID = parUid;
parlistTemp.forEach(par => {
par.forEach(elementParTemp => {
this.cartePar.parrainCarte = elementParTemp;
});
});
this.selectPar = true;
@ -221,7 +233,7 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
if (this.radioParrain === 'ParrainAffi'){
for (let i = 0; i < this.parrainAffListTemp.length; i++) {
if (this.parrainAffListTemp[i].uid === parUid) {
this.parSelect = 'Vous avez selectionner le parrain : '
this.parSelect = ' à : '
+ this.parrainAffListTemp[i].familyname + ' '
+ this.parrainAffListTemp[i].firstname;
}
@ -230,7 +242,7 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
this.parrainExistList.forEach(parEx => {
parEx.forEach(elementparEx => {
if (elementparEx.uid === parUid){
this.parSelect = 'Vous avez selectionner le parrain : '
this.parSelect = ' à : '
+ elementparEx.familyname + ' '
+ elementparEx.firstname;
}
@ -238,9 +250,21 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
});
}
console.log('this.cartePar.commercantID : ' + this.cartePar.commercantID);
console.log('this.cartePar.parrainID : ' + this.cartePar.parrainID);
this.parrainSelected = this.afDb.list('/Parrain/', {
query: {
orderByChild: 'uid',
equalTo: parUid
}
}
);
this.parrainSelected.forEach(paSel => {
paSel.forEach(elementPaSel => {
this.parrain = elementPaSel;
});
});
// console.log('this.birthday parrain : ' + this.parrain.birthday);
console.log('this.cartePar.commercantCarte.uid : ' + this.cartePar.commercantCarte.uid);
console.log('this.cartePar..parrainCarte.uid : ' + this.cartePar.parrainCarte.uid);
console.log('this.cartePar.operationCommercialID : ' + this.cartePar.operationCommercialID);
console.log('this.cartePar.dateDebut : ' + this.cartePar.dateDebut);
console.log('this.cartePar.dateFin : ' + this.cartePar.dateFin);
@ -248,9 +272,65 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
creerCartePar() {
this.opComService.creerCartePar(this.cartePar);
// this.opComService.creerCartePar(this.cartePar); inutile
this.sectionToImage(this.cartePar);
console.log(this.opComm.nbEnvoie);
this.opComm.nbEnvoie = ((+this.opComm.nbEnvoie) + 1).toString();
console.log(this.opComm.nbEnvoie);
const opEnvRef = this.databaseRef.child('OperationCommercial').child(this.opComm.uid.toString()).child('nbEnvoie');
opEnvRef.set(this.opComm.nbEnvoie);
this.validC = 'ok';
}
sectionToImage(maCarteP: CarteParrainage) {
html2canvas(document.getElementById('subCard1'), {
// allowTaint: true,
useCORS: true,
logging: true,
onrendered: function (canvas) {
var context = canvas.getContext('2d');
var img = new Image();
var offsets = document.getElementById('subCard1').getBoundingClientRect();
var imgTop = offsets.top;
var imgLeft = offsets.left;
img.onload = function () {
context.drawImage(img, imgLeft, imgTop);
};
img.crossOrigin = 'Anonymous';
canvas.crossOrigin = 'Anonymous';
canvas.id = 'canvas';
// document.body.appendChild(canvas);
canvas.toBlob(blob => {
var nouvelleImg = new Image();
let storageRef = firebase.storage().ref();
nouvelleImg.setAttribute('crossOrigin', 'anonymous');
nouvelleImg.src = blob;
storageRef.child('CarteParrainage/' + maCarteP.uid + '/carteTemplate').put(blob).then((snapshot) => {
let updates = {};
maCarteP.carteTemplate.path = 'CarteParrainage/' + maCarteP.uid + '/carteTemplate';
maCarteP.carteTemplate.filename = maCarteP.name;
maCarteP.carteTemplate.downloadURL = snapshot.downloadURL;
updates['CarteParrainage/' + maCarteP.uid] = maCarteP;
firebase.database().ref().update(updates);
});
});
}
});
}
goToOpComm() {
this.router.navigate(['/opCommercial']);
}
//////
ngOnInit() {
this.subscription = this.opComService.getParrains()
@ -259,13 +339,14 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
//////
ngOnDestroy() {
this.validC = '';
this.subscription.unsubscribe();
this.radioParrain = '';
this.cartePar = {
uid: '',
name: '',
parrainID: '',
commercantID: '',
parrainCarte: new Parrain(),
commercantCarte: new Commercant(),
operationCommercialID: '',
dateDebut: new Date(),
dateFin: new Date(),
@ -298,332 +379,4 @@ export class EnvoyerCarteComponent implements OnInit, OnDestroy {
status: ''
};
}
sectionToImage(monURL: string) {
/**
* covert canvas to image
* and save the image file
*/
var Canvas2Image = function () {
// check if support sth.
var $support = function () {
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d');
return {
canvas: !!ctx,
imageData: !!ctx.getImageData,
dataURL: !!canvas.toDataURL,
btoa: !!window.btoa
};
}();
var downloadMime = 'image/png';
function scaleCanvas(canvas, width, height) {
var w = canvas.width,
h = canvas.height;
if (width == undefined) {
width = w;
}
if (height == undefined) {
height = h;
}
var retCanvas = document.createElement('canvas');
var retCtx = retCanvas.getContext('2d');
retCanvas.width = width;
retCanvas.height = height;
retCtx.drawImage(canvas, 0, 0, w, h, 0, 0, width, height);
return retCanvas;
}
function getDataURL(canvas, type, width, height) {
canvas = scaleCanvas(canvas, width, height);
return canvas.toDataURL(type);
}
function saveFile(strData) {
document.location.href = strData;
}
function genImage(strData) {
var img = document.createElement('img');
img.src = strData;
return img;
}
function fixType(type) {
type = type.toLowerCase().replace(/jpg/i, 'jpeg');
var r = type.match(/png|jpeg|bmp|gif/)[0];
return 'image/' + r;
}
function encodeData(data) {
if (!window.btoa) {
throw 'btoa undefined'
}
var str = '';
if (typeof data == 'string') {
str = data;
} else {
for (var i = 0; i < data.length; i++) {
str += String.fromCharCode(data[i]);
}
}
return btoa(str);
}
function getImageData(canvas) {
var w = canvas.width,
h = canvas.height;
return canvas.getContext('2d').getImageData(0, 0, w, h);
}
function makeURI(strData, type) {
return 'data:' + type + ';base64,' + strData;
}
/**
* create bitmap image
*
*/
var genBitmapImage = function (oData) {
//
// BITMAPFILEHEADER: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx
// BITMAPINFOHEADER: http://msdn.microsoft.com/en-us/library/dd183376.aspx
//
var biWidth = oData.width;
var biHeight = oData.height;
var biSizeImage = biWidth * biHeight * 3;
var bfSize = biSizeImage + 54; // total header size = 54 bytes
//
// typedef struct tagBITMAPFILEHEADER {
// WORD bfType;
// DWORD bfSize;
// WORD bfReserved1;
// WORD bfReserved2;
// DWORD bfOffBits;
// } BITMAPFILEHEADER;
//
var BITMAPFILEHEADER = [
// WORD bfType -- The file type signature; must be "BM"
0x42, 0x4D,
// DWORD bfSize -- The size, in bytes, of the bitmap file
bfSize & 0xff, bfSize >> 8 & 0xff, bfSize >> 16 & 0xff, bfSize >> 24 & 0xff,
// WORD bfReserved1 -- Reserved; must be zero
0, 0,
// WORD bfReserved2 -- Reserved; must be zero
0, 0,
// DWORD bfOffBits -- The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits.
54, 0, 0, 0
];
//
// typedef struct tagBITMAPINFOHEADER {
// DWORD biSize;
// LONG biWidth;
// LONG biHeight;
// WORD biPlanes;
// WORD biBitCount;
// DWORD biCompression;
// DWORD biSizeImage;
// LONG biXPelsPerMeter;
// LONG biYPelsPerMeter;
// DWORD biClrUsed;
// DWORD biClrImportant;
// } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
//
var BITMAPINFOHEADER = [
// DWORD biSize -- The number of bytes required by the structure
40, 0, 0, 0,
// LONG biWidth -- The width of the bitmap, in pixels
biWidth & 0xff, biWidth >> 8 & 0xff, biWidth >> 16 & 0xff, biWidth >> 24 & 0xff,
// LONG biHeight -- The height of the bitmap, in pixels
biHeight & 0xff, biHeight >> 8 & 0xff, biHeight >> 16 & 0xff, biHeight >> 24 & 0xff,
// WORD biPlanes -- The number of planes for the target device. This value must be set to 1
1, 0,
// WORD biBitCount -- The number of bits-per-pixel, 24 bits-per-pixel -- the bitmap
// has a maximum of 2^24 colors (16777216, Truecolor)
24, 0,
// DWORD biCompression -- The type of compression, BI_RGB (code 0) -- uncompressed
0, 0, 0, 0,
// DWORD biSizeImage -- The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps
biSizeImage & 0xff, biSizeImage >> 8 & 0xff, biSizeImage >> 16 & 0xff, biSizeImage >> 24 & 0xff,
// LONG biXPelsPerMeter, unused
0, 0, 0, 0,
// LONG biYPelsPerMeter, unused
0, 0, 0, 0,
// DWORD biClrUsed, the number of color indexes of palette, unused
0, 0, 0, 0,
// DWORD biClrImportant, unused
0, 0, 0, 0
];
var iPadding = (4 - ((biWidth * 3) % 4)) % 4;
var aImgData = oData.data;
var strPixelData = '';
var biWidth4 = biWidth << 2;
var y = biHeight;
var fromCharCode = String.fromCharCode;
do {
var iOffsetY = biWidth4 * (y - 1);
var strPixelRow = '';
for (var x = 0; x < biWidth; x++) {
var iOffsetX = x << 2;
strPixelRow += fromCharCode(aImgData[iOffsetY + iOffsetX + 2]) +
fromCharCode(aImgData[iOffsetY + iOffsetX + 1]) +
fromCharCode(aImgData[iOffsetY + iOffsetX]);
}
for (var c = 0; c < iPadding; c++) {
strPixelRow += String.fromCharCode(0);
}
strPixelData += strPixelRow;
} while (--y);
var strEncoded = encodeData(BITMAPFILEHEADER.concat(BITMAPINFOHEADER)) + encodeData(strPixelData);
return strEncoded;
};
/**
* saveAsImage
* @param canvasElement
* @param {String} image type
* @param {Number} [optional] png width
* @param {Number} [optional] png height
*/
var saveAsImage = function (canvas, width, height, type) {
if ($support.canvas && $support.dataURL) {
if (typeof canvas == "string") {
canvas = document.getElementById(canvas);
}
if (type == undefined) {
type = 'png';
}
type = fixType(type);
if (/bmp/.test(type)) {
var data = getImageData(scaleCanvas(canvas, width, height));
var strData = '';
strData = genBitmapImage(data);
saveFile(makeURI(strData, downloadMime));
} else {
var strData = '';
strData = getDataURL(canvas, type, width, height);
saveFile(strData.replace(type, downloadMime));
}
}
};
var convertToImage = function (canvas, width, height, type) {
if ($support.canvas && $support.dataURL) {
if (typeof canvas == "string") {
canvas = document.getElementById(canvas);
}
if (type == undefined) {
type = 'png';
}
type = fixType(type);
if (/bmp/.test(type)) {
var data = getImageData(scaleCanvas(canvas, width, height));
var strData = '';
strData = genBitmapImage(data);
return genImage(makeURI(strData, 'image/bmp'));
} else {
var strData = '';
strData = getDataURL(canvas, type, width, height);
return genImage(strData);
}
}
};
return {
saveAsImage: saveAsImage,
saveAsPNG: function (canvas, width, height) {
return saveAsImage(canvas, width, height, 'png');
},
saveAsJPEG: function (canvas, width, height) {
return saveAsImage(canvas, width, height, 'jpeg');
},
saveAsGIF: function (canvas, width, height) {
return saveAsImage(canvas, width, height, 'gif');
},
saveAsBMP: function (canvas, width, height) {
return saveAsImage(canvas, width, height, 'bmp');
},
convertToImage: convertToImage,
convertToPNG: function (canvas, width, height) {
return convertToImage(canvas, width, height, 'png');
},
convertToJPEG: function (canvas, width, height) {
return convertToImage(canvas, width, height, 'jpeg');
},
convertToGIF: function (canvas, width, height) {
return convertToImage(canvas, width, height, 'gif');
},
convertToBMP: function (canvas, width, height) {
return convertToImage(canvas, width, height, 'bmp');
}
};
}();
/*
html2canvas(document.body).then(canvas => {
var imgData = canvas.toDataURL("image/png");
var context = canvas.getContext('2d');
console.log(imgData);
window.open(imgData);
// this.AddImagesResource(imgData);
// document.body.appendChild(canvas);
});*/
html2canvas(document.getElementById('subCard1'), {
allowTaint: true,
useCORS: true,
logging: true,
onrendered: function (canvas) {
var context = canvas.getContext('2d');
var img = new Image();
var offsets = document.getElementById('subCard1').getBoundingClientRect();
var imgTop = offsets.top;
var imgLeft = offsets.left;
// var offsetsContainer = document.getElementById('subCard1').getBoundingClientRect();
// var imageLeft = imgLeft - offsetsContainer.left;
// var imageTop = imgTop - offsetsContainer.top;
img.src = monURL; // document.getElementById('myimage').getAttribute('src');
img.onload = function () {
context.drawImage(img, imgLeft, imgTop);
};
document.body.appendChild(canvas);
//Canvas2Image.saveAsPNG(canvas, 250, 140);
// window.open(canvas.toDataURL('image/png'));
}
});
}
goToOpComm() {
this.router.navigate(['/opCommercial']);
}
}

@ -42,21 +42,19 @@
<label>Operation Commerciale: {{op.name}}</label>
</div>
<div id="opAvantages">
<label>Avantage parrain:</label>
<label>Avantage filleul:</label>
<label>Avantage parrain: {{op.avantageParrain}}</label>
<label>Avantage filleul: {{op.avantageFilleul}}</label>
</div>
<div id="opLogs">
<label>Carte(s) envoyée(s):</label>
<label>Carte(s) scannée(s):</label>
<label>Carte(s) débitée(s):</label>
<label>Carte(s) envoyée(s): {{op.nbEnvoie}}</label>
<label>Carte(s) scannée(s): {{op.nbScan}}</label>
<label>Carte(s) débitée(s): {{op.nbDebiter}}</label>
</div>
</div>
<div class="col-md-2" id="subCard2Part2">
<button class="btn btn-outline-primary btn-rounded" (click)="goToEnCart(op.uid)">Envoyer</button>
<button class="btn btn-outline-default btn-rounded" (click)="goToScanCart(op.uid)">Scanner</button>
<button class="btn btn-outline-info btn-rounded" (click)="goToDebiterCart(op.uid)">Débiter</button>
<!--<button class="btn btn-outline-info btn-rounded" (click)="sectionToImage(op.carteTemplate.downloadURL, commercant.image.downloadURL)">screenShot</button>-->
</div>
</div>
<div class="card-block col-md-12" id="subCard2Part3">

@ -28,7 +28,7 @@ import { Commercant } from '../../../../models/Commercant';
var $ = require('jquery')(window);
});*/
//import { Image } from '../../../../models/Image';
// import { Image } from '../../../../models/Image';
@Component({
selector: 'app-op-commercial',
templateUrl: './op-commercial.component.html',
@ -44,6 +44,7 @@ export class OpCommercialComponent implements OnInit, OnDestroy {
commercant: Commercant;
constructor(public afAuth: AngularFireAuth, public afDb: AngularFireDatabase,
private router: Router, private authService: AuthService, private opComService: OpCommercialService) {
this.opComm = new OperationCommerciale();
this.user = afAuth.authState;
@ -54,7 +55,7 @@ export class OpCommercialComponent implements OnInit, OnDestroy {
if (auth) {
this.opCommData = this.afDb.list('/OperationCommercial/', {
query: {
orderByChild: 'idCommercant',
orderByChild: 'commercantOpCom/uid',
equalTo: auth.uid.toString()
}
}
@ -92,370 +93,9 @@ export class OpCommercialComponent implements OnInit, OnDestroy {
goToDebiterCart(idOp) {
this.router.navigate(['/debiterCarte', idOp]);
}
goToCarteEnvoyer() {
this.router.navigate(['/historiqueCarte']);
}
sectionToImage(monURL: string) {
/**
* covert canvas to image
* and save the image file
*/
var Canvas2Image = function () {
// check if support sth.
var $support = function () {
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d');
return {
canvas: !!ctx,
imageData: !!ctx.getImageData,
dataURL: !!canvas.toDataURL,
btoa: !!window.btoa
};
}();
var downloadMime = 'image/png';
function scaleCanvas (canvas, width, height) {
var w = canvas.width,
h = canvas.height;
if (width == undefined) {
width = w;
}
if (height == undefined) {
height = h;
}
var retCanvas = document.createElement('canvas');
var retCtx = retCanvas.getContext('2d');
retCanvas.width = width;
retCanvas.height = height;
retCtx.drawImage(canvas, 0, 0, w, h, 0, 0, width, height);
return retCanvas;
}
function getDataURL (canvas, type, width, height) {
canvas = scaleCanvas(canvas, width, height);
return canvas.toDataURL(type);
}
function saveFile (strData) {
document.location.href = strData;
}
function genImage(strData) {
var img = document.createElement('img');
img.src = strData;
return img;
}
function fixType (type) {
type = type.toLowerCase().replace(/jpg/i, 'jpeg');
var r = type.match(/png|jpeg|bmp|gif/)[0];
return 'image/' + r;
}
function encodeData (data) {
if (!window.btoa) { throw 'btoa undefined' }
var str = '';
if (typeof data == 'string') {
str = data;
} else {
for (var i = 0; i < data.length; i ++) {
str += String.fromCharCode(data[i]);
}
}
return btoa(str);
}
function getImageData (canvas) {
var w = canvas.width,
h = canvas.height;
return canvas.getContext('2d').getImageData(0, 0, w, h);
}
function makeURI (strData, type) {
return 'data:' + type + ';base64,' + strData;
}
/**
* create bitmap image
*
*/
var genBitmapImage = function (oData) {
//
// BITMAPFILEHEADER: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx
// BITMAPINFOHEADER: http://msdn.microsoft.com/en-us/library/dd183376.aspx
//
var biWidth = oData.width;
var biHeight = oData.height;
var biSizeImage = biWidth * biHeight * 3;
var bfSize = biSizeImage + 54; // total header size = 54 bytes
//
// typedef struct tagBITMAPFILEHEADER {
// WORD bfType;
// DWORD bfSize;
// WORD bfReserved1;
// WORD bfReserved2;
// DWORD bfOffBits;
// } BITMAPFILEHEADER;
//
var BITMAPFILEHEADER = [
// WORD bfType -- The file type signature; must be "BM"
0x42, 0x4D,
// DWORD bfSize -- The size, in bytes, of the bitmap file
bfSize & 0xff, bfSize >> 8 & 0xff, bfSize >> 16 & 0xff, bfSize >> 24 & 0xff,
// WORD bfReserved1 -- Reserved; must be zero
0, 0,
// WORD bfReserved2 -- Reserved; must be zero
0, 0,
// DWORD bfOffBits -- The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits.
54, 0, 0, 0
];
//
// typedef struct tagBITMAPINFOHEADER {
// DWORD biSize;
// LONG biWidth;
// LONG biHeight;
// WORD biPlanes;
// WORD biBitCount;
// DWORD biCompression;
// DWORD biSizeImage;
// LONG biXPelsPerMeter;
// LONG biYPelsPerMeter;
// DWORD biClrUsed;
// DWORD biClrImportant;
// } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
//
var BITMAPINFOHEADER = [
// DWORD biSize -- The number of bytes required by the structure
40, 0, 0, 0,
// LONG biWidth -- The width of the bitmap, in pixels
biWidth & 0xff, biWidth >> 8 & 0xff, biWidth >> 16 & 0xff, biWidth >> 24 & 0xff,
// LONG biHeight -- The height of the bitmap, in pixels
biHeight & 0xff, biHeight >> 8 & 0xff, biHeight >> 16 & 0xff, biHeight >> 24 & 0xff,
// WORD biPlanes -- The number of planes for the target device. This value must be set to 1
1, 0,
// WORD biBitCount -- The number of bits-per-pixel, 24 bits-per-pixel -- the bitmap
// has a maximum of 2^24 colors (16777216, Truecolor)
24, 0,
// DWORD biCompression -- The type of compression, BI_RGB (code 0) -- uncompressed
0, 0, 0, 0,
// DWORD biSizeImage -- The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps
biSizeImage & 0xff, biSizeImage >> 8 & 0xff, biSizeImage >> 16 & 0xff, biSizeImage >> 24 & 0xff,
// LONG biXPelsPerMeter, unused
0,0,0,0,
// LONG biYPelsPerMeter, unused
0,0,0,0,
// DWORD biClrUsed, the number of color indexes of palette, unused
0,0,0,0,
// DWORD biClrImportant, unused
0,0,0,0
];
var iPadding = (4 - ((biWidth * 3) % 4)) % 4;
var aImgData = oData.data;
var strPixelData = '';
var biWidth4 = biWidth<<2;
var y = biHeight;
var fromCharCode = String.fromCharCode;
do {
var iOffsetY = biWidth4*(y-1);
var strPixelRow = '';
for (var x = 0; x < biWidth; x++) {
var iOffsetX = x<<2;
strPixelRow += fromCharCode(aImgData[iOffsetY+iOffsetX+2]) +
fromCharCode(aImgData[iOffsetY+iOffsetX+1]) +
fromCharCode(aImgData[iOffsetY+iOffsetX]);
}
for (var c = 0; c < iPadding; c++) {
strPixelRow += String.fromCharCode(0);
}
strPixelData += strPixelRow;
} while (--y);
var strEncoded = encodeData(BITMAPFILEHEADER.concat(BITMAPINFOHEADER)) + encodeData(strPixelData);
return strEncoded;
};
/**
* saveAsImage
* @param canvasElement
* @param {String} image type
* @param {Number} [optional] png width
* @param {Number} [optional] png height
*/
var saveAsImage = function (canvas, width, height, type) {
if ($support.canvas && $support.dataURL) {
if (typeof canvas == "string") { canvas = document.getElementById(canvas); }
if (type == undefined) { type = 'png'; }
type = fixType(type);
if (/bmp/.test(type)) {
var data = getImageData(scaleCanvas(canvas, width, height));
var strData = '';
strData = genBitmapImage(data);
saveFile(makeURI(strData, downloadMime));
} else {
var strData = '';
strData = getDataURL(canvas, type, width, height);
saveFile(strData.replace(type, downloadMime));
}
}
};
var convertToImage = function (canvas, width, height, type) {
if ($support.canvas && $support.dataURL) {
if (typeof canvas == "string") { canvas = document.getElementById(canvas); }
if (type == undefined) { type = 'png'; }
type = fixType(type);
if (/bmp/.test(type)) {
var data = getImageData(scaleCanvas(canvas, width, height));
var strData = '';
strData = genBitmapImage(data);
return genImage(makeURI(strData, 'image/bmp'));
} else {
var strData = '';
strData = getDataURL(canvas, type, width, height);
return genImage(strData);
}
}
};
return {
saveAsImage: saveAsImage,
saveAsPNG: function (canvas, width, height) {
return saveAsImage(canvas, width, height, 'png');
},
saveAsJPEG: function (canvas, width, height) {
return saveAsImage(canvas, width, height, 'jpeg');
},
saveAsGIF: function (canvas, width, height) {
return saveAsImage(canvas, width, height, 'gif');
},
saveAsBMP: function (canvas, width, height) {
return saveAsImage(canvas, width, height, 'bmp');
},
convertToImage: convertToImage,
convertToPNG: function (canvas, width, height) {
return convertToImage(canvas, width, height, 'png');
},
convertToJPEG: function (canvas, width, height) {
return convertToImage(canvas, width, height, 'jpeg');
},
convertToGIF: function (canvas, width, height) {
return convertToImage(canvas, width, height, 'gif');
},
convertToBMP: function (canvas, width, height) {
return convertToImage(canvas, width, height, 'bmp');
}
};
}();
/*
html2canvas(document.body).then(canvas => {
var imgData = canvas.toDataURL("image/png");
var context = canvas.getContext('2d');
console.log(imgData);
window.open(imgData);
// this.AddImagesResource(imgData);
// document.body.appendChild(canvas);
});*/
html2canvas(document.getElementById('subCard1'), {
allowTaint: true,
useCORS: true,
logging: true,
onrendered: function(canvas) {
var context = canvas.getContext('2d');
var img = new Image();
var offsets = document.getElementById('subCard1').getBoundingClientRect();
var imgTop = offsets.top;
var imgLeft = offsets.left;
//var offsetsContainer = document.getElementById('subCard1').getBoundingClientRect();
//var imageLeft = imgLeft - offsetsContainer.left;
//var imageTop = imgTop - offsetsContainer.top;
img.src = monURL; // document.getElementById('myimage').getAttribute('src');
img.onload = function() {
context.drawImage(img, imgLeft, imgTop);
};
document.body.appendChild(canvas);
Canvas2Image.saveAsPNG(canvas, 50, 1000);
// window.open(canvas.toDataURL('image/png'));
}
});
/*
$(function() {
$('#btnSave').click(function() {
html2canvas($('#widget'), {
onrendered: function(canvas) {
var context = canvas.getContext('2d'); // returns the 2d context object
var img = new Image(); // creates a variable for a new image
var offsets = document.getElementById('myimage').getBoundingClientRect();
var imgTop = offsets.top;
var imgLeft = offsets.left;
// Find actual position with parent cotainer
var offsetsContainer = document.getElementById('widget').getBoundingClientRect();
var imageLeft = imgLeft - offsetsContainer.left;
var imageTop = imgTop - offsetsContainer.top;
img.src = 'http://www.vulgaris-medical.com/sites/default/files/styles/big-lightbox/public/field/image' +
'/actualites/2016/02/12/le-chat-source-de-bienfaits-pour-votre-sante.jpg'; // specifies the location of the image
img.onload = function() {
context.drawImage(img, imageLeft, imageTop); // draws the image at the specified x and y location
};
// Convert and download as image
var theCanvas = canvas;
document.body.appendChild(canvas);
// Convert and download as image
Canvas2Image.saveAsPNG(canvas);
$('#img-out').append(canvas);
}
});
});
});
*/
/*
html2canvas(document.getElementsByClassName('subCard1'), {
// allowTaint:true,
logging:true,
onrendered: function(canvas) {
var img = new Image();
var testt : string;
img.setAttribute('crossOrigin', 'anonymous');
img = canvas.toDataURL('image/png');
testt = img.toString();
window.open(testt);
}
});
*/
}
ngOnInit() {
}
ngOnDestroy() {}

@ -11,7 +11,7 @@
<div class="card">
<div class="well">
<p class="h5 text-center mb-4">Scanner Carte</p>
<p class="text-center mb-4" style="padding-top: 2%;">Choisissez quelle type de fieulle voulez-vous scanner la carte</p>
<!--<p class="text-center mb-4" style="padding-top: 2%;">Choisissez quelle type de fieulle voulez-vous scanner la carte</p>
<form class="form-inline flex-center">
<div class="md-form" style="padding-left: 2%;">
<input name="group2" type="radio" class="with-gap" id="Newfilleul" value="Newfilleul" (click)="initFilSelect()" [(ngModel)]="radioFilleul">
@ -22,10 +22,10 @@
<label for="FilleulExist">Filleul Existant</label>
</div>
</form>
<!-- Si cest un nouveau filleul -->
Si cest un nouveau filleul
<div *ngIf="radioFilleul === 'Newfilleul'">
<div class="md-form">
<i class="fa fa-user prefix grey-text"></i>
<i class="fa fa-address-card prefix grey-text"></i>
<input type="text" id="orangeForm-Familyname" [(ngModel)]="filleul.idCard" placeholder="ID carte">
</div>
<div class="md-form">
@ -67,18 +67,18 @@
<button class="btn btn-light-green waves-light" [disabled]="email.errors" (click)="registerNewFilleul()">Creer nouveau filleul & scanner carte</button>
<button class="btn btn-cyan" (click)="goToOpComm()">Back</button>
</div>
</div>
</div>-->
<!-- Fin Si cest un nouveau filleul -->
<!-- Si cest un filleul existant -->
<div *ngIf="radioFilleul === 'FilleulExist'">
<div *ngIf="true">
<p>{{filleulSelect}}</p>
<div class="md-form">
<i class="fa fa-user prefix grey-text"></i>
<input
#query
(keyup)="filter(query.value)"
#queryF
(keyup)="filter(queryF.value)"
type="text" class="form-control" placeholder="Cherchez Filleul Existants...">
<div *ngFor="let filleul of filteredFilleulsTest">
<a (click)="getIdFilleul(filleul.uid)">{{filleul.firstname}} {{filleul.familyname}}</a>
@ -89,9 +89,13 @@
</div>
</div>
<div class="md-form" style="padding-top:2%;">
<i class="fa fa-birthday-cake prefix grey-text"></i>
<input type="date" id="orangeForm-Birthday" placeholder="Birthday">
<div class="md-form">
<i class="fa fa-address-card prefix grey-text"></i>
<input
#query
(keyup)="filterCarte(query.value)"
type="text" class="form-control" placeholder="ID carte">
<!--<input type="text" id="orangeForm-Familyname" placeholder="ID carte" [(ngModel)]="carteIDTemp">[(ngModel)]="filleul.idCard"-->
</div>
<label>

@ -34,10 +34,13 @@ export class ScannerCarteComponent implements OnInit, OnDestroy {
localUser: any;
filleul: Filleul;
scan: Scan;
parrain: Parrain;
commercant: Commercant;
opComm: OperationCommerciale;
cartePar: CarteParrainage;
carteIDTemp: string;
commList: FirebaseListObservable<any[]>;
opCommList: FirebaseListObservable<any[]>;
filleulExistList: FirebaseListObservable<any[]>;
@ -46,9 +49,12 @@ export class ScannerCarteComponent implements OnInit, OnDestroy {
/////
filleulTest: Filleul[];
carteTest: Filleul[];
filteredFilleulsTest: any[];
filteredCartesTest: any[];
filleulListTemp = [];
subscription: Subscription;
subscriptionCarte: Subscription;
/////
constructor(public afAuth: AngularFireAuth, public afDb: AngularFireDatabase,
private router: Router, private authService: AuthService,
@ -58,6 +64,7 @@ export class ScannerCarteComponent implements OnInit, OnDestroy {
this.filleulSelect = '';
this.filleul = new Filleul();
this.scan = new Scan();
this.parrain = new Parrain();
this.commercant = new Commercant();
this.cartePar = new CarteParrainage();
this.filleulExistList = null;
@ -96,7 +103,7 @@ export class ScannerCarteComponent implements OnInit, OnDestroy {
});
// fin si parrain affilié
// si parrain exist non affilié
this.filleulExistList = this.afDb.list('/Filleul/', {
this.filleulExistList = this.afDb.list('/Parrain/', {
query: {
orderByChild: 'uid'
}
@ -121,9 +128,26 @@ export class ScannerCarteComponent implements OnInit, OnDestroy {
goToOpComm() {
this.router.navigate(['/opCommercial']);
}
filter(query: string) {
this.filteredFilleulsTest = (query) ?
this.filleulTest.filter(f => (f.firstname.toLowerCase() + f.familyname.toLowerCase()).includes(query.toLowerCase())) :
filterCarte(query: string) {
this.filteredCartesTest = (query) ?
this.carteTest.filter(c => (c.uid).includes(query)) :
[];
if (this.filteredCartesTest !== []){
for(let i = 0; i < this.filteredCartesTest.length;i++){
if (this.filteredCartesTest[i].uid === query) {
console.log('succes id carte est: ' + this.filteredCartesTest[i].uid);
console.log('succes le parrain de la carte est: ' + this.filteredCartesTest[i].parrainCarte.firstname);
this.cartePar = this.filteredCartesTest[i];
this.parrain = this.filteredCartesTest[i].parrainCarte;
}else{
console.log('echec de la carte ! ');
}
}
}
}
filter(queryF: string) {
this.filteredFilleulsTest = (queryF) ?
this.filleulTest.filter(f => (f.firstname.toLowerCase() + f.familyname.toLowerCase()).includes(queryF.toLowerCase())) :
[];
}
registerNewFilleul(){
@ -132,13 +156,15 @@ export class ScannerCarteComponent implements OnInit, OnDestroy {
console.log(this.filleul.familyname);
this.filleul.status = 'Filleul';
this.filleul.uid = firebase.database().ref().child('Filleul').push().key;
const userRef = this.databaseRef.child('Filleul').child(this.filleul.uid);
this.filleul.uid = firebase.database().ref().child('Parrain').push().key;
const userRef = this.databaseRef.child('Parrain').child(this.filleul.uid);
userRef.set(this.filleul);
this.scanCarteFil();
}
scanCarteFil(){
scanCarteFil() {
this.scan.uid = firebase.database().ref().child('Scan').push().key;
this.scan.dateCreation = new Date (Date.now());
this.scan.carteParrainID = this.filleul.idCard;
this.scan.carteFilleulID = this.filleul.idCard;
console.log(Date.now());
@ -151,6 +177,25 @@ export class ScannerCarteComponent implements OnInit, OnDestroy {
console.log(this.scan.valeurFilleul);
const userRef = this.databaseRef.child('Scan').child(this.scan.uid);
userRef.set(this.scan);
this.updateCarte();
}
updateCarte() {
console.log(+this.cartePar.avantageCumule);
this.cartePar.avantageCumule = ((+this.cartePar.avantageCumule) + (+this.opComm.avantageParrain)).toString();
console.log(this.cartePar.avantageCumule);
console.log('carte iiiiid: ' + this.cartePar.uid);
const carteRef = this.databaseRef.child('CarteParrainage').child(this.cartePar.uid.toString()).child('avantageCumule');
carteRef.set(this.cartePar.avantageCumule);
this.opComm.nbScan = ((+this.opComm.nbScan) + 1).toString();
console.log(this.opComm.nbScan);
const opEnvRef = this.databaseRef.child('OperationCommercial').child(this.opComm.uid.toString()).child('nbScan');
opEnvRef.set(this.opComm.nbScan);
}
getIdFilleul(filUid) {
@ -170,18 +215,21 @@ export class ScannerCarteComponent implements OnInit, OnDestroy {
}
ngOnInit() {
this.subscription = this.opComService.getFilleuls()
.subscribe(filleuls => this.filleulTest = filleuls);
this.subscription = this.opComService.getParrains()
.subscribe(parrains => this.filleulTest = parrains);
this.subscriptionCarte = this.opComService.getCartes()
.subscribe(cartes => this.carteTest = cartes);
}
ngOnDestroy() {
this.subscription.unsubscribe();
this.subscriptionCarte.unsubscribe();
this.radioFilleul = '';
this.cartePar = {
uid: '',
name: '',
parrainID: '',
commercantID: '',
parrainCarte: new Parrain(),
commercantCarte: new Commercant(),
operationCommercialID: '',
dateDebut: new Date(),
dateFin: new Date(),

@ -1,25 +0,0 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PrintComponent } from './print.component';
describe('PrintComponent', () => {
let component: PrintComponent;
let fixture: ComponentFixture<PrintComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ PrintComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PrintComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -1,15 +0,0 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-print',
templateUrl: './print.component.html',
styleUrls: ['./print.component.scss']
})
export class PrintComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}

@ -39,6 +39,7 @@ export class RegisterComponent implements OnInit, OnDestroy {
this.test = true;
}else if (this.currentUser.status === 'Commercant') {
this.commercant.status = this.currentUser.status;
this.commercant.dateInscription = new Date (Date.now());
this.authService.signUp(this.commercant);
this.test = true;
}else if (this.test) {

@ -0,0 +1,15 @@
import { TestBed, async, inject } from '@angular/core/testing';
import { AuthGuard } from './auth.guard';
describe('AuthGuard', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [AuthGuard]
});
});
it('should ...', inject([AuthGuard], (guard: AuthGuard) => {
expect(guard).toBeTruthy();
}));
});

@ -0,0 +1,21 @@
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { AuthService } from '../services/auth/auth.service';
import { Router } from '@angular/router';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private auth: AuthService, private router: Router){}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (this.auth.authenticated){
return true;
}
console.log('access denied!');
this.router.navigate(['/']);
return false;
}
}

@ -9,6 +9,7 @@ import * as firebase from 'firebase/app';
// import * as functions from 'firebase-functions';
// import * as functions from 'firebase/functions';
import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database';
import { User } from '../../../models/User';
@ -32,14 +33,24 @@ export class AuthService {
test: string;
uti: firebase.User;
authState: firebase.User;
@Input() folder: string;
//fileList: FirebaseListObservable<Image[]>;
constructor(private http: HttpModule, public afAuth: AngularFireAuth, public afDb: AngularFireDatabase, public router: Router) {
constructor(private http: HttpModule, private afAuth: AngularFireAuth, private afDb: AngularFireDatabase, private router: Router) {
this.parrain = new Parrain();
afAuth.authState.subscribe(
(auth) => {
this.authState = auth;
});
this.databaseRef = firebase.database().ref();
//var nodemailer = require('nodemailer');
}
get authenticated(): boolean {
return this.authState !== null;
}
saveInfo(user: firebase.User, infoUser: any) {
if (infoUser.status === 'Parrain') {
const userRef = this.databaseRef.child('Parrain').child(user.uid);

@ -2,7 +2,7 @@ import { Injectable, Input } from '@angular/core';
import { Router } from '@angular/router';
import { FormsModule } from '@angular/forms';
import { HttpModule, Headers } from '@angular/http';
import * as html2canvas from 'html2canvas';
// import { Component, OnInit, OnDestroy, Input } from '@angular/core';
import { Observable } from 'rxjs/Observable';
@ -47,6 +47,15 @@ export class OpCommercialService {
);
}
getCartes(): FirebaseListObservable<any> {
return this.afDb.list('/CarteParrainage/', {
query: {
orderByChild: 'uid'
}
}
);
}
getFilleuls(): FirebaseListObservable<any> {
return this.afDb.list('/Filleul/', {
query: {
@ -62,8 +71,66 @@ export class OpCommercialService {
let updates = {};
updates['/CarteParrainage/' + infoCartePar.uid] = infoCartePar;
firebase.database().ref().update(updates);
// this.saveImg(infoCartePar);
}
/*
saveImg(infoCartePar: CarteParrainage) {
var monImg: File;
html2canvas(document.getElementById('subCard1'), {
allowTaint: true,
useCORS: true,
logging: true,
onrendered: function (canvas) {
var context = canvas.getContext('2d');
var img = new Image();
var offsets = document.getElementById('subCard1').getBoundingClientRect();
var imgTop = offsets.top;
var imgLeft = offsets.left;
img.onload = function () {
context.drawImage(img, imgLeft, imgTop);
};
img.name = 'monImageCarte';
firebase.database().ref('specifyfolder/').set({ // folder you want send it to
thumbnail: canvas.toDataURL('image/png')
});
document.body.appendChild(canvas);
window.open(canvas.toDataURL('image/png'));
monImg = canvas;
}
});
}*/
/*
uploadCarte(infoCartePar: CarteParrainage, img: File) {
// Create a root reference
let storageRef = firebase.storage().ref();
let success = false;
this.folder = '/CarteParrainage/' + infoCartePar.uid + '/carteTemplate';
let theNameOfFile = 'carteTemplate';
// This currently only grabs item 0, TODO refactor it to grab them all
console.log(img);
// Make local copies of services because "this" will be clobbered
let router = this.router;
let folder = this.folder;
let path = `${this.folder}`;
let iRef = storageRef.child(path);
iRef.put(img).then((snapshot) => {
let updates = {};
infoCartePar.carteTemplate.path = path;
infoCartePar.carteTemplate.filename = infoCartePar.name;
infoCartePar.carteTemplate.downloadURL = snapshot.downloadURL;
updates[folder] = infoCartePar.carteTemplate;
firebase.database().ref().update(updates);
});
}
*/
saveOpComm(user: firebase.User, infoOpCom: OperationCommerciale) {
infoOpCom.uid = firebase.database().ref().child('OperationCommercial').push().key;

@ -1,11 +1,13 @@
//nouvelle operation commercial / nouvelle carte
import { FireImg } from './FireImg';
import { Commercant } from './Commercant';
import { Parrain } from './Parrain';
export class CarteParrainage
{
uid: string;
name: string;
parrainID: string;
commercantID: string;
parrainCarte: Parrain;
commercantCarte: Commercant;
operationCommercialID: string;
dateDebut: Date;
dateFin: Date;
@ -18,8 +20,8 @@ export class CarteParrainage
constructor() {
this.uid = '';
this.name = '';
this.parrainID = '';
this.commercantID = '';
this.parrainCarte = new Parrain();
this.commercantCarte = new Commercant();
this.operationCommercialID = '';
this.dateDebut = new Date();
this.dateFin = new Date();

@ -1,9 +1,10 @@
import { FireImg } from './FireImg';
import { Commercant } from './Commercant';
export class OperationCommerciale
{
uid: string;
name: string;
idCommercant: string;
commercantOpCom: Commercant;
dateDebut: Date;
dateFin: Date;
carteTemplate: FireImg;
@ -14,11 +15,14 @@ export class OperationCommerciale
deviseAvantageFilleul: string;
tarifXJCFilleul: string;
status: string;
nbScan: string;
nbEnvoie: string;
nbDebiter: string;
constructor() {
this.uid = '';
this.name = '';
this.idCommercant = '';
this.commercantOpCom = new Commercant();
this.dateDebut = new Date();
this.dateFin = new Date();
this.carteTemplate = new FireImg();
@ -29,6 +33,9 @@ export class OperationCommerciale
this.deviseAvantageFilleul = '';
this.tarifXJCFilleul = '';
this.status = '';
this.nbScan = '0';
this.nbEnvoie = '0';
this.nbDebiter = '0';
}
/*
addParrain(addStatus, addEmail, addFamilyname, addFirstname) {

Loading…
Cancel
Save