PageSourceSearch

https://boutique.lascene.com/core/aboshop/customer.factory.js?v=

js lascene.com collected 2026-10-02 18:48:19 UTC 123,417 bytes, 3,192 lines download raw bytes

1'use strict'; //
2
3
4// 761110
5// 35000
6
7// ****************************************************
8//  Gestion des Produits
9// ****************************************************
10angular.module('AboShopApp').factory('customerManager', ['vcRecaptchaService','$q','TbsWS','commonConfig', '$rootScope', 'Auth', 'cartManager', 'formulaireManager', 'dataManager', '$filter', 'googleTagManager',function (vcRecaptchaService, $q, TbsWS, commonConfig, $rootScope, Auth, cartManager, formulaireManager, dataManager, $filter, googleTagManager) {
11
12		var factory = {};
13		factory.MIN_LENGTH_PHONENUMBER = 10;
14		factory.MAX_LENGTH_PHONENUMBER = 15;
15		factory.MIN_LENGTH_PASSWORD = 8;
16		factory.MAX_LENGTH_PASSWORD = 40;
17		factory.MAX_LENGTH_EMAIL = 80;
18
19		factory.CUSTOMER_STATUS_CREATE = "create";
20		factory.CUSTOMER_STATUS_UPDATE = "update";
21		factory.CUSTOMER_STATUS_UPDATE_BURNED = "update_burned";
22		factory.CUSTOMER_STATUS_ERROR = "error";
23		factory.CUSTOMER_STATUS_EXISTS = "exists";
24
25		factory.COMMENT_STATUS_CREATE = "create";
26		factory.COMMENT_STATUS_ERROR = "error";
27
28		factory.ADDRESS_STATUS_CREATE = "create";
29		factory.ADDRESS_STATUS_EDIT = "edit";
30		factory.ADDRESS_STATUS_DELETE = "delete";
31		factory.ADDRESS_STATUS_ERROR_COUNTRY = "error_country";
32
33		factory.SUSPENSION_STATUS_CREATE = "create";
34		factory.SUSPENSION_STATUS_DELETE = "delete";
35		factory.SUSPENSION_STATUS_ERROR = "error";
36		factory.SUSPENSION_STATUS_ERROR_DURATION = "error_duration";
37		factory.SUSPENSION_STATUS_ERROR_NOT_SUSPENDED = "error_not_suspended";
38
39		factory.ACCES_BENEFICIAIRE_STATUS_CREATE = "create";
40		factory.ACCES_BENEFICIAIRE_STATUS_EXISTS = "exists";
41		factory.ACCES_BENEFICIAIRE_STATUS_DELETE = "delete";
42		factory.ACCES_BENEFICIAIRE_STATUS_ERROR = "error";
43
44		factory.NEWSLETTER_SUBSCRIBE_EXISTS = "exists";
45		factory.NEWSLETTER_SUBSCRIBE_EXISTS_BUT_NOT_VALID = "existsbutnotvalid";
46		factory.NEWSLETTER_SUBSCRIBE_CREATE = "create";
47
48		factory.FORGET_MAIL_UNKNOWN = "MAIL_UNKNOW";
49		factory.FORGET_MAIL_SEND = "MAIL_OK";
50
51		factory.LOGIN_EMAIL_PASSWORD = "email_password";
52
53		factory.LOGIN = "#LOGIN#";
54		factory.LOGIN_OK = factory.LOGIN+"OK";
55
56
57		factory.LOGIN_MAIL_CP = factory.LOGIN+"MAIL_CP";
58		factory.LOGIN_CODE_MDP_NOMAIL = factory.LOGIN+"CODE_MDP_NOMAIL";
59		factory.LOGIN_CODE_MDP_WITHMAIL = factory.LOGIN+"CODE_MDP_WITHMAIL";
60		factory.LOGIN_CODE_CP_NOMAIL = factory.LOGIN+"CODE_CP_NOMAIL";
61		factory.LOGIN_CODE_CP_WITHMAIL = factory.LOGIN+"CODE_CP_WITHMAIL";
62		factory.PASSWORD_UNSECURE = "PASSWORD_UNSECURE";
63		factory.PASSWORD_EXPIRED = "PASSWORD_EXPIRED";
64		factory.LOGIN_PASSWORD_UNSECURE = factory.LOGIN + factory.PASSWORD_UNSECURE;
65		factory.LOGIN_PASSWORD_EXPIRED = factory.LOGIN + factory.PASSWORD_EXPIRED;
66
67		factory.LIEN_EXPIRE = "LIEN_EXPIRE";
68
69
70		factory.SHARE_SEND = "share_send";
71
72		factory.routingSpecific = function routingSpecific(success){
73
74			/*if($rootScope.signin.keepLogin == true){
75        		$rootScope.signin.login = "";
76        		$rootScope.signin.password = "";
77    		}*/
78			var res = success.split("##"), tab=[],data={},elem=[];
79			if(res.length == 2){
80				tab = res[1].split("#");
81				for(var i =0;i<tab.length;i++){
82					elem = tab[i].split("=");
83					if(elem.length == 2){
84						data[elem[0]] = elem[1];
85					}
86				}
87			}
88
89			if(success.startsWith(factory.LOGIN_MAIL_CP)) {
90    			$rootScope.signin.resetInProgress();
91    			_processRetour(data);
92				$rootScope.goPage(undefined, 'common/logingetpassword');
93			} else if(success.startsWith(factory.LOGIN_CODE_MDP_NOMAIL)) {
94    			$rootScope.signin.resetInProgress();
95    			_processRetour(data);
96				$rootScope.goPage(undefined, 'common/logingetemail');
97			} else if(success.startsWith(factory.LOGIN_CODE_MDP_WITHMAIL)) {
98    			$rootScope.signin.resetInProgress();
99    			_processRetour(data);
100				$rootScope.goPage(undefined, 'common/logininfo');
101			} else if(success.startsWith(factory.LOGIN_CODE_CP_NOMAIL)) {
102    			$rootScope.signin.resetInProgress();
103    			_processRetour(data);
104				$rootScope.goPage(undefined, 'common/logingetemailpwd');
105			} else if(success.startsWith(factory.LOGIN_CODE_CP_WITHMAIL)) {
106    			$rootScope.signin.resetInProgress();
107    			_processRetour(data);
108				$rootScope.goPage(undefined, 'common/logingetpasswordcp');
109			} else if(success.startsWith(factory.LOGIN_PASSWORD_UNSECURE)) {
110				$rootScope.signin.resetInProgress();
111				_processRetour(data);
112				$rootScope.goPage(undefined, 'common/passwordnonconforme');
113			} else if(success.startsWith(factory.LOGIN_PASSWORD_EXPIRED)) {
114				if($rootScope.signin.error) {
115					$rootScope.signin.error.error_description = 'DICO_PASSWORD_EXPIRED_SEND_EMAIL';
116				}
117				//$rootScope.signin.resetInProgress();
118				//_processRetour(data);
119				//$rootScope.goPage(undefined, 'common/passwordexpired');
120			}
121		};
122
123		function _processRetour(data){
124			$rootScope.signin.mail = data.mail;
125			$rootScope.signin.civilite = data.civilite;
126			$rootScope.signin.nom = data.nom;
127			$rootScope.signin.prenom = data.prenom;
128			if($rootScope.signin.nom === undefined && $rootScope.signin.prenom === undefined){
129				$rootScope.signin.civilite = undefined;
130			}
131		}
132
133        function _getCustomerFromForm(customerForm, withAddress, customerOld) {
134
135        	var customer = {},civilites,ob;
136
137        	customer.codeClient = customerForm.others.codeClient;
138        	customer.password = formulaireManager.getDefaultValue(_.findWhere(customerForm.fields, {name: "password"}),(customerOld !== undefined ? customerOld.password : null));
139        	customer.email = formulaireManager.getDefaultValue(_.findWhere(customerForm.fields, {name: "email"}),(customerOld !== undefined ? customerOld.email : null));
140        	customer.codeExterne = formulaireManager.getDefaultValue(_.findWhere(customerForm.fields, {name: "codeexterne"}),(customerOld !== undefined ? customerOld.codeexterne : null));
141        	customer.siret = formulaireManager.getDefaultValue(_.findWhere(customerForm.fields, {name: "siret"}),(customerOld !== undefined ? customerOld.siret : null));
142        	customer.pseudo = formulaireManager.getDefaultValue(_.findWhere(customerForm.fields, {name: "pseudo"}),(customerOld !== undefined ? customerOld.pseudo : null));
143        	customer.codeNii = formulaireManager.getDefaultValue(_.findWhere(customerForm.fields, {name: "codenii"}),(customerOld !== undefined ? customerOld.codenii : null));
144			customer.langue = formulaireManager.getDefaultValue(_.findWhere(customerForm.fields, {name: "langue"}),(customerOld !== undefined ? customerOld.langue : $rootScope.preferredLanguage));
145
146        	//customer.statut = "";
147        	customer.adresses = [];
148        	if(withAddress){
149        		customer.adresses.push(_getAdresseFromForm(customerForm));
150        	}
151        	customer.listWCS = [];
152        	_getCSFromForm(customerForm.csBlockPrincipal,customer.listWCS);
153        	_getCSFromForm(customerForm.csOptionnal,customer.listWCS);
154        	return customer;
155        };
156
157		factory.getShareForm = function getShareForm(title,url){
158			var shareForm = {},ob={};
159			shareForm.alert = {};
160			shareForm.alert.message = [];
161        	shareForm.success = {};
162        	shareForm.success.message = [];
163			shareForm.fields = [];
164			shareForm.others = {};
165			shareForm.others.title = title;
166			shareForm.others.url = url;
167
168			var share = dataManager.getShareData();
169
170			ob={};
171			formulaireManager.createEmail("email",ob,(share.email!==undefined?share.email:""),'DICO_SHARE_SON_EMAIL',true,"text",0,factory.MAX_LENGTH_EMAIL);
172			shareForm.fields.push(ob);
173
174			ob={};
175			formulaireManager.createTextField("name",ob,(share.name!==undefined?share.name:""),'DICO_SHARE_VOTRE_NOM',true,"text",0,80);
176			shareForm.fields.push(ob);
177
178			ob={};
179			formulaireManager.createTextArea("message",ob,(share.message!==undefined?share.message:""),'DICO_SHARE_VOTRE_MESSAGE',5,true,"text",70,500);
180			shareForm.fields.push(ob);
181
182			return shareForm;
183		};
184
185		function _getUpdateCustomerFromForm(newEmailForm) {
186			var updateCustomer = {},civilites,ob;
187
188        	if(newEmailForm.others.codeclient !== undefined){
189        		updateCustomer.codeClient = newEmailForm.others.codeclient;
190        	}
191        	updateCustomer.email = formulaireManager.getDefaultValue(_.findWhere(newEmailForm.fields, {name: "email"}),"");
192        	if(newEmailForm.others.password !== undefined){
193        		updateCustomer.password = newEmailForm.others.password;
194        	} else {
195        		updateCustomer.password = formulaireManager.getDefaultValue(_.findWhere(newEmailForm.fields, {name: "password"}),"");
196        	}
197			if(newEmailForm.others.jeton !== undefined){
198				updateCustomer.jeton = newEmailForm.others.jeton;
199			}
200
201        	return updateCustomer;
202		}
203
204		factory.getEmailForm = function getEmailForm(){
205
206			var newloginForm = {},ob={};
207			newloginForm.fields = [];
208			newloginForm.others = {};
209
210			var customer = dataManager.getSetEmailData();
211
212			if($rootScope.signin.mail !== undefined)customer.email = $rootScope.signin.mail;
213			if($rootScope.signin.civilite !== undefined)customer.civilite = $rootScope.signin.civilite;
214			if($rootScope.signin.nom !== undefined)customer.nom = $rootScope.signin.nom;
215			if($rootScope.signin.prenom !== undefined)customer.prenom = $rootScope.signin.prenom;
216
217			ob={};
218			formulaireManager.createEmail("email",ob,(customer.email!==undefined?customer.email:""),"DICO_CUSTOMER_EMAIL", true,"text", 0, factory.MAX_LENGTH_EMAIL);
219			newloginForm.others.civilite = (customer.civilite!==undefined?customer.civilite:"");
220			newloginForm.others.nom = (customer.nom!==undefined?customer.nom:"");
221			newloginForm.others.prenom = (customer.prenom!==undefined?customer.prenom:"");
222
223			ob.editable = false;
224			newloginForm.fields.push(ob);
225
226			return newloginForm;
227		};
228
229		factory.getSetEmailForm = function getSetEmailForm(){
230			var newloginForm = {},ob={};
231			newloginForm.alert = {};
232			newloginForm.alert.message = [];
233        	newloginForm.success = {};
234        	newloginForm.success.message = [];
235			newloginForm.fields = [];
236			newloginForm.others = {};
237
238			if(!Auth.isClientConnecte()){
239				formulaireManager.createCaptcha(newloginForm,true,"newloginForm");
240			}
241
242			var customer = dataManager.getSetEmailData();
243
244			if($rootScope.signin.mail !== undefined)customer.email = $rootScope.signin.mail;
245			if($rootScope.signin.civilite !== undefined)customer.civilite = $rootScope.signin.civilite;
246			if($rootScope.signin.nom !== undefined)customer.nom = $rootScope.signin.nom;
247			if($rootScope.signin.prenom !== undefined)customer.prenom = $rootScope.signin.prenom;
248
249			newloginForm.others.codeclient = $rootScope.signin.login;
250        	newloginForm.others.password = $rootScope.signin.password;
251        	newloginForm.others.civilite = (customer.civilite!==undefined?customer.civilite:"");
252			newloginForm.others.nom = (customer.nom!==undefined?customer.nom:"");
253			newloginForm.others.prenom = (customer.prenom!==undefined?customer.prenom:"");
254
255			ob={};
256			formulaireManager.createEmail("email",ob,(customer.email!==undefined?customer.email:""),"DICO_CUSTOMER_EMAIL", true,"text", 0, factory.MAX_LENGTH_EMAIL);
257			newloginForm.fields.push(ob);
258
259			return newloginForm;
260		};
261
262		factory.getSetEmailPasswordForm = function getSetEmailPasswordForm(){
263			var newloginForm = {},ob={};
264			newloginForm.alert = {};
265			newloginForm.alert.message = [];
266        	newloginForm.success = {};
267        	newloginForm.success.message = [];
268			newloginForm.fields = [];
269			newloginForm.others = {};
270
271			if(!Auth.isClientConnecte()){
272				formulaireManager.createCaptcha(newloginForm,true,"newloginForm");
273			}
274
275			var customer = dataManager.getSetEmailData();
276
277			if($rootScope.signin.mail !== undefined)customer.email = $rootScope.signin.mail;
278			if($rootScope.signin.civilite !== undefined)customer.civilite = $rootScope.signin.civilite;
279			if($rootScope.signin.nom !== undefined)customer.nom = $rootScope.signin.nom;
280			if($rootScope.signin.prenom !== undefined)customer.prenom = $rootScope.signin.prenom;
281
282			newloginForm.others.codeclient = $rootScope.signin.login;
283			newloginForm.others.civilite = (customer.civilite!==undefined?customer.civilite:"");
284			newloginForm.others.nom = (customer.nom!==undefined?customer.nom:"");
285			newloginForm.others.prenom = (customer.prenom!==undefined?customer.prenom:"");
286
287			ob={};
288			formulaireManager.createEmail("email",ob,(customer.email!==undefined?customer.email:""),"DICO_CUSTOMER_EMAIL", true,"text", 0, factory.MAX_LENGTH_EMAIL);
289			newloginForm.fields.push(ob);
290
291        	ob = {};
292			formulaireManager.createPassword("password",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_MOTDEPASSE",true,"text", factory.MIN_LENGTH_PASSWORD, factory.MAX_LENGTH_PASSWORD);
293			newloginForm.fields.push(ob);
294
295			ob = {};
296			formulaireManager.createPassword("confirmpassword",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_CONFIRM_MOTDEPASSE",true,"text", 0, factory.MAX_LENGTH_PASSWORD);
297			newloginForm.fields.push(ob);
298
299			return newloginForm;
300		};
301
302		factory.getSendEmailForm = function getSendEmailForm(withPassAndConfirm=false, withEditableEmail=false, withEmail=true){
303			let newloginForm = {},ob={};
304			newloginForm.alert = {};
305			newloginForm.alert.message = [];
306        	newloginForm.success = {};
307        	newloginForm.success.message = [];
308			newloginForm.fields = [];
309			newloginForm.others = {};
310
311			var customer = dataManager.getSetEmailData();
312
313			if($rootScope.signin.mail !== undefined)customer.email = $rootScope.signin.mail;
314			if($rootScope.signin.civilite !== undefined)customer.civilite = $rootScope.signin.civilite;
315			if($rootScope.signin.nom !== undefined)customer.nom = $rootScope.signin.nom;
316			if($rootScope.signin.prenom !== undefined)customer.prenom = $rootScope.signin.prenom;
317
318			if(withEmail) {
319				ob = {};
320				formulaireManager.createEmail("email", ob, (customer.email !== undefined ? customer.email : ""), "DICO_CUSTOMER_EMAIL", true, "text", 0, factory.MAX_LENGTH_EMAIL);
321				ob.editable = withEditableEmail;
322				newloginForm.fields.push(ob);
323			}
324
325			if(withPassAndConfirm){
326				ob = {};
327				formulaireManager.createPassword("password",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_LOGGED_MOTDEPASSE",true,"text", factory.MIN_LENGTH_PASSWORD, factory.MAX_LENGTH_PASSWORD);
328				newloginForm.fields.push(ob);
329
330				ob = {};
331				formulaireManager.createPassword("confirmpassword",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_CONFIRM_MOTDEPASSE",true,"text",0, factory.MAX_LENGTH_PASSWORD);
332				newloginForm.fields.push(ob);
333			}
334
335			newloginForm.others.civilite = (customer.civilite!==undefined?customer.civilite:"");
336			newloginForm.others.nom = (customer.nom!==undefined?customer.nom:"");
337			newloginForm.others.prenom = (customer.prenom!==undefined?customer.prenom:"");
338
339			return newloginForm;
340		};
341
342		factory.getModifyPasswordForm = function getModifyPasswordForm(dataStr, jeton){
343			var tab=[],data={},elem=[];
344			tab = dataStr.split("#");
345			for(var i =0;i<tab.length;i++){
346				elem = tab[i].split("=");
347				if(elem.length == 2){
348					data[elem[0]] = elem[1];
349				}
350			}
351			_processRetour(data);
352			let newloginForm = this.getSendEmailForm(true, false, true);
353			if (jeton && newloginForm && newloginForm.others) {
354				newloginForm.others.jeton = jeton;
355			}
356			return newloginForm;
357		};
358
359		factory.getSetPasswordForm = function getSetPasswordForm(){
360			var newloginForm = {},ob={};
361			newloginForm.alert = {};
362			newloginForm.alert.message = [];
363        	newloginForm.success = {};
364        	newloginForm.success.message = [];
365			newloginForm.fields = [];
366			newloginForm.others = {};
367
368			if(!Auth.isClientConnecte()){
369				formulaireManager.createCaptcha(newloginForm,true,"newloginForm");
370			}
371
372			var customer = dataManager.getSetEmailData();
373
374			if($rootScope.signin.mail !== undefined)customer.email = $rootScope.signin.mail;
375			if($rootScope.signin.civilite !== undefined)customer.civilite = $rootScope.signin.civilite;
376			if($rootScope.signin.nom !== undefined)customer.nom = $rootScope.signin.nom;
377			if($rootScope.signin.prenom !== undefined)customer.prenom = $rootScope.signin.prenom;
378
379			ob={};
380			formulaireManager.createEmail("email",ob,(customer.email!==undefined?customer.email:""),"DICO_CUSTOMER_EMAIL", true,"text", 0, factory.MAX_LENGTH_EMAIL);
381			ob.editable = false;
382			newloginForm.fields.push(ob);
383
384        	ob = {};
385			formulaireManager.createPassword("password",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_MOTDEPASSE",true,"text", factory.MIN_LENGTH_PASSWORD, factory.MAX_LENGTH_PASSWORD);
386			newloginForm.fields.push(ob);
387
388			ob = {};
389			formulaireManager.createPassword("confirmpassword",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_CONFIRM_MOTDEPASSE",true,"text", 0, factory.MAX_LENGTH_PASSWORD);
390			newloginForm.fields.push(ob);
391
392			newloginForm.others.civilite = (customer.civilite!==undefined?customer.civilite:"");
393			newloginForm.others.nom = (customer.nom!==undefined?customer.nom:"");
394			newloginForm.others.prenom = (customer.prenom!==undefined?customer.prenom:"");
395
396			return newloginForm;
397		};
398
399		factory.sharePage = function sharePage(shareForm){
400			var deferred = $q.defer(),
401        		shareMessage = {};
402
403			shareForm.alert.message = [];
404
405        	if(!formulaireManager.verifForm(shareForm)){
406        	deferred.resolve(false);
407        	} else {
408        		shareMessage.titre=shareForm.others.title;
409        		shareMessage.url=shareForm.others.url;
410
411				shareMessage.email = formulaireManager.getDefaultValue(_.findWhere(shareForm.fields, {name: "email"}),"");
412	        	shareMessage.nom = formulaireManager.getDefaultValue(_.findWhere(shareForm.fields, {name: "name"}),"");
413	        	shareMessage.message = formulaireManager.getDefaultValue(_.findWhere(shareForm.fields, {name: "message"}),"");
414
415	        	TbsWS.call('sharepage','public',shareMessage).then(
416	        		function(result){
417	        			shareForm.alert.message = [];
418				        if(result && result.key === "sharepage"){
419							var status = result.value;
420				          	if(!status || status === undefined){
421				          		shareForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
422				          		deferred.resolve(false);
423				          	} else {
424			          			status = status.replace(/"/g,'');
425				          		if(status == factory.SHARE_SEND){
426					        		deferred.resolve(true);
427					          	} else {
428					          		shareForm.alert.message.push("DICO_ERREUR_CUSTOMER_SHARE_MESSAGE");
429					        		deferred.resolve(false);
430					          	}
431				          	}
432						} else {
433							deferred.resolve(false);
434						}
435			          }
436			          ,function(error) {
437			          	shareForm.alert.message.push("DICO_ERREUR_CUSTOMER_SHARE_MESSAGE");
438			          	deferred.resolve(false);
439			        }
440		        );
441	        }
442	        return deferred.promise;
443		};
444
445        function _getAdresseFromForm(adresseForm) {
446
447        	var adresse = {},
448        		territoire,
449        		civilites,
450        		ob,
451        		type;
452
453        	adresse.estPrincipale = adresseForm.others.estPrincipale;
454
455        	adresse.estLivraison = adresseForm.others.estLivraison;
456        	adresse.estParrainnage = adresseForm.others.estParrainnage;
457
458        	type = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "type"}),"");
459        	if(type !== ""){
460        		if(type === "delivery"){
461        			adresse.estLivraison = true;
462        		} else {
463        			adresse.estLivraison = false;
464        		}
465        	}
466
467			if(adresseForm.others.refAdresse === undefined){
468        		adresse.refAdresse = null;
469			} else {
470				adresse.refAdresse = adresseForm.others.refAdresse;
471			}
472			if(adresseForm.others.codeClient === undefined){
473        		adresse.codeClient = null;
474			} else {
475				adresse.codeClient = adresseForm.others.codeClient;
476			}
477			adresse.titreAdresse = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "title"}),"Principale");
478        	adresse.adresse1 = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "address1"}),"");
479        	adresse.adresse2 = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "address2"}),"");
480        	adresse.adresse3 = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "address3"}),"");
481        	adresse.adresse4 = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "address4"}),"");
482        	adresse.codepostal = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "codepostal"}),"");
483        	adresse.region = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "country"}),"");
484        	adresse.ville = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "city"}),"");
485
486        	adresse.societe = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "company"}),"");
487
488        	civilites = _.findWhere(adresseForm.fields, {name: "civilite"});
489        	if(civilites.value !== undefined && civilites.value !== null && civilites.value !== ""){
490        		ob = _.findWhere(civilites.values, {value: civilites.value});
491        		adresse.civilite = ob.label;
492        	}
493
494        	adresse.nom = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "name"}),"");
495        	adresse.prenom = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "firstname"}),"");
496
497        	territoire = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "state"}),"");
498        	if(territoire !== undefined){
499        		adresse.codeIso = territoire.codeIso;
500          		if($rootScope.preferredLanguage == 'fr'){
501					adresse.pays = territoire.nomTerritoire;
502          		} else {
503          			adresse.pays = territoire.nomTerritoireUs;
504          		}
505
506        	}
507        	adresse.telephone = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "phonenumber"}),"");
508        	adresse.telecopie = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "faxnumber"}),"");
509        	adresse.portable = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "mobilphonenumber"}),"");
510
511        	if(adresse.estParrainnage === true){
512        		adresse.email = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "email"}),"");
513        		adresse.envoieEmailBeneficiaire = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "envoieemail"}),false);
514        	} else {
515        		adresse.email = "";
516        		adresse.envoieEmailBeneficiaire=false;
517        	}
518
519        	adresse.dateDebut = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "datedebut"}),null);
520        	adresse.dateFin = formulaireManager.getDefaultValue(_.findWhere(adresseForm.fields, {name: "datefin"}),null);
521
522			return adresse;
523        };
524
525        function _getCSFromForm(csForm,listWCS) {
526
527        	var cs = {};
528
529        	for(var i = 0; i< csForm.length;i++){
530        		if(csForm[i].value !== undefined){
531	        		cs = {};
532	        		cs.keyCS = csForm[i].key;
533	        		cs.refInterneCS = csForm[i].refInterneCS;
534	        		cs.typeCS = csForm[i].typeCs;
535	    			if(csForm[i].value !== undefined && cs.typeCS !== 'F'){
536	        			//Booleen
537		        		if(csForm[i].typeSaisie == "3"){
538		        			cs.value = (csForm[i].value?'true':'false');
539		        		}
539 else if (cs.typeCS === 'D' && angular.isDate(csForm[i].value)) {
540		        			var date = csForm[i].value;
541		        			date.setMinutes(date.getMinutes()-date.getTimezoneOffset())
542		        			cs.value = date.toJSON().substr(0, 10);
543		        		} else {
544		        			cs.value = csForm[i].value;
545		        		}
546	        		}
547	    			listWCS.push(cs);
548        		}
549        	}
550        };
551
552        factory.getDeliveryAddress = function getDeliveryAddress(customer){
553    		if(customer.adresses && customer.adresses !== undefined && customer.adresses.length > 0){
554    			for(var i=0;i<customer.adresses.length;i++){
555	    			if(customer.adresses[i].estLivraisonActive){
556	    				return customer.adresses[i];
557	    			}
558    			}
559    		}
560    		return undefined;
561        };
562
563        factory.setUseParrainnageAdress = function setUseParrainnageAdress(){
564        	return _setParrainnageAddress(true);
565        };
566
567        factory.setResetParrainnageAdress = function setResetParrainnageAdress(){
568        	return _setParrainnageAddress(false);
569        };
570
571        function _setParrainnageAddress(state){
572        	var deferred = $q.defer();
573        	TbsWS.call('setparrainnageaddress/' + cartManager.model.cart.id+'/'+(state?"true":"false"), 'private').then(
574		          function(result){
575		          	deferred.resolve(true);
576		          }
577		          ,function(error) {
578		          	deferred.resolve(true);
579		        }
580		    );
581		    return deferred.promise;
582        }
583
584        factory.getSelectedDeliveryForm = function getSelectedDeliveryForm(customer){
585    		var i=0,
586    			deliveryAdresse=-1,
587    			selectAdresses=[],
588    			ob={},
589    			adressSelectForm = {};
590
591    		adressSelectForm.alert = {};
592    		adressSelectForm.alert.message = [];
593    		adressSelectForm.others = {};
594
595    		if(customer.adresses && customer.adresses !== undefined && customer.adresses.length > 0){
596	    		for(i;i<customer.adresses.length;i++){
597	    			ob={};
598	    			ob.value = customer.adresses[i];
599	    			ob.label = customer.adresses[i].titreAdresse;
600	    			if(customer.adresses[i].estLivraison){
601	    				deliveryAdresse = i;
602	    			}
603	    			selectAdresses.push(ob);
604	    		}
605    		}
606
607    		formulaireManager.createSelect("adresse",adressSelectForm,"DICO_CHOIX_ADRESSE",selectAdresses,false,deliveryAdresse);
608    		return adressSelectForm;
609        };
610
611        factory.setDeliveryAdress = function setDeliveryAdress(adressSelectForm,customer){
612        	var deferred = $q.defer();
613        	adressSelectForm.alert.message = [];
614        	if(!formulaireManager.verifForm(adressSelectForm)){
615        		deferred.resolve(false);
616        	} else {
617	        	TbsWS.call('setdeliveryaddress','private',adressSelectForm.value).then(
618					function(result){
619		        		if(result && result.key === "editaddress"){
620		        			var status = result.value;
621							adressSelectForm.alert.message = [];
622				          	if(!status || status === undefined){
623				          		adressSelectForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
624				          		deferred.resolve(false);
625				          	} else {
626			          			status = status.replace(/"/g,'');
627				          		if(status == factory.ADDRESS_STATUS_EDIT){
628				          			if(customer !== undefined){
629					          			for(var i=0;i<customer.adresses.length;i++){
630						        			customer.adresses[i].estLivraison = false;
631						        		}
632					        		}
633					    			adressSelectForm.value.estLivraison = true;
634					        		deferred.resolve(true);
635					          	} else {
636					          		adressSelectForm.alert.message.push("DICO_ERREUR_CUSTOMER_CHOISIR_ADRESSE_LIVRAISON");
637					        		deferred.resolve(false);
638					          	}
639				          	}
640				         } else {
641				         	deferred.resolve(false);
642				         }
643			          }
644			          ,function(error) {
645			          	adressSelectForm.alert.message.push("DICO_ERREUR_CUSTOMER_CHOISIR_ADRESSE_LIVRAISON");
646			          	deferred.resolve(false);
647			        }
648		        );
649	        }
650	        return deferred.promise;
651        };
652
653        factory.getCustomer = function getCustomer(withParrainnage){
654        	var deferred = $q.defer();
655        	if(withParrainnage !== undefined && withParrainnage){
656        		TbsWS.call('getcustomercart/'+cartManager.model.cart.id,'private').then(
657		        	function(customer){
658		        		deferred.resolve(customer);
659		        	}
660				    ,function(error) {
661				        console.error(error);
662				        deferred.resolve(null);
663				    }
664				);
665
666        	} else {
667        		TbsWS.call('getcustomer','private').then(
668					function(customer) {
669						// on peut avoir des adresses estTemporaire=true et estPrincipale = true, ce qui est contradictoire
670						// a corriger idéalement dans Mahalo sur getcustomer
671						if (customer.adresses && customer.adresses.length > 0) {
672							customer.adresses.forEach(function(adresse) {
673								if (adresse.estTemporaire === true && adresse.estPrincipale === true) {
674									adresse.estTemporaire = false;
675								}
676							});
677						}
678						deferred.resolve(customer);
679					}
680				    ,function(error) {
681				        console.error(error);
682				        deferred.resolve(null);
683				    }
684				);
685        	}
686		    return deferred.promise;
687        };
688
689		factory.getCustomerByCodeClient = function getCustomerByCodeClient(codeClient) {
690			var deferred = $q.defer();
691			TbsWS.call('getcustomer/' + codeClient, 'private').then(
692				function (customer) {
693					deferred.resolve(customer);
694				},
695				function (error) {
696					console.error(error);
697					deferred.resolve(null);
698				}
699			);
700			return deferred.promise;
701		};
702
703        function _storeCgv(newAdressForm){
704        	var ob = _.findWhere(newAdressForm.fields, {cgv: true});
705    		if(ob !== undefined){
706    			console.log("cgv is check");
707        		cartManager.changeStateCgv(ob.value);
708    		}
709        }
710
711        factory.editAddressFunction = function editAddressFunction(newAdressForm, adresses, customer){
712        	var deferred = $q.defer();
713        	newAdressForm.alert.message = [];
714        	if(!formulaireManager.verifForm(newAdressForm) || chevauchement(newAdressForm, adresses) || verifEmailBeneficiaire(newAdressForm, customer)){
715        		deferred.resolve(false);
716        	} else {
717        		//store cgv
718        		_storeCgv(newAdressForm);
719
720        		let newaddress;
721        		if(newAdressForm.withAdress){
722        			//Adresse complète
723        			newaddress = _getAdresseFromForm(newAdressForm);
724    	        	if(newaddress && newaddress !== undefined){
725    	        		if(newaddress.estParrainnage){
726    	        			_setParrainnageAdresse(deferred,newAdressForm,newaddress);
727    	        			return deferred.promise;
728    	        		}
729    	        	} else {
730    			    	newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_MODIFICATION");
731    			    	deferred.resolve(false);
732    			    	return deferred.promise;
733    			    }
734        		} else if(commonConfig.forceAskInfoCustomerInfoOnDelivery) {
735        			//Adresse partielle
736					//On force l'enregistrement dans tous les cas car les infos nom + prenom + pays + telephone sont obligatoires
737					let ob;
738        			for(var i=0;i<newAdressForm.fields.length;i++){
739						ob = newAdressForm.fields[i];
740						ob.name = ob.name.replace('disabled-','');
741					}
742        			newaddress = _getAdresseFromForm(newAdressForm);
743				}
744
745        		let customerForm = {};
746    			customerForm.others={};
747    			customerForm.fields = _.where(newAdressForm.fields, {origin: "customer"});
748    			customerForm.csBlockPrincipal = _.where(newAdressForm.fields, {origin: "cs"});
749    			customerForm.csOptionnal = [];
750    			customerForm.others.codeClient = customer.codeClient;
751
752    			function _editAdress(){
753    				newaddress.email = customer.email;
754		        	TbsWS.call('editaddress','private',newaddress).then(
755				          function(result){
756			        		if(result && result.key === "editaddress"){
757			        			var status = result.value;
758					          	if(!status || status === undefined){
759					          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
760					          		deferred.resolve(false);
761					          	} else {
762				          			status = status.replace(/"/g,'');
763					          		if(status == factory.ADDRESS_STATUS_EDIT) {
764										//reload customer
765										deferred.resolve(true);
766									} else if (status === factory.ADDRESS_STATUS_ERROR_COUNTRY) {
767										newAdressForm.alert.message.push("DICO_ERREUR_ADDRESS_COUNTRY_PENDANT_MODIFICATION");
768										deferred.resolve(false);
769						          	} else {
770										newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_MODIFICATION");
771					          			deferred.resolve(false);
772						          	}
773					          	}
774					         } else {
775								newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_MODIFICATION");
776					         	deferred.resolve(false);
777					         }
778				          }
779				          ,function(error) {
780				          	newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_MODIFICATION");
781				          	deferred.resolve(false);
782				        }
783				    );
784    			}
785
786    			if(commonConfig.forceAskInfoCustomerInfoOnDelivery && customerForm.fields.length > 0 || customerForm.csBlockPrincipal.length > 0) {
787    				let custo = _getCustomerFromForm(customerForm, false, customer);
788        			TbsWS.call('editcustomer/' + cartManager.model.cart.id,'private',custo).then(
789  				          function(result){
790  		        			if(result && result.key === "editcustomer"){
791  		        				var status = result.value;
792  					          	if(!status || status === undefined){
793  					          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
794  					          		deferred.resolve(false);
795  					          	} else {
796  				          			status = status.replace(/"/g,'');
797  				          			if(status.indexOf(factory.CUSTOMER_STATUS_UPDATE_BURNED) == 0){
798  				          				deferred.resolve('logout');
799  				          			} else if(status.indexOf(factory.CUSTOMER_STATUS_UPDATE) == 0){
800  				          				_editAdress();
801  						          	} else if(status == factory.CUSTOMER_STATUS_EXISTS){
802  						          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_CLIENT_EXISTE");
803  					          			deferred.resolve(false);
804  						          	} else {
805  						          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_MODIFICATION");
806  						          		deferred.resolve(false);
807  						          	}
808  					          	}
809  					         } else {
810  					          	deferred.resolve(false);
811  					         }
812  				          }
813  				          ,function(error) {
814  				        	newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_CREATION_IMPOSSIBLE");
815  				          	deferred.resolve(false);
816  				        }
817  				    );
818    			} else {
819    				_editAdress();
820    			}
821			}
822		    return deferred.promise;
823        };
824
825        factory.deleteAddressFunction = function deleteAddressFunction(adresse){
826        	var deferred = $q.defer();
827        	if(adresse && adresse !== undefined){
828        		TbsWS.call('deleteaddress','private',adresse).then(
829			          function(result){
830		        		if(result && result.key === "deleteaddress"){
831		        			var status = result.value;
832				          	if(!status || status === undefined){
833				          		deferred.resolve(false);
834				          	} else {
835			          			status = status.replace(/"/g,'');
836				          		if(status == factory.ADDRESS_STATUS_DELETE){
837				          			deferred.resolve(true);
838					          	} else {
839				          			deferred.resolve(false);
840					          	}
841				          	}
842				         } else  {
843				         	deferred.resolve(false);
844				         }
845			          }
846			          ,function(error) {
847			          	console.error('Create adresse impossible');
848			          	deferred.resolve(false);
849			        }
850			    );
851		    }
852		    return deferred.promise;
853        };
854
855        factory.updateLogin = function updateLogin(newEmailForm){
856        	var deferred = $q.defer();
857        	newEmailForm.alert.message = [];
858			newEmailForm.alert.messageCustom = undefined;
859			if(!formulaireManager.verifForm(newEmailForm)){
860        		deferred.resolve(false);
861        	} else {
862	        	var updatecustomer = _getUpdateCustomerFromForm(newEmailForm);
863	        	if(updatecustomer && updatecustomer !== undefined){
864	        		TbsWS.call('updatelogin/' + cartManager.model.cart.id, 'public', updatecustomer, (newEmailForm.others.captcha !== undefined ? vcRecaptchaService.getResponse(newEmailForm.others.captcha.widgetId) : "" )).then(
865				          function(result){
866		        			newEmailForm.alert.message = [];
867					        if(result && result.key === "updatelogin"){
868								var status = result.value;
869					          	if(!status || status === undefined){
870					          		newEmailForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
871					          		deferred.resolve(false);
872					          	} else {
873				          			status = status.replace(/"/g,'');
874				          			if(status.indexOf(factory.CUSTOMER_STATUS_UPDATE) == 0 || status.indexOf(factory.CUSTOMER_STATUS_CREATE) == 0){
875				          				formulaireManager.resetForm(newEmailForm);
876					          			deferred.resolve(true);
877						          	} else if(status.indexOf(factory.CUSTOMER_STATUS_UPDATE) == 0 || status.indexOf(factory.CUSTOMER_STATUS_EXISTS) == 0){
878				          				newEmailForm.alert.message.push("DICO_ERREUR_CUSTOMER_CLIENT_EXISTE");
879					          			deferred.resolve(false);
880						          	} else {
881				          				if(status.contains(factory.CUSTOMER_STATUS_ERROR+"##")) {
882											status = status.replace(factory.CUSTOMER_STATUS_ERROR+"##","");
883											if(status.contains(factory.PASSWORD_UNSECURE+"##")) {
884												status = status.replace(factory.PASSWORD_UNSECURE + "##", "");
885												newEmailForm.alert.messageCustom = status;
886											} else if(status.contains(factory.PASSWORD_EXPIRED+"##")) {
887												status = status.replace(factory.PASSWORD_EXPIRED + "##", "");
888												newEmailForm.alert.messageCustom = status;
889											} else {
890												newEmailForm.alert.message.push(status);
891											}
892										} else {
893											newEmailForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_MODIFICATION");
894										}
895						          		deferred.resolve(false);
896						          	}
897					          	}
898							} else {
899								deferred.resolve(false);
900							}
901				          }
902				          ,function(error) {
903					        newEmailForm.alert.message.push("DICO_ERREUR_CUSTOMER_CREATION_IMPOSSIBLE");
904				          	deferred.resolve(false);
905				        }
906				    );
907			    } else {
908			    	newEmailForm.alert.message.push("DICO_ERREUR_CUSTOMER_CREATION_IMPOSSIBLE");
909			    	deferred.resolve(false);
910			    }
911			}
912		    return deferred.promise;
913        };
914
915        function _setParrainnageAdresse(deferred,newAdressForm,newaddress){
916        	TbsWS.call('setdeliveryaddress/'+cartManager.model.cart.id,'private',newaddress).then(
917				function(result){
918					if(result && result.key === "setdeliveryaddress"){
919	        			var status = result.value;
920			          	if(!status || status === undefined){
921			          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENT
921E");
922			          		deferred.resolve(false);
923			          	} else {
924		          			status = status.replace(/"/g,'');
925			          		if(status == factory.ADDRESS_STATUS_EDIT){
926			          			deferred.resolve(true);
927
928				          	} else {
929			          			deferred.resolve(false);
930				          	}
931			          	}
932			         } else {
933			         	deferred.resolve(false);
934			         }
935		          }
936		          ,function(error) {
937		          	adressSelectForm.alert.message.push("DICO_ERREUR_CUSTOMER_CHOISIR_ADRESSE_LIVRAISON");
938		          	deferred.resolve(false);
939		        }
940	        );
941        }
942
943        function chevauchement(addressForm, adresses) {
944			let hasChevauchement = false;
945        	if (adresses != null) {
946				let refAdresse = addressForm.others.refAdresse;
947				let dateDebut = addressForm.fields[16].value;
948				let dateFin = addressForm.fields[17].value;
949
950				if(dateDebut === "" && dateFin === ""){
951					for(let i = 0; i < adresses.length; ++i){
952						let item = adresses[i];
953						if(item.estLivraison && !item.estPrincipale){
954							addressForm.alert.message.push("DICO_ERREUR_ADDRESS_CHEVAUCHEMENT");
955							hasChevauchement = true;
956							break;
957						}
958					}
959				} else if(dateDebut !== null && dateDebut !== "" && dateFin !== null && dateFin !== ""){
960					for(let i = 0; i < adresses.length; ++i){
961						let item = adresses[i];
962						if (item.refAdresse === refAdresse){
963							continue;
964						}
965						if (item.estTemporaire && new Date(item.dateDebut) <= dateFin && new Date(item.dateFin) >= dateDebut){
966							hasChevauchement = true;
967							addressForm.alert.message.push("DICO_ERREUR_ADDRESS_CHEVAUCHEMENT");
968							break;
969						}
970					}
971				} else {
972					addressForm.alert.message.push("DICO_DEBUT_ET_FIN_OBLIGATOIRE");
973					hasChevauchement = true;
974				}
975        	}
976        	return hasChevauchement;
977        }
978
979        function verifEmailBeneficiaire(addressForm, customer) {
980        	if (customer != null && (addressForm.fields[14].value || '').toLowerCase() === (customer.email || '').toLowerCase()) {
981				addressForm.alert.message.push("DICO_ERREUR_EMAIL_BENEFICIAIRE_IDENTIQUE_CLIENT");
982        		return true;
983        	}
984        	return false;
985        }
986
987        factory.addAddressFunction = function addAddressFunction(newAdressForm, adresses, customer){
988        	var deferred = $q.defer();
989        	newAdressForm.alert.message = [];
990        	if(!formulaireManager.verifForm(newAdressForm) || chevauchement(newAdressForm, adresses) || verifEmailBeneficiaire(newAdressForm, customer)){
991        		deferred.resolve(false);
992        	} else {
993        		//store cgv
994        		_storeCgv(newAdressForm);
995	        	var newaddress = _getAdresseFromForm(newAdressForm);
996	        	if(newaddress && newaddress !== undefined){
997	        		if(newaddress.estParrainnage){
998	        			_setParrainnageAdresse(deferred,newAdressForm,newaddress);
999	        		} else {
1000	        			let customerForm = {};
1001	        			customerForm.others={};
1002	        			customerForm.fields = _.where(newAdressForm.fields, {origin: "customer"});
1003	        			customerForm.csBlockPrincipal = _.where(newAdressForm.fields, {origin: "cs"});
1004	        			customerForm.csOptionnal = [];
1005	        			customerForm.others.codeClient = customer.codeClient;
1006
1007	        			function _addAdress(){
1008				        	TbsWS.call('addaddress','private',newaddress).then(
1009						          function(result){
1010					        		if(result && result.key === "addaddress"){
1011					        			var status = result.value;
1012							          	if(!status || status === undefined){
1013							          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
1014							          		deferred.resolve(false);
1015							          	} else {
1016						          			status = status.replace(/"/g,'');
1017							          		if(status == factory.ADDRESS_STATUS_CREATE){
1018							          			//reload customer
1019							          			deferred.resolve(true);
1020
1021								          	} else {
1022								          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_CREATION");
1023							          			deferred.resolve(false);
1024								          	}
1025							          	}
1026							         } else {
1027							         	deferred.resolve(false);
1028							         }
1029						          }
1030						          ,function(error) {
1031						          	console.error('Create adresse impossible');
1032						          	newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_CREATION");
1033						          	deferred.resolve(false);
1034						        }
1035						    );
1036	        			}
1037
1038	        			if(customerForm.fields.length > 0 || customerForm.csBlockPrincipal.length > 0) {
1039	        				console.log(customerForm.csBlockPrincipal);
1040	        				let custo = _getCustomerFromForm(customerForm, false, customer);
1041
1042	            			TbsWS.call('editcustomer/' + cartManager.model.cart.id,'private',custo).then(
1043	      				          function(result){
1044	      		        			if(result && result.key === "editcustomer"){
1045	      		        				var status = result.value;
1046	      					          	if(!status || status === undefined){
1047	      					          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
1048	      					          		deferred.resolve(false);
1049	      					          	} else {
1050	      				          			status = status.replace(/"/g,'');
1051	      				          			if(status.indexOf(factory.CUSTOMER_STATUS_UPDATE_BURNED) == 0){
1052	      				          				deferred.resolve('logout');
1053	      				          			} else if(status.indexOf(factory.CUSTOMER_STATUS_UPDATE) == 0){
1054	      				          				_addAdress();
1055	      						          	} else if(status == factory.CUSTOMER_STATUS_EXISTS){
1056	      						          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_CLIENT_EXISTE");
1057	      					          			deferred.resolve(false);
1058	      						          	} else {
1059	      						          		newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_MODIFICATION");
1060	      						          		deferred.resolve(false);
1061	      						          	}
1062	      					          	}
1063	      					         } else {
1064	      					          	deferred.resolve(false);
1065	      					         }
1066	      				          }
1067	      				          ,function(error) {
1068	      				        	newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_CREATION_IMPOSSIBLE");
1069	      				          	deferred.resolve(false);
1070	      				        }
1071	      				    );
1072	        			} else {
1073	        				_addAdress();
1074	        			}
1075					}
1076			    } else {
1077			    	newAdressForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_CREATION");
1078			    	deferred.resolve(false);
1079			    }
1080			}
1081		    return deferred.promise;
1082        };
1083
1084		factory.addAccesBeneficiaireFunction = function addAccesBeneficiaireFunction(accesForm) {
1085			var deferred = $q.defer();
1086			accesForm.alert.message = [];
1087
1088			if(formulaireManager.verifForm(accesForm) == false){
1089				console.log("erreur");
1090				return;
1091			}
1092
1093			var accesBeneficiaire = {},
1094				client = {};
1095
1096			accesBeneficiaire.refAbonnement = accesForm.refAbonnement;
1097			accesBeneficiaire.email = accesForm.fields[0].value;
1098
1099			_addAccesBeneficiaire(deferred, accesBeneficiaire, client);
1100
1101			function _addAccesBeneficiaire(deferred, accesBeneficiaire){
1102				TbsWS.call('addaccesbeneficiaire','private', accesBeneficiaire).then(
1103					function(result){
1104						if (result && result.key === "addaccesbeneficiaire") {
1105							var status = result.value;
1106							if (!status || status === undefined) {
1107								accesForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
1108								deferred.resolve(false);
1109							} else {
1110								status = status.replace(/"/g,'');
1111								if(status == factory.ACCES_BENEFICIAIRE_STATUS_CREATE) {
1112									deferred.resolve(true);
1113								} else if (status == factory.ACCES_BENEFICIAIRE_STATUS_EXISTS) {
1114									accesForm.alert.message.push("DICO_AJOUT_BENEFICIAIRE_EXISTE");
1115									deferred.resolve(false);
1116								} else {
1117									accesForm.alert.message.push("DICO_ERREUR_AJOUT_BENEFICIAIRE");
1118									deferred.resolve(false);
1119								}
1120							}
1121						} else {
1122							deferred.resolve(false);
1123						}
1124					}
1125					,function(error) {
1126						console.error('Add acces impossible');
1127						accesForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_CREATION");
1128						deferred.resolve(false);
1129					}
1130				);
1131			}
1132
1133			return deferred.promise;
1134		};
1135
1136		factory.deleteAccesBeneficiaire = function deleteAccesBeneficiaire(refAbonnement, codeClient) {
1137			var deferred = $q.defer();
1138			TbsWS.call('deleteaccesbeneficiaire/' + refAbonnement + '/codeClient/' + codeClient,'private').then(
1139				function(result){
1140					if(result && result.key === "deleteaccesbeneficiaire"){
1141						var status = result.value;
1142						if(!status || status === undefined){
1143							deferred.resolve(false);
1144						} else {
1145							status = status.replace(/"/g,'');
1146							if(status == factory.ACCES_BENEFICIAIRE_STATUS_DELETE){
1147								deferred.resolve(true);
1148							} else {
1149								deferred.resolve(false);
1150							}
1151						}
1152					} else {
1153						deferred.resolve(false);
1154					}
1155				}
1156				,function(error) {
1157					console.error(error);
1158					deferred.resolve(false);
1159				}
1160			);
1161			return deferred.promise;
1162		};
1163
1164        factory.editCustomerFunction = function editCustomerFunction(userForm){
1165        	var deferred = $q.defer();
1166        	userForm.alert.message = [];
1167			userForm.alert.messageCustom = "";
1168        	userForm.info.message = [];
1169        	if(!formulaireManager.verifForm(userForm)){
1170        		deferred.resolve(false);
1171        	} else {
1172        		var customer = _getCustomerFromForm(userForm,false);
1173	        	if(customer && customer !== undefined){
1174		        	TbsWS.call('editcustomer/' + cartManager.model.cart.id,'private',customer).then(
1175				          function(result){
1176		        			if(result && result.key === "editcustomer"){
1177		        				var status = result.value;
1178					          	if(!status || status === undefined){
1179					          		userForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
1180					          		deferred.resolve(false);
1181					          	} else {
1182				          			status = status.replace(/"/g,'');
1183				          			if(status.indexOf(factory.CUSTOMER_STATUS_UPDATE_BURNED) == 0){
1184				          				deferred.resolve('logout');
1185				          			} else if(status.indexOf(factory.CUSTOMER_STATUS_UPDATE) == 0){
1186										_setOptins(userForm.optins);
1187					          			deferred.resolve(true);
1188						          	} else if(status == factory.CUSTOMER_STATUS_EXISTS){
1189					          			userForm.alert.message.push("DICO_ERREUR_CUSTOMER_CLIENT_EXISTE");
1190					          			deferred.resolve(false);
1191						          	} else {
1192										if(status.contains(factory.CUSTOMER_STATUS_ERROR+"##")) {
1193											status = status.replace(factory.CUSTOMER_STATUS_ERROR+"##","");
1194											userForm.alert.messageCustom = status;
1195										} else {
1196											userForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_MODIFICATION");
1197										}
1198						          		deferred.resolve(false);
1199						          	}
1200					          	}
1201					         } else {
1202					          	deferred.resolve(false);
1203					         }
1204				          }
1205				          ,function(error) {
1206					        userForm.alert.message.push("DICO_ERREUR_CUSTOMER_CREATION_IMPOSSIBLE");
1207				          	deferred.resolve(false);
1208				        }
1209				    );
1210			    } else {
1211					userForm.alert.message.push("DICO_ERREUR_CUSTOMER_CREATION_IMPOSSIBLE");
1212			    	deferred.resolve(false);
1213			    }
1214			}
1215		    return deferred.promise;
1216		};
1217
1218        factory.signupFunction = function signupFunction(newuserForm){
1219        	let deferred = $q.defer();
1220        	newuserForm.alert.message = [];
1221        	newuserForm.info.message = [];
1222        	if(!formulaireManager.verifForm(newuserForm)){
1223        		deferred.resolve(false);
1224        	} else {
1225	        	let newcustomer = _getCustomerFromForm(newuserForm,true);
1226	        	if(newcustomer && newcustomer !== undefined){
1227	        		TbsWS.call('createcustomer/' + $rootScope.preferredLanguage,'public',newcustomer).then(
1228				          function(result){
1229				          	if(result && result.access_token !== undefined){
1230				          		//autovalidation + autoconnexion
1231				          		Auth.dologin(result);
1232				          		deferred.resolve(2);
1233								googleTagManager.createAccountEvent(factory.getCustomer);
1234				          	} else if(result && result.key === "validatecustomer"){
1235				          		//autovalidation mais pas dautoconnexion processus normal
1236				          		var status = result.value;
1237					          	if(!status || status === undefined){
1238					          		newuserForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENTE");
1239					          		deferred.resolve(0);
1240					          	} else {
1241				          			status = status.replace(/"/g,'');
1242					          		if(status.indexOf(factory.CUSTOMER_STATUS_CREATE) == 0){
1243					          			$rootScope.LINK_ACTIVATE=status.split("_")[1];
1244						          		deferred.resolve(3);
1245										googleTagManager.createAccountEvent(factory.getCustomer);
1246						          	} else if(status == factory.CUSTOMER_STATUS_EXISTS){
1247					          			newuserForm.alert.message.push("DICO_ERREUR_CUSTOMER_CLIENT_EXISTE");
1248					          			deferred.resolve(0);
1249						          	} else {
1250						          		newuserForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_CREATION");
1251						          		deferred.resolve(0);
1252						          	}
1253					          	}
1254
1255							} else if(result && result.key === "createcustomer"){
1256								var status = result.value;
1257					          	if(!status || status === undefined){
1258					          		newuserForm.alert.message.push("DICO_ERREUR_CUSTOMER_REPONSE_INCOHERENT
1258E");
1259					          		deferred.resolve(0);
1260					          	} else {
1261				          			status = status.replace(/"/g,'');
1262					          		if(status.indexOf(factory.CUSTOMER_STATUS_CREATE) == 0){
1263					          			$rootScope.LINK_ACTIVATE=status.split("_")[1];
1264						          		deferred.resolve(1);
1265										googleTagManager.createAccountEvent(factory.getCustomer);
1266						          	} else if(status == factory.CUSTOMER_STATUS_EXISTS){
1267					          			newuserForm.alert.message.push("DICO_ERREUR_CUSTOMER_CLIENT_EXISTE");
1268					          			deferred.resolve(0);
1269						          	} else {
1270										if(status.contains(factory.CUSTOMER_STATUS_ERROR+"##")) {
1271											status = status.replace(factory.CUSTOMER_STATUS_ERROR+"##","");
1272											if(status.contains(factory.PASSWORD_UNSECURE+"##")) {
1273												status = status.replace(factory.PASSWORD_UNSECURE + "##", "");
1274												newuserForm.alert.messageCustom = status;
1275											} if(status.contains(factory.PASSWORD_EXPIRED+"##")) {
1276												status = status.replace(factory.PASSWORD_UNSECURE + "##", "");
1277												newuserForm.alert.messageCustom = status;
1278											} else {
1279												newuserForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_CREATION");
1280											}
1281										} else {
1282											newuserForm.alert.message.push("DICO_ERREUR_CUSTOMER_PENDANT_CREATION");
1283										}
1284						          		deferred.resolve(0);
1285						          	}
1286					          	}
1287							} else {
1288								deferred.resolve(0);
1289							}
1290				          }
1291				          ,function(error) {
1292					        newuserForm.alert.message.push("DICO_ERREUR_CUSTOMER_CREATION_IMPOSSIBLE");
1293				          	deferred.resolve(0);
1294				        }
1295				    );
1296			    } else {
1297					newuserForm.alert.message.push("DICO_ERREUR_CUSTOMER_CREATION_IMPOSSIBLE");
1298			    	deferred.resolve(0);
1299			    }
1300			}
1301		    return deferred.promise;
1302		};
1303
1304		factory.validateAccount = function validateAccount(codeClient){
1305			var deferred = $q.defer();
1306			TbsWS.call('validateaccount/'+ codeClient,'public').then(
1307		          function(result){
1308		          	if(result && result.key === "validateaccount"){
1309		          		//pas dautoconnexion processus normal
1310		          		var status = result.value;
1311		          		console.log(status);
1312		          		if(status === "create"){
1313		          			deferred.resolve("autoconnexion");
1314		          		} else if(status === "exists") {
1315		          			deferred.resolve(status);
1316		          		} else {
1317		          			deferred.resolve("error");
1318		          		}
1319					} else {
1320						deferred.resolve("error");
1321					}
1322		          }
1323		          ,function(error) {
1324		          	console.error(error);
1325		          	deferred.reject("error");
1326		        }
1327		    );
1328
1329			return deferred.promise;
1330		};
1331
1332		factory.validateCustomer = function validateCustomer(idValidation){
1333			var deferred = $q.defer();
1334			TbsWS.call('validatecustomer/'+ idValidation,'public').then(
1335		          function(result){
1336		          	if(result && result.access_token !== undefined){
1337		          		//autoconnexion
1338		          		Auth.dologin(result);
1339		          		deferred.resolve("autoconnexion");
1340		          	} else if(result && result.key === "validatecustomer"){
1341		          		//pas dautoconnexion processus normal
1342		          		var status = result.value;
1343			          	if(!status || status === undefined){
1344			          		deferred.resolve("error");
1345			          	} else {
1346			          		status = status.replace(/"/g,'');
1347			          		deferred.resolve(status);
1348			          	}
1349					} else {
1350						deferred.resolve("error");
1351					}
1352		          }
1353		          ,function(error) {
1354		          	console.error(error);
1355		          	deferred.reject("error");
1356		        }
1357		    );
1358
1359			return deferred.promise;
1360		};
1361
1362		factory.afterLogin = function afterLogin(success){
1363			console.log(success);
1364			if(success == 'logout') {
1365				$rootScope.signin.resetInProgress();
1366	          	$rootScope.goPage(undefined,'common/logout');
1367			} else if(success.startsWith(factory.LOGIN_OK)){
1368				//SUCCESS
1369				$rootScope.signin.resetInProgress();
1370				if($rootScope.signin.fromBasket){
1371					cartManager.setStartTunnelAchat(false);
1372    				if(commonConfig.forceRedirectToHomeAfterConnexion) {
1373    					$rootScope.goPage();
1374    				} else {
1375    					if(commonConfig.forceAskInfoCustomerInfoOnDelivery) {
1376    						$rootScope.goPageCart();
1377    					} else {
1378    						$rootScope.goPage(undefined,'common/delivery');
1379    					}
1380    				}
1381    			} else {
1382    				if(commonConfig.forceRedirectToHomeAfterConnexion) {
1383    					$rootScope.goPage();
1384    				} else {
1385    					$rootScope.goPage(undefined,'common/profil/init');
1386    				}
1387    			}
1388			} else if(success.startsWith(factory.LOGIN)) {
1389				factory.routingSpecific(success);
1390			}
1391		};
1392
1393		factory.checkSigninFunction = function checkSigninFunction(existuserForm){
1394        	if($rootScope.signin.inProgress){
1395        		$rootScope.signin.login = formulaireManager.getDefaultValue(_.findWhere(existuserForm.fields, {name: "email"}),"");
1396        		$rootScope.signin.password = formulaireManager.getDefaultValue(_.findWhere(existuserForm.fields, {name: "password"}),"");
1397        	}
1398			return formulaireManager.verifForm(existuserForm);
1399		};
1400
1401        factory.signinFunction = function signinFunction(existuserForm){
1402        	var deferred = $q.defer(),
1403        		oldMontantTtc,
1404        		oldLength,
1405        		user = {};
1406
1407			existuserForm.alert.message = [];
1408        	if(formulaireManager.verifForm(existuserForm)){
1409				user.login = {};
1410				user.login.property = "email";
1411				user.login.value = formulaireManager.getDefaultValue(_.findWhere(existuserForm.fields, {name: "email"}),"");
1412				user.password = formulaireManager.getDefaultValue(_.findWhere(existuserForm.fields, {name: "password"}),"");
1413
1414				if(existuserForm.others.captcha != undefined && existuserForm.others.captcha.required){
1415					user.captcha = vcRecaptchaService.getResponse(existuserForm.others.captcha.widgetId);
1416				}
1417				user.scope = "private";
1418
1419	        	$rootScope.signin.login = user.login.value;
1420	        	$rootScope.signin.password = user.password;
1421
1422				oldLength = cartManager.model.cart.lignes.length;
1423				oldMontantTtc = cartManager.model.cart.totalTtc;
1424				Auth.login(user).then(
1425					function(customer){
1426						if (commonConfig.oAuthExterne != null && commonConfig.oAuthExterne.urlLogin != null) {
1427							customer.info = factory.LOGIN_OK;
1428						}
1429
1430						cartManager.refreshCart().then(function () {
1431							TbsWS.call('setcustomertocart/' + cartManager.model.cart.id,'private').then(
1432								function(result){
1433									if(result && result.key === "setcustomertocart"){
1434										var status = result.value;
1435										cartManager.loadCartWaiting().then(
1436											function(status){
1437												if (!cartManager.lastStatusReservedForNew() && ! cartManager.lastStatusPaysInterdits()) {
1438													if(oldLength == 0 && cartManager.model.cart.lignes.length > 0){
1439														$rootScope.openModalInformation('DICO_INFORMATION','DICO_CUSTOMER_DERNIER_PANIER_EST_CHARGE');
1440													} else if(oldLength > 0 && oldMontantTtc != cartManager.model.cart.totalTtc){
1441														$rootScope.openModalInformation('DICO_INFORMATION','DICO_CUSTOMER_CONTENU_PANIER_A_CHANGE_APRES_CONNEXION');
1442													}
1443												}
1444												$rootScope.signin.login = "";
1445												$rootScope.signin.password = "";
1446												deferred.resolve(customer.info);
1447											}
1448										);
1449									} else {
1450										deferred.resolve(false);
1451									}
1452								}
1453								,function(error) {
1454									deferred.resolve('logout');
1455								}
1456							);
1457						});
1458					},
1459					function(response){
1460						if(response && response.error !== undefined && response.error_description !== undefined && response.error_description.startsWith(factory.LOGIN)){
1461							if(response.error_description.startsWith(factory.LOGIN_PASSWORD_EXPIRED)) {
1462								$rootScope.signin.error = response;
1463								$rootScope.signin.error.error_description = 'DICO_PASSWORD_EXPIRED_SEND_EMAIL';
1464								_setResponseLogin(response,existuserForm);
1465							}
1466							deferred.resolve(response.error_description);
1467						} else {
1468							_setResponseLogin(response,existuserForm);
1469							deferred.resolve(false);
1470						}
1471					}
1472				);
1473
1474	        } else {
1475	        	deferred.resolve(false);
1476	        }
1477	        return deferred.promise;
1478		};
1479
1480		function _setResponseLogin(response,myForm){
1481			if(response !== undefined){
1482				if(myForm.others.captcha !== undefined){
1483					if(response.error == "Captcha Required" || response.error == "Captcha Incorrect"){
1484						formulaireManager.resetCaptcha(myForm.others.captcha);
1485						myForm.others.captcha.required = true;
1486					} else {
1487						myForm.others.captcha.required = false;
1488					}
1489				}
1490				myForm.alert.message.push(response.error_description);
1491			}
1492		}
1493
1494		factory.getExistUserForm = function getExistUserForm(withcaptcha){
1495			var existuser = {},ob={};
1496			existuser.alert = {};
1497			existuser.alert.message = [];
1498			existuser.fields = [];
1499			existuser.others = {};
1500
1501			if(withcaptcha){
1502				formulaireManager.createCaptcha(existuser, false,"existuser");
1503			}
1504
1505			_getModeConnexion(existuser.fields);
1506
1507			if($rootScope.signin.inProgress){
1508				_setResponseLogin($rootScope.signin.error,existuser);
1509				factory.checkSigninFunction(existuser);
1510			}
1511
1512			$rootScope.signin.resetInProgress();
1513
1514			return existuser;
1515		};
1516
1517		factory.verifValiditeAdresse = function verifValiditeAdresse(adresse){
1518			var deferred = $q.defer();
1519			factory.getAddressForm(undefined,adresse,false,adresse.estParrainnage, false, false, undefined, false, 'delivery').then(
1520            	function(addressForm){
1521            		console.log(addressForm);
1522            		deferred.resolve(formulaireManager.verifForm(addressForm));
1523            	},
1524            	function(error){
1525            		deferred.resolve(false);
1526            	}
1527            );
1528            return deferred.promise;
1529		};
1530
1531		factory.verifAddressFunction = function verifAddressFunction(newAddressForm){
1532			return formulaireManager.verifForm(newAddressForm);
1533		};
1534
1535		factory.getNewAddressForm = function getNewAddressForm(newaddressForm,creation,isGift,temporaryAddress,customer,forceDisplayAdresse, origin){
1536			return factory.getAddressForm(newaddressForm,dataManager.getAddressData(),creation,isGift,temporaryAddress, false, customer, forceDisplayAdresse, (origin === undefined ? 'profil' : origin));
1537		};
1538
1539		factory.getAddressForm = function getAddressForm(newaddressForm, adresse, creation, isGift, tryDisplayTemporaryAddress, onlyRequiredAndEmpty, customer, forceDisplayAdresse, origin){
1540			if(!_.contains(['profil','cart','delivery'],origin)) {
1541				console.error("Origine inconnu : "+origin);
1542			}
1543
1544			if(adresse.estParrainnage === null || adresse.estParrainnage === undefined)adresse.estParrainnage=false;
1545			//console.log("isGift :"+(isGift?"true":"false"));
1546			//console.log("creation :"+(creation?"true":"false"));
1547
1548			if(adresse !== undefined && creation){
1549				adresse=dataManager.getAddressData(adresse);
1550			}
1551			let deferred = $q.defer(),
1552				pays=[],
1553				civilite = {},
1554				csMap = {},
1555				paysLoad = false,
1556				civiliteLoad = false,
1557				csLoad = false;
1558
1559			if(!newaddressForm && newaddressForm === undefined){
1560				newaddressForm = {};
1561			}
1562			newaddressForm.origin = origin;
1563			newaddressForm.others = {};
1564			newaddressForm.others.refAdresse = adresse.refAdresse;
1565			newaddressForm.others.codeClient = adresse.codeClient;
1566			if(isGift){
1567				newaddressForm.others.estParrainnage = true;
1568				newaddressForm.others.estLivraison = false;
1569				newaddressForm.others.estPrincipale = false;
1570			} else if(adresse.estLivraison === undefined){
1571				newaddressForm.others.estLivraison = true;
1572				newaddressForm.others.estPrincipale = false;
1573				newaddressForm.others.estParrainnage = false;
1574			} else {
1575				newaddressForm.others.estParrainnage = adresse.estParrainnage;
1576				newaddressForm.others.estLivraison = adresse.estLivraison;
1577				newaddressForm.others.estPrincipale = adresse.estPrincipale;
1578			}
1579			newaddressForm.fields = [];
1580
1581			if(customer !== undefined){
1582				_getListCs(customer, creation).then(
1583					function(map){
1584						csMap = map;
1585			          	csLoad = true;
1586			          	_tryEndAddress(newaddressForm);
1587					}
1588				);
1589			} else {
1590				csLoad = true;
1591			}
1592
1593			TbsWS.getCountries().then(
1594		          function(listpays){
1595		          	pays = listpays;
1596		          	paysLoad=true;
1597		          	_tryEndAddress(newaddressForm);
1598		          }
1599		          ,function(error) {
1600		          	console.error(error);
1601		          	deferred.reject({});
1602		        }
1603			);
1604
1605			TbsWS.call('getlistcivilites/'+$rootScope.preferredLanguage,'public').then(
1606		          function(listcivilites){
1607		          	var field = {},
1608	          			ar = [],
1609	          			ob={},
1610	          			defaultVal="",
1611	          			defaultIndex=commonConfig.defaultIndexCivilite,
1612	          			p,cs;
1613
1614					defaultVal="";
1615          			if(adresse.civilite !== undefined){
1616          				defaultVal = adresse.civilite;
1617          			}
1618
1619
1620	          		ar = [];
1621	          		for(cs in listcivilites["paramCs2Collection"]){
1622	          			ob = {};
1623	          			ob.value = listcivilites["paramCs2Collection"][cs].libelleCs;
1624	          			ob.label = listcivilites["paramCs2Collection"][cs].libelleCs;
1625	          			if (defaultVal !== null && ob.label !== null) {
1626							if(defaultVal.toUpperCase() === ob.label.toUpperCase()){
1627								defaultIndex = ar.length;
1628							}
1629						}
1630	          			ar.push(ob);
1631	          		}
1632
1633          			civilite.key = listcivilites.refCs;
1634          			civilite.typeCs = listcivilites.typeCs;
1635          			formulaireManager.createSelect("civilite",civilite,"DICO_CUSTOMER_CIVILITES",ar,(commonConfig.civiliteRequired?true:false),defaultIndex);
1636
1637		          	civiliteLoad=true;
1638		          	_tryEndAddress(newaddressForm);
1639		          }
1640		          ,function(error) {
1641		          	console.error(error);
1642		          	deferred.reject({});
1643		        }
1644			);
1645
1646			function _tryEndAddress(newaddressForm){
1647
1648				if(paysLoad && civiliteLoad && csLoad){
1649
1650					var ob,types=[];
1651					if(!creation){
1652						ob = {};
1653		          		ob.value = "delivery";
1654		          		ob.label = "DICO_PROFILE_ADRESSE_LIVRAISON";
1655		          		types.push(ob);
1656
1657						ob = {};
1658		          		ob.value = "billing";
1659		          		ob.label = "DICO_PROFILE_ADRESSE_FACTURATION";
1660		          		types.push(ob);
1661
1662			          	/*ob = {};
1663						formulaireManager.createSelect("type",ob,"DICO_CUSTOMER_TYPE_ADRESSE", types,true,_.indexOf(_.pluck(types, 'value'), (adresse.estLivraison?"delivery":"billing")));
1664						ob.translated = true;
1665						newaddressForm.fields.push(ob);*/
1666					}
1667
1668					if(adresse.titreAdresse===null||adresse.titreAdresse===undefined){
1669						adresse.titreAdresse = $filter('translate')('DICO_TITRE_ADDRESS_DEFAULT_VALUE');
1670					}
1671
1672					if(!creation){
1673						if(isGift){
1674							ob = {};
1675							ob.type = "fake";
1676			          		newaddressForm.fields.push(ob);
1677						} else {
1678							if(commonConfig.forceAskInfoCustomerInfoOnDelivery && adresse.estPrincipale){
1679								ob = {};
1680								ob.type = "fake";
1681								ob.name = "title";
1682								ob.value = adresse.titreAdresse;
1683				          		newaddressForm.fields.push(ob);
1684							} else {
1685								ob = {};
1686								formulaireManager.createTextField("title",ob,(adresse.titreAdresse!==undefined?adresse.titreAdresse:""),"DICO_CUSTOMER_TITRE_ADDRESS",true,"text",0,40);
1687								newaddressForm.fields.push(ob);
1688							}
1689						}
1690
1691						ob = {};
1692						formulaireManager.createTextField("company",ob,(adresse.societe!==undefined?adresse.societe:""),"DICO_CUSTOMER_SOCIETE",false,"text",0,40);
1693						newaddressForm.fields.push(ob);
1694					}
1695
1696					civilite.translated = true;
1697					newaddressForm.fields.push(civilite);
1698
1699					ob = {};
1700					formulaireManager.createTextField("name",ob,(adresse.nom!==undefined?adresse.nom:""),"DICO_CUSTOMER_NOM",true,"text",0,40);
1701					newaddressForm.fields.push(ob);
1702
1703					ob = {};
1704					formulaireManager.createTextField("firstname",ob,(adresse.prenom!==undefined?adresse.prenom:""),"DICO_CUSTOMER_PRENOM", (commonConfig.firstNameRequired?true:false),"text",0,40);
1705					newaddressForm.fields.push(ob);
1706
1707					if(creation){
1708						ob = {};
1709						formulaireManager.createTextField("company",ob,(adresse.societe!==undefined?adresse.societe:""),"DICO_CUSTOMER_SOCIETE",(commonConfig.companyRequired?true:false),"text",0,40);
1710						newaddressForm.fields.push(ob);
1711					}
1712
1713					//ob = {};
1714					//formulaireManager.createTextField("address4",ob,(adresse.adresse4!==undefined?adresse.adresse4:""),"DICO_CUSTOMER_COMPLEMENT_ADRESSE",false,"text",0,38);
1715					//newaddressForm.fields.push(ob);
1716
1717					ob = {};
1718					formulaireManager.createTextField("address1",ob,(adresse.adresse1!==undefined?adresse.adresse1:""),"DICO_CUSTOMER_COMPLEMENT_NOM",false,"text",0,38);
1719					newaddressForm.fields.push(ob);
1720
1721					ob = {};
1722					formulaireManager.createTextField("address2",ob,(adresse.adresse2!==undefined?adresse.adresse2:""),"DICO_CUSTOMER_ADRESSE",true,"text",0,38);
1723					newaddressForm.fields.push(ob);
1724
1725					ob = {};
1726					formulaireManager.createTextField("address3",ob,(adresse.adresse3!==undefined?adresse.adresse3:""),"DICO_CUSTOMER_COMPLEMENT_ADRESSE",false,"text",0,38);
1727					newaddressForm.fields.push(ob);
1728
1729					ob = {};
1730					formulaireManager.createTextField("codepostal",ob,(adresse.codepostal!==undefined?adresse.codepostal:""),"DICO_CUSTOMER_CODEPOSTAL",true,"text",5,5);
1731					newaddressForm.fields.push(ob);
1732
1733					/*ob = {};
1734					formulaireManager.createTextField("country",ob,"Bretagne","Country",true);
1735					newaddressForm.fields.push(ob);*/
1736
1737					ob = {};
1738					formulaireManager.createTextField("city",ob,(adresse.ville!==undefined?adresse.ville:""),"DICO_CUSTOMER_VILLE",true,"text",0,34);
1739					newaddressForm.fields.push(ob);
1740
1741					ob = {};
1742					formulaireManager.createSelect("state",ob,"DICO_CUSTOMER_PAYS",pays,true,_.indexOf(_.pluck(_.pluck(pays, 'value'), 'codeIso'), (adresse.codeIso!==undefined?adresse.codeIso:commonConfig.codeIsoDefaut)));
1743					newaddressForm.fields.push(ob);
1744
1745					ob = {};
1746					formulaireManager.createFixPhone("phonenumber",ob,(adresse.telephone!==undefined?adresse.telephone:""),(commonConfig.callnumberAtLeastOn?"DICO_CUSTOMER_TELEPHONE_REQUIS":"DICO_CUSTOMER_TELEPHONE"),false,"text",factory.MIN_LENGTH_PHONENUMBER,factory.MAX_LENGTH_PHONENUMBER);
1747					newaddressForm.fields.push(ob);
1748
1749					if(commonConfig.numberTelPortableOff){
1750						ob = {};
1751						formulaireManager.createMobilPhone("mobilphonenumber",ob,(adresse.portable!==undefined?adresse.portable:""),(commonConfig.callnumberAtLeastOn?"DICO_CUSTOMER_PORTABLE_REQUIS":"DICO_CUSTOMER_PORTABLE"),false,"text",factory.MIN_LENGTH_PHONENUMBER,factory.MAX_LENGTH_PHONENUMBER);
1752						newaddressForm.fields.push(ob);
1753					} else {
1754						ob = {};
1755						ob.type = "fake";
1756		          		newaddressForm.fields.push(ob);
1757		          	}
1758
1759					if(commonConfig.numberFaxOff){
1760						ob = {};
1761						formulaireManager.createFaxPhone("faxnumber",ob,(adresse.telecopie!==undefined?adresse.telecopie:""),"DICO_CUSTOMER_FAX",false,"text",factory.MIN_LENGTH_PHONENUMBER,factory.MAX_LENGTH_PHONENUMBER);
1762						newaddressForm.fields.push(ob);
1763					} else {
1764						ob = {};
1765						ob.type = "fake";
1766		          		newaddressForm.fields.push(ob);
1767		          	}
1768
1769					if(isGift){
1770						ob = {};
1771						formulaireManager.createEmail("email",ob,(adresse.email!==undefined?adresse.email:""),"DICO_CUSTOMER_EMAIL_BENEFICIAIRE",commonConfig.emailBeneficiaireRequired,"text", 0, factory.MAX_LENGTH_EMAIL);
1772						newaddressForm.fields.push(ob);
1773
1774						ob = {};
1775						formulaireManager.createTextField("envoieemail",ob,(adresse.envoieEmailBeneficiaire!==undefined?adresse.envoieEmailBeneficiaire:false),"DICO_CUSTOMER_INFORMER_BENEFICIAIRE_DU_CADEAU", false,"checkbox");
1776						newaddressForm.fields.push(ob);
1777					} else {
1778							ob = {};
1779							ob.type = "fake";
1780			          		newaddressForm.fields.push(ob);
1781
1782							ob = {};
1783							ob.type = "fake";
1784			          		newaddressForm.fields.push(ob);
1785					}
1786					let isTemporaryAdress = (adresse.estTemporaire !== undefined && adresse.estTemporaire) ? true : false;
1787					if(adresse.estTemporaire === undefined) {
1788						isTemporaryAdress = adresse.estLivraison == null || adresse.estLivraison && !adresse.estPrincipale;
1789					} else {
1790						isTemporaryAdress = adresse.estTemporaire;
1791					}
1792
1793					if (tryDisplayTemporaryAddress && isTemporaryAdress) {
1794						ob = {};
1795						formulaireManager.createDateField("datedebut",ob,(adresse.dateDebut!=null?new Date(adresse.dateDebut):''),"DICO_CUSTOMER_DATEDEBUT",false,"date");
1796						newaddressForm.fields.push(ob);
1797
1798						ob = {};
1799						formulaireManager.createDateField("datefin",ob,(adresse.dateFin!=null?new Date(adresse.dateFin):''),"DICO_CUSTOMER_DATEFIN",fal
1799se,"date");
1800						newaddressForm.fields.push(ob);
1801					} else {
1802						ob = {};
1803						ob.type = "fake";
1804						newaddressForm.fields.push(ob);
1805
1806						ob = {};
1807						ob.type = "fake";
1808						newaddressForm.fields.push(ob);
1809					}
1810
1811					if(commonConfig.forceAskInfoCustomerInfoOnDelivery) {
1812						newaddressForm.withProPart = true;
1813						//newaddressForm.withProPart = isGift || creation;
1814
1815						/* JIRA ABOWEB-11194 - suppression de la rubrique codeNii */
1816						/* JIRA ABOWEB- - gestion affichage codeNii en fonction d'une config json */
1817						ob = {};
1818						formulaireManager.createTextField("codenii",ob,(customer !== undefined && customer.codeNii !== null && customer.codeNii !== undefined?customer.codeNii:""),"DICO_CUSTOMER_CODENII",false,"text",0,40);
1819						ob.origin = "customer";
1820						if(commonConfig.addCodeNiiInAddressFormPro) {
1821							newaddressForm.fields.push(ob);
1822						}
1823
1824						newaddressForm.isPro = factory.addressIsPro(adresse);
1825						newaddressForm.withAdress = cartManager.addressIsRequired() || (forceDisplayAdresse !== undefined && forceDisplayAdresse) || newaddressForm.isPro || isGift;
1826						console.log("isPro="+newaddressForm.isPro);
1827						console.log("withAdress="+newaddressForm.withAdress);
1828						if(newaddressForm.withAdress === false){
1829							//Si adresse particulier et 100% numerique, ces informations sont tout le temps obligatoire
1830							let listFieldAlwaysRequired = ["name","firstname","phonenumber","state"];
1831							//let listFieldAlwaysRequired = commonConfig.fieldsNumericAdressRequired;
1832
1833							//Si cest un formulaire sans le bloc adresse, juste du complement, on rend non obligatoire les champs adresses pour passer le controle du formulaire
1834							for(var i=0;i<newaddressForm.fields.length;i++){
1835								ob = newaddressForm.fields[i];
1836								if(!_.contains(listFieldAlwaysRequired,ob.name)) {
1837									ob.name = "disabled-"+ob.name;
1838									ob.required = false;
1839									ob.type = "fake";
1840								}
1841							}
1842						}
1843
1844						if(isGift === false && ((forceDisplayAdresse !==undefined && forceDisplayAdresse === false) || forceDisplayAdresse === undefined)) {
1845							console.log(csMap);
1846
1847							//Ajout des cs sur le bloc principal
1848							if(csMap !== undefined && csMap.csBlockPrincipal !== undefined) {
1849								for(var i=0;i<csMap.csBlockPrincipal.length;i++){
1850									ob = csMap.csBlockPrincipal[i];
1851									ob.origin = "cs";
1852									ob.cgv = false;
1853									newaddressForm.fields.push(ob);
1854								}
1855							}
1856
1857							//Ajout des cs sur le bloc optionnal
1858							if(csMap !== undefined && csMap.csOptionnal !== undefined) {
1859								for(var i=0;i<csMap.csOptionnal.length;i++){
1860									ob = csMap.csOptionnal[i];
1861									ob.origin = "cs";
1862									ob.cgv = false;
1863									newaddressForm.fields.push(ob);
1864								}
1865							}
1866						}
1867
1868						//Ajout de fake
1869						/*for(var i=0;i< 15;i++){
1870							ob = {};
1871							ob.name = "Coucou"+i;
1872							ob.required = true;
1873							ob.origin = "cs";
1874							ob.type = "text";
1875							newaddressForm.fields.push(ob);
1876						}*/
1877
1878						newaddressForm.reloadTypeCustomer = function reloadTypeCustomer(state){
1879							newaddressForm.isPro = state;
1880							newaddressForm.onlyTel = commonConfig.onlyTelephonOnAdresseForm;
1881							if(newaddressForm.isPro){
1882								ob = _.findWhere(newaddressForm.fields, {name: "company"});
1883								if(ob !== undefined) {
1884									ob.required = false;
1885								}
1886								ob = _.findWhere(newaddressForm.fields, {name: "codenii"});
1887								if(ob !== undefined) {
1888									ob.required = false;
1889								}
1890								ob = _.findWhere(newaddressForm.fields, {name: "civilite"});
1891								if(ob !== undefined) {
1892									ob.required = true;
1893								}
1894								ob = _.findWhere(newaddressForm.fields, {name: "name"});
1895								if(ob !== undefined) {
1896									ob.required = true;
1897								}
1898								ob = _.findWhere(newaddressForm.fields, {name: "firstname"});
1899								if(ob !== undefined) {
1900									ob.required = true;
1901								}
1902								ob = _.findWhere(newaddressForm.fields, {name: "phonenumber"});
1903								if(ob !== undefined) {
1904									ob.required = commonConfig.callnumberAtLeastOn? true : false;
1905								}
1906							} else {
1907								ob = _.findWhere(newaddressForm.fields, {name: "company"});
1908								if(ob !== undefined) {
1909									ob.required = false;
1910								}
1911								ob = _.findWhere(newaddressForm.fields, {name: "codenii"});
1912								if(ob !== undefined) {
1913									ob.required = false;
1914								}
1915								ob = _.findWhere(newaddressForm.fields, {name: "civilite"});
1916								if(ob !== undefined) {
1917									ob.required = false;
1918								}
1919								ob = _.findWhere(newaddressForm.fields, {name: "name"});
1920								if(ob !== undefined) {
1921									ob.required = true;
1922								}
1923								ob = _.findWhere(newaddressForm.fields, {name: "firstname"});
1924								if(ob !== undefined) {
1925									ob.required = true;
1926								}
1927								ob = _.findWhere(newaddressForm.fields, {name: "phonenumber"});
1928								if(ob !== undefined) {
1929									ob.required = commonConfig.callnumberAtLeastOn? true : false;
1930								}
1931
1932							}
1933						}
1934						newaddressForm.reloadTypeCustomer(newaddressForm.isPro);
1935
1936					} else {
1937						newaddressForm.withAdress = true;
1938						newaddressForm.withProPart = false;
1939					}
1940
1941					if(onlyRequiredAndEmpty !== undefined && onlyRequiredAndEmpty) {
1942						newaddressForm.fields = _.filter(newaddressForm.fields, function(ob){
1943								if(ob.type === "checkbox") {
1944									return ob.required && ob.value === false;
1945								} else {
1946									return ob.required && (ob.value === '' || ob.value === null);
1947								}
1948							}
1949						);
1950					}
1951
1952					deferred.resolve(newaddressForm);
1953				}
1954			}
1955
1956			return deferred.promise;
1957		};
1958
1959		factory.getAccesForm = function getAccesForm(accesForm) {
1960			let deferred = $q.defer(),
1961				ob = {};
1962
1963			formulaireManager.createEmail("email", ob, "", 'DICO_EMAIL', true, "text", 0, factory.MAX_LENGTH_EMAIL);
1964			accesForm.fields.push(ob);
1965
1966			deferred.resolve(accesForm);
1967			return deferred.promise;
1968		};
1969
1970		factory.addressIsPro = function addressIsPro(adresse){
1971			return !(adresse.societe === undefined || adresse.societe === "" || adresse.societe === null)
1972		}
1973
1974		factory.getBuildUserForm = function getBuildUserForm(){
1975			let deferred = $q.defer(),
1976			newuserForm = {};
1977
1978			newuserForm.alert = {};
1979			newuserForm.alert.message = [];
1980			newuserForm.info = {};
1981			newuserForm.info.message = [];
1982			newuserForm.others = {};
1983			newuserForm.csBlockPrincipal = [];
1984			newuserForm.fields = [];
1985
1986			_tryEndCustomer(deferred, newuserForm, true, {}, false);
1987
1988			return deferred.promise;
1989		}
1990
1991		function _getListCs(customer, creation){
1992			let deferred = $q.defer();
1993
1994			TbsWS.call('getfieldscustomer/'+$rootScope.preferredLanguage,'public').then(
1995				function(listcs){
1996					let csMap = {}
1997					csMap.csBlockPrincipal = [];
1998					csMap.csOptionnal = [];
1999	          		let field = {},
2000	          			ar = [],
2001	          			ob={},
2002	          			defaultVal="",
2003	          			defaultIndex=-1,
2004	          			p,cs,defaultOb;
2005
2006					for(p in listcs){
2007						if(listcs[p].typeCs !== 'F') {
2008			          		field = {};
2009
2010			          		defaultVal="";
2011			          		defaultIndex=-1;
2012		          			if(customer.listWCS !== undefined && customer.listWCS.length > 0){
2013		          				ob = _.findWhere(customer.listWCS, {keyCS: listcs[p].refCs});
2014		          				if(ob !== undefined){
2015		          					defaultVal = ob.value;
2016			          				field.refInterneCS = ob.refInterneCS;
2017		          				}
2018		          			}
2019
2020			          		//TEXTFIELD
2021			          		if(listcs[p].typeSaisie == "1"){
2022			          			field.key = listcs[p].refCs;
2023			          			field.typeCs = listcs[p].typeCs;
2024			          			field.typeSaisie = listcs[p].typeSaisie;
2025			          			if (field.typeCs === 'D') {
2026			          				formulaireManager.createDateField("",field,defaultVal,listcs[p].libelleCs,listcs[p].estObligatoire);
2027			          				if (field.value != null && field.value != '') {
2028			          					field.value = new Date(field.value);
2029			          				}
2030			          			} else {
2031			          				formulaireManager.createTextField("",field,defaultVal,listcs[p].libelleCs,listcs[p].estObligatoire);
2032			          			}
2033			          			field.editable = !listcs[p].estLectureSeule;
2034			          		}
2035			          		//SELECT
2036			          		else if(listcs[p].typeSaisie == "2")
2037							{
2038								ar = [];
2039				          		defaultOb = _.findWhere(commonConfig.defaultcsvalues, {refCs: listcs[p].refCs});
2040				          		for(cs in listcs[p]["paramCs2Collection"]){
2041				          			ob = {};
2042				          			ob.value = listcs[p]["paramCs2Collection"][cs].refCs2;
2043				          			ob.label = listcs[p]["paramCs2Collection"][cs].libelleCs;
2044				          			if(defaultVal === ob.label){
2045				          				defaultIndex = ar.length;
2046				          				ar.push(ob);
2047				          			} else if(defaultIndex == -1 && defaultOb !== undefined && defaultOb.refCs2 === ob.value){
2048				          				//Si on est sur un defaut forcé par le paramétrage, on l'ajoute au début de la liste
2049				          				defaultIndex = -1;
2050				          				ar.unshift(ob);
2051				          			} else {
2052				          				ar.push(ob);
2053				          			}
2054				          		}
2055			          			field.key = listcs[p].refCs;
2056			          			field.typeCs = listcs[p].typeCs;
2057			          			field.typeSaisie = listcs[p].typeSaisie;
2058			          			formulaireManager.createSelect("",field,listcs[p].libelleCs,ar,listcs[p].estObligatoire,defaultIndex);
2059			          		}
2060			          		//CASE A COCHER
2061			          		else if(listcs[p].typeSaisie == "3"){
2062			          			field.key = listcs[p].refCs;
2063			          			field.typeCs = listcs[p].typeCs;
2064			          			field.typeSaisie = listcs[p].typeSaisie;
2065			          			formulaireManager.createCheckbox("",field,(defaultVal=='true'?true:false),listcs[p].libelleCs,listcs[p].estObligatoire);
2066			          		}
2067			          		if(field.key !== undefined && ((creation == true && listcs[p].estLectureSeule == false) || creation == false)){
2068			          			field.estDansBlockPrincipal = listcs[p].estDansBlockPrincipal;
2069				          		if(listcs[p].estObligatoire || listcs[p].estDansBlockPrincipal){
2070				          			csMap.csBlockPrincipal.push(field);
2071				          		} else {
2072				          			csMap.csOptionnal.push(field);
2073				          		}
2074			          		}
2075						}
2076		          	}
2077
2078					let formulaireconf = commonConfig.formulaireconf["adresse"];
2079					//Gestion des CS surchargés
2080					if(formulaireconf !== undefined && formulaireconf.length > 0){
2081						for(let i=0;i<formulaireconf.length;i++){
2082							let param = formulaireconf[i];
2083							if(param !== undefined && param.type === "CS"){
2084								let forigin = _.findWhere(csMap.csBlockPrincipal, {key: param.id});
2085								let field = completeOrRemove(param, forigin);
2086								if(field !== undefined) {
2087									csMap.csBlockPrincipal = _.without(csMap.csBlockPrincipal, field);
2088									if(field.required || field.estDansBlockPrincipal){
2089										csMap.csBlockPrincipal.push(field);
2090					          		} else {
2091					          			csMap.csOptionnal.push(field);
2092					          		}
2093								} else if(forigin !== undefined){
2094									csMap.csBlockPrincipal = _.without(csMap.csBlockPrincipal, forigin);
2095								}
2096
2097								forigin = _.findWhere(csMap.csOptionnal, {key: param.id});
2098								field = completeOrRemove(param, forigin);
2099								if(field !== undefined) {
2100									csMap.csOptionnal = _.without(csMap.csOptionnal, field);
2101									if(field.required || field.estDansBlockPrincipal){
2102										csMap.csBlockPrincipal.push(field);
2103					          		} else {
2104					          			csMap.csOptionnal.push(field);
2105					          		}
2106								} else if(forigin !== undefined){
2107									csMap.csOptionnal = _.without(csMap.csOptionnal, forigin);
2108								}
2109							}
2110						}
2111					}
2112					deferred.resolve(csMap);
2113				}
2114			);
2115
2116			return deferred.promise;
2117		}
2118
2119		factory.getEditUserForm = function getEditUserForm(customer, creation, onlyRequiredAndEmpty){
2120			var deferred = $q.defer(),
2121				csLoad=false,
2122				newuserForm = {};
2123
2124			/*if(!newuserForm && newuserForm === undefined){
2125				newuserForm = {};
2126			}*/
2127			newuserForm.alert = {};
2128			newuserForm.alert.message = [];
2129			newuserForm.info = {};
2130			newuserForm.info.message = [];
2131			newuserForm.others = {};
2132			newuserForm.fields = [];
2133
2134			_getListCs(customer, creation).then(
2135				function(csMap){
2136					newuserForm.csBlockPrincipal = csMap.csBlockPrincipal;
2137					newuserForm.csOptionnal = csMap.csOptionnal;
2138		          	_tryEndCustomer(deferred, newuserForm, creation, customer, onlyRequiredAndEmpty);
2139				}
2140			);
2141
2142        	if(creation){
2143	        	newuserForm.others.acceptterms = {};
2144	        	newuserForm.others.acceptterms.required = true;
2145	        	newuserForm.others.acceptterms.value = (customer.acceptterms!==undefined?customer.acceptterms:false);
2146	        	newuserForm.others.acceptterms.error = false;
2147
2148	        	formulaireManager.createCaptcha(newuserForm,true,"newuserForm");
2149			} else {
2150				newuserForm.optins = [];
2151				_getOptins(0,50).then(function (optins) {
2152					newuserForm.optins = optins;
2153				});
2154			}
2155        	if(customer.codeClient && customer.codeClient != undefined){
2156        		newuserForm.others.codeClient = customer.codeClient;
2157        	} else {
2158        		newuserForm.others.codeClient = 0;
2159        	}
2160
2161			return deferred.promise;
2162		};
2163
2164		function completeOrRemove(param, field){
2165			if(field !== undefined && param.display){
2166				if(_.contains(["codeclient", "company"], param.entity)){
2167					field.editable = false;
2168					field.required = false;
2169				} else {
2170					if(param.readonly !== undefined){
2171						field.editable = !param.readonly;
2172					}
2173					if(param.required !== undefined){
2174						field.required = param.required;
2175					}
2176				}
2177				return field;
2178			}
2179			return undefined;
2180		}
2181
2182
2183
2184		function _getFinFormulaireClient(newuserForm, creation, customer){
2185
2186			let allfields =  newuserForm.fields,
2187				index = 0,
2188				ob = {},
2189				fields = {},
2190				adressePrincipale,
2191				formulaireconf;
2192
2193			//if(creation == false){
2194				newuserForm.colonne1 = [];
2195				newuserForm.colonne2 = [];
2196
2197				if(creation){
2198					formulaireconf = commonConfig.formulaireconf["identification"];
2199				} else {
2200					formulaireconf = commonConfig.formulaireconf["profil"];
2201				}
2202
2203				if(formulaireconf === undefined || formulaireconf.length == 0){
2204					//creation des colonnes
2205					for(let i=0;i<newuserForm.fields.length;i++){
2206						ob = newuserForm.fields[i];
2207						ob.tabindex = ++index;
2208						if(i < (newuserForm.fields.length/2)){
2209							newuserForm.colonne1.push(ob);
2210						} else {
2211							newuserForm.colonne2.push(ob);
2212						}
2213					}
2214				} else {
2215					newuserForm.fields = [];
2216					fields[1]={};
2217					fields[2]={};
2218
2219					if(customer.adresses !== undefined && customer.adresses.length > 0){
2220						for(let i=0;i<customer.adresses.length;i++){
2221							if(customer.adresses[i].estPrincipale){
2222								adressePrincipale = customer.adresses[i];
2223								break;
2224							}
2225						}
2226
2227						if(adressePrincipale !== undefined){
2228							ob = {};
2229							formulaireManager.createTextField("company",ob,(adressePrincipale.societe!==undefined?adressePrincipale.societe:""),"DICO_CUSTOMER_SOCIETE",false,"text",0,40);
2230							allfields.push(ob);
2231						}
2232					}
2233
2234					ob = {};
2235					formulaireManager.createTextField("siret",ob,(customer.siret!==undefined?customer.siret:""),"DICO_CUSTOMER_SIRET",false,"text",0,40);
2236					allfields.push(ob);
2237
2238					ob = {};
2239					formulaireManager.createTextField("pseudo",ob,(customer.pseudo!==undefined?customer.pseudo:""),"DICO_CUSTOMER_PSEUDO",false,"text",0,80);
2240					allfields.push(ob);
2241
2242					ob = {};
2243					formulaireManager.createTextField("codenii",ob,(customer.codeNii!==undefined?customer.codeNii:""),"DICO_CUSTOMER_CODENII",false,"text",0,40);
2244					allfields.push(ob);
2245
2246
2247		        	ob = {};
2248					formulaireManager.createTextField("codeexterne",ob,(customer.codeExterne!==undefined?customer.codeExterne:""),'DICO_CUSTOMER_CODE_EXTERNE',false);
2249					ob.placeholder = (creation?'DICO_CUSTOMER_CODE_EXTERNE':'DICO_INCONNU');
2250					ob.editable = false;
2251					allfields.push(ob);
2252
2253					let maxPositionColonne1 = 0;
2254					let maxPositionColonne2 = 0;
2255
2256					for(let i=0;i<formulaireconf.length;i++){
2257						let param = formulaireconf[i];
2258						if(param !== undefined && param.display){
2259							let field = _.findWhere(allfields, {name: param.entity});
2260							if(field !== undefined){
2261								if(_.contains(["codeclient", "company"], param.entity)){
2262									field.editable = false;
2263									field.required = false;
2264								} else {
2265									if(param.readonly !== undefined){
2266										field.editable = !param.readonly;
2267									}
2268									if(param.required !== undefined){
2269										field.required = param.required;
2270									}
2271								}
2272
2273								fields[param.colonne][param.position] = field;
2274								if(param.colonne == 1){
2275									maxPositionColonne1 = Math.max(maxPositionColonne1, param.position);
2276								} else {
2277									maxPositionColonne2 = Math.max(maxPositionColonne2, param.position);
2278								}
2279							}
2280						}
2281					}
2282
2283					for(let i=1;i<=maxPositionColonne1;i++){
2284						ob = fields[1][i];
2285						if(ob === undefined){
2286							newuserForm.fields.push({type:"fake"});
2287							newuserForm.colonne1.push({type:"fake"});
2288						} else {
2289							ob.tabindex = ++index;
2290							newuserForm.fields.push(ob);
2291							newuserForm.colonne1.push(ob);
2292						}
2293					}
2294
2295					for(let i=1;i<=(maxPositionColonne2-1);i++){
2296						ob = fields[2][i];
2297						if(ob === undefined){
2298							newuserForm.fields.push({type:"fake"});
2299							newuserForm.colonne2.push({type:"fake"});
2300						} else {
2301							ob.tabindex = ++index;
2302							newuserForm.fields.push(ob);
2303							newuserForm.colonne2.push(ob);
2304						}
2305					}
2306					ob = fields[2][maxPositionColonne2];
2307					if(ob !== undefined){
2308						ob.tabindex = ++index;
2309						newuserForm.fields.push(ob);
2310						newuserForm.colonne2.push(ob);
2311					}
2312
2313					while(newuserForm.colonne2.length < newuserForm.colonne1.length-1){
2314						newuserForm.colonne2.push({type:"fake"});
2315					}
2316				}
2317
2318				//Ajout des cs
2319				for(var i=0;i<newuserForm.csBlockPrincipal.length;i++){
2320					ob = newuserForm.csBlockPrincipal[i];
2321					ob.tabindex = ++index;
2322					newuserForm.fields.push(ob);
2323					if(index%2==0){
2324						newuserForm.colonne2.push(ob);
2325					} else {
2326						newuserForm.colonne1.push(ob);
2327					}
2328				}
2329
2330				//On prend tout comme avant et on complete si besoin
2331				if(newuserForm.fields.length > 0 && newuserForm.fields.length%2==1){
2332	          		ob = {};
2333					ob.type = "fake";
2334	          		newuserForm.fields.push(ob);
2335	          		newuserForm.colonne2.push(ob);
2336	          	}
2337
2338				if(creation === false) {
2339					ob = _.findWhere(newuserForm.fields, {name: "email"});
2340					if(ob !== undefined) {
2341						ob.editable = commonConfig.emailEditableAccountPage;
2342					}
2343				}
2344				//console.log(newuserForm.fields);
2345				//console.log(newuserForm.colonne1);
2346				//console.log(newuserForm.colonne2);
2347			//}
2348		}
2349
2350		function _tryEndCustomer(deferred, newuserForm, creation, customer, onlyRequiredA
2350ndEmpty){
2351			let ob, langues, selectLangues = [];
2352			TbsWS.call('getlangues', 'public').then(
2353				function (result) {
2354					langues = result;
2355					var i = 0,
2356						index = 0;
2357
2358					if (langues && langues.length > 1) {
2359						for (i; i < langues.length; i++) {
2360							ob = {};
2361							ob.value = langues[i].codeIso;
2362							ob.label = langues[i].libelle;
2363							selectLangues.push(ob);
2364						}
2365						let langue = customer.langue;
2366						if (!langue) {
2367							langue = commonConfig.isoPaysRoutage.toLowerCase();
2368						}
2369						selectLangues = _.sortBy(selectLangues, function(l) { return l.label; });
2370						ob = _.findWhere(selectLangues, {value: langue});
2371						if(ob !== undefined){
2372							index = _.indexOf(_.pluck(selectLangues, 'value'), ob.value);
2373						}
2374
2375						ob = {};
2376						formulaireManager.createSelect("langue", ob, "DICO_CUSTOMER_LANGUE", selectLangues, true, index);
2377						newuserForm.fields.push(ob);
2378					}
2379
2380					if (creation) {
2381						ob = {};
2382						formulaireManager.createEmail("email",ob,(customer.email!==undefined?customer.email:""),"DICO_CUSTOMER_EMAIL", true,"text", 0, factory.MAX_LENGTH_EMAIL);
2383						newuserForm.fields.push(ob);
2384					} else {
2385						ob={};
2386						formulaireManager.createTextField("codeclient",ob,(customer.codeClient!==undefined?customer.codeClient:""),'DICO_CUSTOMER_CODE',true,"numeric");
2387						ob.editable = false;
2388						newuserForm.fields.push(ob);
2389					}
2390					if (creation) {
2391						ob = {};
2392						formulaireManager.createPassword("password",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_MOTDEPASSE",(creation?true:false),"text", factory.MIN_LENGTH_PASSWORD, factory.MAX_LENGTH_PASSWORD);
2393						newuserForm.fields.push(ob);
2394					} else {
2395						ob = {};
2396						formulaireManager.createPassword("password",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_LOGGED_MOTDEPASSE",(creation?true:false),"text", factory.MIN_LENGTH_PASSWORD, factory.MAX_LENGTH_PASSWORD);
2397						newuserForm.fields.push(ob);
2398					}
2399
2400					if (creation) {
2401						ob = {};
2402						formulaireManager.createPassword("confirmpassword",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_CONFIRM_MOTDEPASSE",(creation?true:false),"text",0, factory.MAX_LENGTH_PASSWORD);
2403						newuserForm.fields.push(ob);
2404
2405						//Add address field
2406						factory.getNewAddressForm({}, creation, false).then(function(newadressForm){
2407
2408							newuserForm.fields = newuserForm.fields.concat(newadressForm.fields);
2409							for(var p in newadressForm.others){
2410								newuserForm.others[p] = newadressForm.others[p];
2411							}
2412
2413							_getFinFormulaireClient(newuserForm, creation, customer);
2414
2415							deferred.resolve(newuserForm);
2416
2417						});
2418					} else {
2419						ob = {};
2420						formulaireManager.createEmail("email",ob,(customer.email!==undefined?customer.email:""),"DICO_CUSTOMER_EMAIL",true,"text", 0, factory.MAX_LENGTH_EMAIL);
2421						newuserForm.fields.push(ob);
2422
2423						ob = {};
2424						formulaireManager.createPassword("confirmpassword",ob,(customer.testpassword!==undefined?customer.testpassword:""),"DICO_CUSTOMER_LOGGED_CONFIRM_MOTDEPASSE",(creation?true:false),"text",0, factory.MAX_LENGTH_PASSWORD);
2425						newuserForm.fields.push(ob);
2426
2427						_getFinFormulaireClient(newuserForm, creation, customer);
2428
2429						if(onlyRequiredAndEmpty !== undefined && onlyRequiredAndEmpty) {
2430							newuserForm.fields = _.filter(newuserForm.fields, function(ob){
2431									return ob.required && ob.value === '';
2432								}
2433							);
2434							newuserForm.csBlockPrincipal = _.filter(newuserForm.csBlockPrincipal, function(ob){
2435									return ob.required && ob.value === '';
2436								}
2437							);
2438						}
2439
2440						deferred.resolve(newuserForm);
2441					}
2442				}, function (error) {
2443					console.error("Error load langues: " + error);
2444					deferred.resolve(false);
2445				}
2446			);
2447		}
2448
2449		factory.getNewUserForm = function getNewUserForm(){
2450			return factory.getEditUserForm(dataManager.getCustomerData(),true);
2451		};
2452
2453		factory.getCommentForm = function getCommentForm(){
2454			var commentForm = {},ob={},comment;
2455			commentForm.fields = [];
2456			commentForm.others = {};
2457
2458			comment = dataManager.getCommentData();
2459
2460			ob={};
2461			formulaireManager.createTextField("message",ob,(comment.message!==undefined?comment.message:""),'DICO_CUSTOMER_VOS_COMMENTAIRES',true,"text",0,500);
2462			commentForm.fields.push(ob);
2463
2464			var notes = [];
2465			for(var i=0;i<=10;i++){
2466    			ob={};
2467    			ob.value = i;
2468    			ob.label = i;
2469    			notes.push(ob);
2470    		}
2471
2472			ob={};
2473			formulaireManager.createSelect("notes",ob,"DICO_CUSTOMER_VOTRE_NOTE",notes,true);
2474			commentForm.fields.push(ob);
2475
2476			return commentForm;
2477		};
2478
2479		factory.getNoteForm = function getNoteForm(){
2480			var commentForm = {},ob={},val,fl,label;
2481			commentForm.fields = [];
2482			commentForm.others = {};
2483
2484			for(var i = 10;i>0;i--){
2485				ob={};
2486
2487				fl = (i/2)-Math.floor(i/2);
2488				val = i/2;//(fl==0?Math.floor(i/2):(Math.floor(i/2)==0?"half":Math.floor(i/2)+" and a half"));
2489
2490				label = (i%2==1?"star"+(Math.floor(i/2)<1?"":Math.floor(i/2))+"half":"star"+(i/2));
2491
2492				formulaireManager.createRadio("rating",ob,val,label,false);
2493				ob.full = (fl==0?true:false);
2494
2495				commentForm.fields.push(ob);
2496			}
2497			return commentForm;
2498		};
2499
2500		/*factory.setNewNote = function setNewNote(newNote,product){
2501        	var deferred = $q.defer();
2502        	if(!Auth.isClientConnecte()){
2503	        		$rootScope.temp.commenttitle = "DICO_CUSTOMER_NOTE_NON_CONNECTE_TITRE";
2504	        		$rootScope.temp.commenttext = "DICO_CUSTOMER_NOTE_NON_CONNECTE_MESSAGE";
2505	        		deferred.resolve(true);
2506        	} else {
2507				var comment={};
2508				comment.note = parseInt(parseFloat(newNote*2));
2509
2510				TbsWS.call('setnote/'+$rootScope.preferredLanguage+'/'+product.refProduit,'private',comment).then(
2511					function(result){
2512		        		if(result && result.key === "setnote"){
2513		        			var status = result.value;
2514							status = status.replace(/"/g,'');
2515			          		if(status.indexOf(factory.COMMENT_STATUS_CREATE) == 0){
2516			          			$rootScope.temp.commenttitle = "DICO_CUSTOMER_NOTE_TITRE";
2517				          		$rootScope.temp.commenttext = "DICO_CUSTOMER_NOTE_MESSAGE";
2518			          			$rootScope.temp.commentvalue = "";
2519				          	} else {
2520				          		$rootScope.temp.commenttitle = "DICO_ERREUR_CUSTOMER_NOTE_TITRE";
2521				          		$rootScope.temp.commenttext = "DICO_ERREUR_CUSTOMER_NOTE_MESSAGE";
2522				          	}
2523				          	deferred.resolve(true);
2524				        } else {
2525				        	deferred.resolve(false);
2526				        }
2527					}
2528				);
2529			}
2530
2531			return deferred.promise;
2532		};*/
2533
2534        factory.createComment = function createComment(commentForm,product){
2535        	var deferred = $q.defer();
2536        	if(!Auth.isClientConnecte()){
2537	        		$rootScope.temp.commenttitle = "DICO_CUSTOMER_COMMENTAIRE_NON_CONNECTE_TITRE";
2538	        		$rootScope.temp.commenttext = "DICO_CUSTOMER_COMMENTAIRE_NON_CONNECTE_MESSAGE";
2539	        		deferred.resolve(true);
2540        	} else if(!formulaireManager.verifForm(commentForm)){
2541        		deferred.resolve(false);
2542        	} else {
2543				var comment={};
2544				comment.description = commentForm.fields[0].value;
2545				comment.note = parseInt(parseFloat( commentForm.fields[1].value*2));
2546
2547				TbsWS.call('createcomment/'+$rootScope.preferredLanguage+'/'+product.refProduit,'private',comment).then(
2548					function(result){
2549		        		if(result && result.key === "createcomment"){
2550		        			var status = result.value;
2551							status = status.replace(/"/g,'');
2552			          		if(status.indexOf(factory.COMMENT_STATUS_CREATE) == 0){
2553			          			$rootScope.temp.commentvalue = comment.description;
2554				          		$rootScope.temp.commenttitle = "DICO_CUSTOMER_COMMENTAIRE_TITRE";
2555			          			$rootScope.temp.commenttext = "DICO_CUSTOMER_COMMENTAIRE_MESSAGE";
2556				          	} else {
2557				          		$rootScope.temp.commenttitle = "DICO_ERREUR_CUSTOMER_COMMENTAIRE_TITRE";
2558				          		$rootScope.temp.commenttext = "DICO_ERREUR_CUSTOMER_COMMENTAIRE_MESSAGE";
2559				          	}
2560				          	deferred.resolve(true);
2561				        } else {
2562				        	deferred.resolve(false);
2563				        }
2564					}
2565				);
2566			}
2567
2568			return deferred.promise;
2569		};
2570
2571		factory.getForgetPrompt = function getForgetPrompt(){
2572			if(commonConfig.connexionmode == "EMAIL"){
2573	        	return 'DICO_SAISISSEZ_VOTRE_EMAIL_POUR_RECEVOIR_VOTRE_MOT_DE_PASSE';
2574			} else {
2575				return 'DICO_SAISISSEZ_VOTRE_CODE_CLIENT_POUR_RECEVOIR_VOTRE_MOT_DE_PASSE';
2576			}
2577		};
2578
2579		factory.getForgetForm = function getForgetForm(oldForm){
2580			var forgetForm = {},ob={};
2581			forgetForm.alert = {};
2582			forgetForm.alert.message = [];
2583			forgetForm.fields = [];
2584			forgetForm.others = {};
2585
2586			ob={};
2587
2588			formulaireManager.createCaptcha(forgetForm, true, "forgetForm");
2589
2590			if(commonConfig.connexionmode == "EMAIL"){
2591	        	formulaireManager.createEmail("email",ob,"",'DICO_CUSTOMER_VOTRE_EMAIL',true,"text", 0, factory.MAX_LENGTH_EMAIL);
2592			} else {
2593				formulaireManager.createTextField("email",ob,"",'DICO_CUSTOMER_LOGIN_CONNEXION',true,"text", 0, factory.MAX_LENGTH_EMAIL);
2594			}
2595			forgetForm.fields.push(ob);
2596
2597			return forgetForm;
2598		};
2599
2600		factory.checkAskPassword = function checkAskPassword(forgetForm){
2601        	forgetForm.alert.message = [];
2602			return formulaireManager.verifForm(forgetForm);
2603		};
2604
2605		factory.sendEmailLinkRenewPassword = function sendEmailLinkRenewPassword(forgetForm){
2606			var deferred = $q.defer();
2607			forgetForm.alert.message = [];
2608
2609			if(!formulaireManager.verifForm(forgetForm)){
2610				deferred.resolve(false);
2611			} else {
2612				var email = formulaireManager.getDefaultValue(_.findWhere(forgetForm.fields, {name: "email"}
2612),"nomail");
2613				TbsWS.call('sendmelinkrenewpassword/'+$rootScope.preferredLanguage,'public', {email: email}, (forgetForm.others.captcha !== undefined ? vcRecaptchaService.getResponse(forgetForm.others.captcha.widgetId) : "" )).then(
2614					function(result){
2615						formulaireManager.resetCaptcha(forgetForm.others.captcha);
2616						forgetForm.alert.message = [];
2617						if(result && result.key === "sendmelinkrenewpassword"){
2618							var status = result.value;
2619							if(!status || status === undefined){
2620								forgetForm.alert.message.push("DICO_ERREUR_CUSTOMER_ERREUR_INCONNU");
2621								deferred.resolve(false);
2622							} else {
2623								status = status.replace(/"/g,'');
2624								if(status == factory.FORGET_MAIL_SEND){
2625									deferred.resolve(true);
2626								} else if(status == factory.FORGET_MAIL_UNKNOWN){
2627									forgetForm.alert.message.push("DICO_ERREUR_CUSTOMER_MAIL_INCONNU");
2628									deferred.resolve(false);
2629								} else {
2630									forgetForm.alert.message.push("DICO_ERREUR_CUSTOMER_ERREUR_PENDANT_LENVOIE_DU_MAIL");
2631									deferred.resolve(false);
2632								}
2633							}
2634						} else {
2635							deferred.resolve(false);
2636						}
2637					}
2638					,function(error) {
2639						formulaireManager.resetCaptcha(forgetForm.others.captcha);
2640						forgetForm.alert.message.push("DICO_ERREUR_CUSTOMER_ERREUR_INCONNU");
2641						deferred.resolve(false);
2642					}
2643				);
2644			}
2645			return deferred.promise;
2646		};
2647
2648		factory.askPassword = function askPassword(forgetForm){
2649			var deferred = $q.defer();
2650        	forgetForm.alert.message = [];
2651
2652        	if(!formulaireManager.verifForm(forgetForm)){
2653        		deferred.resolve(false);
2654        	} else {
2655        		var email = formulaireManager.getDefaultValue(_.findWhere(forgetForm.fields, {name: "email"}),"nomail");
2656	        	TbsWS.call('sendmepassword/'+$rootScope.preferredLanguage,'public', {email: email}, (forgetForm.others.captcha !== undefined ? vcRecaptchaService.getResponse(forgetForm.others.captcha.widgetId) : "" )).then(
2657					function(result){
2658						formulaireManager.resetCaptcha(forgetForm.others.captcha);
2659						forgetForm.alert.message = [];
2660						if(result && result.key === "sendmepassword"){
2661							var status = result.value;
2662				          	if(!status || status === undefined){
2663				          		forgetForm.alert.message.push("DICO_ERREUR_CUSTOMER_ERREUR_INCONNU");
2664				          		deferred.resolve(false);
2665				          	} else {
2666			          			status = status.replace(/"/g,'');
2667			          			if(status == factory.FORGET_MAIL_SEND){
2668			          				deferred.resolve(true);
2669			          			} else if(status == factory.FORGET_MAIL_UNKNOWN){
2670				          			forgetForm.alert.message.push("DICO_ERREUR_CUSTOMER_MAIL_INCONNU");
2671					        		deferred.resolve(false);
2672					          	} else {
2673					          		forgetForm.alert.message.push("DICO_ERREUR_CUSTOMER_ERREUR_PENDANT_LENVOIE_DU_MAIL");
2674					        		deferred.resolve(false);
2675					          	}
2676				          	}
2677						} else {
2678							deferred.resolve(false);
2679						}
2680			          }
2681			          ,function(error) {
2682			          	formulaireManager.resetCaptcha(forgetForm.others.captcha);
2683			          	forgetForm.alert.message.push("DICO_ERREUR_CUSTOMER_ERREUR_INCONNU");
2684			          	deferred.resolve(false);
2685			        }
2686		        );
2687	        }
2688	        return deferred.promise;
2689		};
2690
2691
2692
2693		factory.getNewsletterForm = function getNewsletterForm(){
2694			var newsletterForm = {},ob={};
2695			newsletterForm.alert = {};
2696			newsletterForm.alert.message = [];
2697			newsletterForm.success = {};
2698			newsletterForm.success.message = [];
2699			newsletterForm.info = {};
2700			newsletterForm.info.message = [];
2701			newsletterForm.fields = [];
2702			newsletterForm.others = {};
2703
2704			ob={};
2705			formulaireManager.createEmail("email",ob,"",'DICO_CUSTOMER_VOTRE_EMAIL',true,"text" ,0 ,factory.MAX_LENGTH_EMAIL);
2706			newsletterForm.fields.push(ob);
2707
2708			return newsletterForm;
2709		};
2710
2711		factory.submitNewsletter = function submitNewsletter(newsletterForm){
2712			var deferred = $q.defer();
2713        	newsletterForm.alert.message = [];
2714        	newsletterForm.info.message = [];
2715        	newsletterForm.success.message = [];
2716
2717        	if(!formulaireManager.verifForm(newsletterForm)){
2718        		deferred.resolve(false);
2719        	} else {
2720        		var email = formulaireManager.getDefaultValue(_.findWhere(newsletterForm.fields, {name: "email"}
2720),"nomail");
2721	        	TbsWS.call('subscribenewsletter/'+$rootScope.preferredLanguage+'/'+email,'public').then(
2722	        		function(result){
2723	        			newsletterForm.alert.message = [];
2724				        if(result && result.key === "subscribenewsletter"){
2725							var status = result.value;
2726				          	if(!status || status === undefined){
2727				          		deferred.resolve("DICO_ERREUR_CUSTOMER_NEWSLETTER_MESSAGE");
2728				          	} else {
2729			          			status = status.replace(/"/g,'');
2730			          			if(status == factory.NEWSLETTER_SUBSCRIBE_CREATE){
2731			          				deferred.resolve("DICO_CUSTOMER_NEWSLETTER_AJOUT");
2732			          			} else if(status == factory.NEWSLETTER_SUBSCRIBE_EXISTS){
2733					        		deferred.resolve("DICO_CUSTOMER_NEWSLETTER_MAIL_DEJA_AJOUTE");
2734					          	} else if(status == factory.NEWSLETTER_SUBSCRIBE_EXISTS_BUT_NOT_VALID){
2735					        		deferred.resolve("DICO_CUSTOMER_NEWSLETTER_MAIL_DEJA_AJOUTE_MAIS_VALIDE");
2736					          	} else {
2737					        		deferred.resolve("DICO_ERREUR_CUSTOMER_NEWSLETTER_MESSAGE");
2738					          	}
2739				          	}
2740				        } else {
2741				        	deferred.resolve("DICO_ERREUR_CUSTOMER_NEWSLETTER_MESSAGE");
2742				        }
2743			          }
2744			          ,function(error) {
2745			          	deferred.resolve("DICO_ERREUR_CUSTOMER_NEWSLETTER_MESSAGE");
2746			        }
2747		        );
2748	        }
2749	        return deferred.promise;
2750		};
2751
2752		factory.validateNewsletter = function validateNewsletter(idValidation){
2753			var deferred = $q.defer();
2754			TbsWS.call('validatenewsletter/'+ idValidation,'public').then(
2755		          function(result){
2756		          	if(result && result.key === "validatenewsletter"){
2757		          		var status = result.value;
2758			          	if(!status || status === undefined){
2759			          		deferred.resolve("error");
2760			          	} else {
2761			          		status = status.replace(/"/g,'');
2762			          		deferred.resolve(status);
2763			          	}
2764					} else {
2765						deferred.resolve("error");
2766					}
2767		          }
2768		          ,function(error) {
2769		          	console.error(error);
2770		          	deferred.reject("error");
2771		        }
2772		    );
2773
2774			return deferred.promise;
2775		};
2776
2777		factory.getInvoices = function getInvoices(offset, maxResults){
2778			var deferred = $q.defer();
2779			TbsWS.call('getinvoices/'+$rootScope.preferredLanguage + '/offset/'+ offset + '/maxresults/' + maxResults,'private').then(
2780				function(invoices){
2781					deferred.resolve(invoices);
2782				}
2783	          	,function(error) {
2784	          		deferred.resolve([]);
2785	       		}
2786			);
2787			return deferred.promise;
2788		};
2789
2790		factory.getNbInvoices = function getNbInvoices(){
2791			var deferred = $q.defer();
2792			TbsWS.call('getnbinvoices','private').then(
2793				function(nbInvoices){
2794					deferred.resolve(nbInvoices.value);
2795				}
2796				,function(error) {
2797					deferred.resolve([]);
2798				}
2799			);
2800			return deferred.promise;
2801		};
2802
2803		factory.downloadInvoice = function downloadInvoice(noInvoice){
2804			var deferred = $q.defer();
2805			TbsWS.call('getdownloadinvoiceinfos/'+noInvoice,'private').then(
2806				function(result){
2807	        		if(result && result.key === "getdownloadinvoiceinfos"){
2808	        			var infos = result.value;
2809						window.open(commonConfig.hrefaboweb+'/DownloadServlet?'+infos);
2810						deferred.resolve(true);
2811					} else {
2812						deferred.resolve(false);
2813					}
2814				}
2815	          	,function(error) {
2816	          		deferred.resolve(false);
2817	       		}
2818			);
2819			return deferred.promise;
2820		};
2821
2822		factory.getSubscriptionsByBeneficiaries = function getSubscriptionsByBeneficiaries(){
2823			var deferred = $q.defer();
2824			TbsWS.call('getsubscriptionsbybeneficiaries/'+$rootScope.preferredLanguage,'private').then(
2825				function(subscriptions){
2826					deferred.resolve(subscriptions);
2827				}
2828	          	,function(error) {
2829	          		deferred.resolve([]);
2830	       		}
2831			);
2832			return deferred.promise;
2833		};
2834
2835		factory.getOffers = function getOffers(offset, maxResults){
2836			var deferred = $q.defer();
2837			TbsWS.call('getoffers/'+$rootScope.preferredLanguage + '/offset/'+ offset + '/maxresults/' + maxResults,'private').then(
2838				function(offers){
2839					deferred.resolve(offers);
2840				}
2841				,function(error) {
2842					deferred.resolve([]);
2843				}
2844			);
2845			return deferred.promise;
2846		};
2847
2848		factory.getNbOffers = function getNbOffers(){
2849			var deferred = $q.defer();
2850			TbsWS.call('getnboffers','private').then(
2851				function(nbOffers){
2852					deferred.resolve(nbOffers.value);
2853				}
2854				,function(error) {
2855					deferred.resolve([]);
2856				}
2857			);
2858			return deferred.promise;
2859		};
2860
2861		factory.getOffersOffered = function getOffersOffered(offset, maxResults){
2862			var deferred = $q.defer();
2863			TbsWS.call('getoffers/'+$rootScope.preferredLanguage + '/offset/'+ offset + '/maxresults/' + maxResults + '/parrain','private').then(
2864				function(offers){
2865					deferred.resolve(offers);
2866				}
2867				,function(error) {
2868					deferred.resolve([]);
2869				}
2870			);
2871			return deferred.promise;
2872		};
2873
2874		factory.getNbOffersOffered = function getNbOffersOffered(){
2875			var deferred = $q.defer();
2876			TbsWS.call('getnboffers/parrain','private').then(
2877				function(nbOffers){
2878					deferred.resolve(nbOffers.value);
2879				}
2880				,function(error) {
2881					deferred.resolve([]);
2882				}
2883			);
2884			return deferred.promise;
2885		};
2886
2887		factory.getSubscription = function getSubscription(idSubscription){
2888			var deferred = $q.defer();
2889			TbsWS.call('getsubscription/'+$rootScope.preferredLanguage+'/'+idSubscription,'private').then(
2890				function(subscription){
2891					deferred.resolve(subscription);
2892				}
2893				,function(error) {
2894					deferred.resolve([]);
2895				}
2896			);
2897			return deferred.promise;
2898		};
2899
2900		factory.getSubscriptions = function getSubscriptions(offset, maxResults, refFormule, isParrain){
2901			var deferred = $q.defer();
2902			TbsWS.call('getsubscriptions/'+$rootScope.preferredLanguage + '/offset/'+ offset + '/maxresults/' + maxResults + '/refformule/' + refFormule + (isParrain === true ? '/parrain' : ''),'private').then(
2903				function(subscriptions){
2904					deferred.resolve(subscriptions);
2905				}
2906				,function(error) {
2907					deferred.resolve([]);
2908				}
2909			);
2910			return deferred.promise;
2911		};
2912
2913		factory.getArticlesByTarifFormule = function getArticlesByTarifFormule(refTarif){
2914			var deferred = $q.defer();
2915			TbsWS.call('getarticlesbytarifformule/reftarif/' + refTarif,'private').then(
2916				function(articles){
2917					deferred.resolve(articles);
2918				}
2919				,function(error) {
2920					deferred.resolve([]);
2921				}
2922			);
2923			return deferred.promise;
2924		};
2925
2926		factory.getNbSubscriptions = function getNbSubscriptions(){
2927			var deferred = $q.defer();
2928			TbsWS.call('getnbsubscriptions','private').then(
2929				function(nbSubscriptions){
2930					deferred.resolve(nbSubscriptions.value);
2931				}
2932				,function(error) {
2933					deferred.resolve([]);
2934				}
2935			);
2936			return deferred.promise;
2937		};
2938
2939		factory.getArticles = function getArticles(offset, maxResults){
2940			var deferred = $q.defer();
2941			TbsWS.call('getarticles/' + $rootScope.preferredLanguage + '/offset/'+ offset + '/maxresults/' + maxResults,'private').then(
2942				function(articles){
2943					deferred.resolve(articles);
2944				}
2945				,function(error) {
2946					deferred.resolve([]);
2947				}
2948			);
2949			return deferred.promise;
2950		};
2951
2952		factory.getNbArticles = function getNbArticles(){
2953			var deferred = $q.defer();
2954			TbsWS.call('getnbarticles','private').then(
2955				function(nbArticles){
2956					deferred.resolve(nbArticles.value);
2957				}
2958				,function(error) {
2959					deferred.resolve([]);
2960				}
2961			);
2962			return deferred.promise;
2963		};
2964
2965		factory.getBankDetails = function getBankDetails(){
2966			var deferred = $q.defer();
2967			TbsWS.call('getbankdetails/'+$rootScope.preferredLanguage,'private').then(
2968				function(bankdetails){
2969					deferred.resolve(bankdetails);
2970				}
2971				,function(error) {
2972					deferred.resolve([]);
2973				}
2974			);
2975			return deferred.promise;
2976		};
2977
2978		factory.getDisplayName = function getDisplayName(customer, withCivilite){
2979			if(customer){
2980				if(customer.adressePrincipale.societe !== ''){
2981					return customer.adressePrincipale.societe;
2982				} else {
2983					if(withCivilite){
2984						return customer.adressePrincipale.civilite + " " + customer.adressePrincipale.prenom + " " + customer.adressePrincipale.nom;
2985					} else {
2986						return customer.adressePrincipale.prenom + " " + customer.adressePrincipale.nom;
2987					}
2988				}
2989			}
2990		};
2991
2992		factory.getSuspensionReasonsByReasonType = function getSuspensionReasonsByReasonType(refTypeMotif) {
2993			var deferred = $q.defer();
2994			TbsWS.call('getsuspensionreasons?reasonType='+refTypeMotif,'private').then(
2995				function(motifs){
2996					deferred.resolve(motifs);
2997				}
2998				,function(error) {
2999					deferred.resolve([]);
3000				}
3001			);
3002			return deferred.promise;
3003		}
3004
3005		factory.getSuspensions = function getSuspensions() {
3006			var deferred = $q.defer();
3007			TbsWS.call('getsuspensions','private').then(
3008				function(suspensions){
3009					deferred.resolve(suspensions);
3010				}
3011				,function(error) {
3012					deferred.resolve([]);
3013				}
3014			);
3015			return deferred.promise;
3016		}
3017
3018		factory.getSuspensionsBySubscriptionRef = function getSuspensionsBySubscriptionRef(refAbo) {
3019			var deferred = $q.defer();
3020			TbsWS.call('getsuspensions?subscriptionRef='+refAbo,'private').then(
3021				function(suspensions){
3022					deferred.resolve(suspensions);
3023				}
3024				,function(error) {
3025					deferred.resolve([]);
3026				}
3027			);
3028			return deferred.promise;
3029		}
3030
3031		factory.addSuspension = function addSuspension(suspensionForm) {
3032			var suspension = {};
3033			suspension.dateDebut = suspensionForm.dateDebut;
3034			suspension.dateFin = suspensionForm.dateFin;
3035			suspension.motif = {};
3036			suspension.motif.refMotifSuspension = suspensionForm.refMotif;
3037			suspension.refAbonnements = suspensionForm.refAbonnements;
3038
3039			var deferred = $q.defer();
3040			TbsWS.call('addsuspension','private',suspension).then(
3041				function(result){
3042					if(result && result.key === "addsuspension"){
3043						var status = result.value;
3044						if(!status || status === undefined){
3045							deferred.resolve(false);
3046						} else {
3047							status = status.replace(/"/g,'');
3048							if(status == factory.SUSPENSION_STATUS_CREATE){
3049								deferred.resolve(true);
3050							} else if(status == factory.SUSPENSION_STATUS_ERROR_NOT_SUSPENDED
3051									|| status.split(':')[0] == factory.SUSPENSION_STATUS_ERROR_DURATION) {
3052								status = status.split(':');
3053								deferred.resolve({error: status[0], params: [status[1]]});
3054							} else {
3055								deferred.resolve(false);
3056							}
3057						}
3058					} else {
3059						deferred.resolve(false);
3060					}
3061				}
3062				,function(error) {
3063					console.error(error);
3064					deferred.resolve(false);
3065				}
3066			);
3067			return deferred.promise;
3068		}
3069
3070		factory.deleteSuspension = function deleteSuspension(refSuspension) {
3071			var deferred = $q.defer();
3072			TbsWS.call('deletesuspension/'+refSuspension,'private').then(
3073				function(result){
3074					if(result && result.key === "deletesuspension"){
3075						var status = result.value;
3076						if(!status || status === undefined){
3077							deferred.resolve(false);
3078						} else {
3079							status = status.replace(/"/g,'');
3080							if(status == factory.SUSPENSION_STATUS_DELETE){
3081								deferred.resolve(true);
3082							} else {
3083								deferred.resolve(false);
3084							}
3085						}
3086					} else {
3087						deferred.resolve(false);
3088					}
3089				}
3090				,function(error) {
3091					console.error(error);
3092					deferred.resolve(false);
3093				}
3094			);
3095			return deferred.promise;
3096		}
3097
3098		factory.checkComplementInfo = function checkComplementInfo(customer, adresse, isGift, origin) {
3099			var deferred = $q.defer();
3100			if(commonConfig.forceAskInfoCustomerInfoOnDelivery){
3101        		let addressFormInit = {};
3102        		addressFormInit.alert = [];
3103        		factory.getAddressForm(addressFormInit, adresse, false, isGift, false, true, customer, false, origin).then(
3104	            	function(addressForm){
3105            			deferred.resolve(!formulaireManager.verifForm(addressForm));
3106	            	}
3107	            );
3108    		} else {
3109    			deferred.resolve(false);
3110    		}
3111			return deferred.promise;
3112		}
3113
3114
3115		function _getModeConnexion(fields){
3116			if(fields && fields !== undefined){
3117				var field = {},defaultLogin,defaultPassword="",externallogin = (commonConfig.idpurl===undefined?fal
3117se:true);
3118				if($rootScope.signin.inProgress){
3119					defaultLogin = $rootScope.signin.login;
3120					defaultPassword = $rootScope.signin.password;
3121					$rootScope.signin.login="";
3122		        	$rootScope.signin.password="";
3123				} else if(commonConfig.enTest) {
3124					let customer = dataManager.getCustomerData();
3125					defaultLogin = (customer.email!==undefined?customer.email:"");
3126					defaultPassword = (customer.testpassword!==undefined?customer.testpassword:"");
3127				}
3128
3129				if(!externallogin){
3130					if(commonConfig.connexionmode == "EMAIL"){
3131						field = {};
3132			        	formulaireManager.createEmailCode("email",field,defaultLogin,'DICO_CUSTOMER_EMAIL_CONNEXION',true,"text",0 ,factory.MAX_LENGTH_EMAIL);
3133			        	fields.push(field);
3134					} else {
3135						field = {};
3136			        	formulaireManager.createTextField("email",field,defaultLogin,'DICO_CUSTOMER_LOGIN_CONNEXION',true,"text",0 ,factory.MAX_LENGTH_EMAIL);
3137			        	fields.push(field);
3138					}
3139
3140		        	field = {};
3141		        	formulaireManager.createPassword("password",field,defaultPassword,'DICO_CUSTOMER_MOTDEPASSE_CONNEXION',true,"text",0 ,factory.MAX_LENGTH_PASSWORD);
3142		        	fields.push(field);
3143
3144		        	field = {};
3145		        	formulaireManager.createLink("forgot",field,'DICO_CUSTOMER_MOT_DE_PASSE_OUBLIE',function(headersignin){$("#"+headersignin).removeClass('open');$rootScope.openModalForget();});
3146		        	fields.push(field);
3147		       	} else if(externallogin && commonConfig.urlforgotpassword !== undefined){
3148		       		field = {};
3149		        	formulaireManager.createLink("forgot",field,'DICO_CUSTOMER_MOT_DE_PASSE_OUBLIE',function(){var win = window.open(commonConfig.urlforgotpassword, '_blank');win.focus();});
3150		        	fields.push(field);
3151		       	}
3152	        }
3153		};
3154
3155		function _getOptins(offset, maxresults) {
3156			var deferred = $q.defer();
3157			if (commonConfig.displayOptinsMyAccount) {
3158				TbsWS.call('myaccount/getoptins/offset/'+offset+'/maxresults/'+maxresults,'private').then(
3159					function (optins) {
3160						deferred.resolve(optins);
3161					}
3162					,function(error) {
3163						console.error(error);
3164						deferred.resolve(false);
3165					}
3166				);
3167			} else {
3168				deferred.resolve(false);
3169			}
3170			return deferred.promise;
3171		}
3172
3173		function _setOptins(optins) {
3174			var deferred = $q.defer();
3175			if (commonConfig.displayOptinsMyAccount) {
3176				TbsWS.call('myaccount/setoptins','private', {array: optins}).then(
3177					function () {
3178						deferred.resolve(true);
3179					}
3180					,function(error) {
3181						console.error(error);
3182						deferred.resolve(false);
3183					}
3184				);
3185			} else {
3186				deferred.resolve(false);
3187			}
3188			return deferred.promise;
3189		}
3190
3191        return factory;
3192    }]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.