-
Notifications
You must be signed in to change notification settings - Fork 0
/
panierLocalStorage.js
236 lines (224 loc) · 9.95 KB
/
panierLocalStorage.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
// VARIABLE QUI VONT SERVIR A LA MANIPULATION DU PANIER
let affichageMagasin = "";
let boutonAjoutPanier = "";
let boutonPlus = "";
let produitSelectionne = "";
let tabPanier = [];
const percent = 5;
//------------------------------------------------------//
// AFFFICHAGE DE LA BASE DE DONNEES //
//------------------------------------------------------//
//AFFICHAGE DE LA BASE DE DONNEES
//UTILISATION D'AJAX POUR RECUPERER LES INFOS DU JSON
function affichageProduitsDispo() {
let xhr = new XMLHttpRequest();
let method = "GET";
let url = "./dbPanier.json";
xhr.open(method, url);
xhr.onreadystatechange = function (event) {
if (this.readyState === XMLHttpRequest.DONE) {
if (this.status === 200) {
//J'AFFICHE LES ELEMENTS DU MAGASIN CAR SI JE LE MET A PART IL SE CHARGERA AVANT AJAX
affichageMagasin = JSON.parse(this.responseText);
affichageMagasin.forEach(element => {
document.getElementById("produitDispo").innerHTML += `<div class="prod">
<div class="nomProd">${element.nomProduit}</div>
<div class="infoProd">
<img src="${element.imageProduit}" alt="produitZePhoneStore">
Prix : ${element.prixProduit}€
<button class="boutonAchat" value="${element.idProduit}">Ajouter au panier</button></div>
</div>`
});
// JE DONNE UN EVENEMENT A CHAQUE BOUTON CREE
boutonAjoutPanier = document.querySelectorAll(".boutonAchat");
boutonAjoutPanier.forEach(element => {
element.addEventListener("click", qtePlusPanier);
});
} else {
console.log(this.status);
alert(`Erreur`)
}
}
}
xhr.send();
}
affichageProduitsDispo()
//------------------------------------------------------//
// RECUPERATION DU LOCAL STORAGE //
//------------------------------------------------------//
//RECUPERATION DU LOCAL STORAGE SI NON VIDE ET AFFICHAGE DANS LE HTML
function recupStorage() {
let recupStoragepanier = localStorage.getItem(`storagePanier`);
if (recupStoragepanier != null || recupStoragepanier != undefined) {
tabPanier = JSON.parse(recupStoragepanier);
tabPanier.forEach(element => {
document.getElementById("listeProduitsPanier").innerHTML += `<div class="articlePanier">
<div class="prodPanier">
<img src="${element.imgProduitPanier}" alt="${element.nomProduitPanier}">
<div>${element.nomProduitPanier}</div>
</div>
<p><button class="btnMoins" value="${element.idProduitPanier}">-</button> ${element.quantiteProduitPanier} <button class="btnPlus" value="${element.idProduitPanier}">+</button></p>
<p>${element.prixProduitPanier}€</p>
<p>${element.sousTotalProduitPanier}€ <button class="btnSup" value="${element.idProduitPanier}">X</button></p>
</div>`
})
//AJOUT D'ACTION SUR LE BOUTON MOINS
boutonPlus = document.querySelectorAll(".btnMoins");
boutonPlus.forEach(element => {
element.addEventListener("click", qteMoinsPanier);
});
//AJOUT D'ACTION SUR LE BOUTON PLUS
boutonPlus = document.querySelectorAll(".btnPlus");
boutonPlus.forEach(element => {
element.addEventListener("click", qtePlusPanier);
});
//AJOUT D'ACTION SUR LE BOUTON SUP
boutonPlus = document.querySelectorAll(".btnSup");
boutonPlus.forEach(element => {
element.addEventListener("click", suppressionLignePanier);
});
// CALCUL DES SOMMES DE PRODUITS ET DES SOUS-TOTAUX
let sommeQteProduit = 0;
let sommeSousTotalProduit = 0
let discount = 0;
let totalAPayer = 0
tabPanier.forEach(element => {
sommeQteProduit = sommeQteProduit + element.quantiteProduitPanier
sommeSousTotalProduit = sommeSousTotalProduit + element.sousTotalProduitPanier
})
// APPLICATION OU NON DE LA PROMO DE 5%
if (sommeSousTotalProduit >= 1000) {
discount = (sommeSousTotalProduit / 100) * percent;
discount = `${Number(discount).toFixed(2)}€`;
totalAPayer = sommeSousTotalProduit - Number(discount.slice(0, -1));
} else {
discount = `Encore ${1000-sommeSousTotalProduit}€ pour bénéficier des ${percent}%`;
totalAPayer = sommeSousTotalProduit
}
document.getElementById("divDroiteRecapCommande").innerHTML += `<div>
<p>${sommeQteProduit}</p>
<p>${sommeSousTotalProduit}€</p>
<p>${discount}</p>
<p>${totalAPayer}€</p>
</div>`
}
}
recupStorage()
//------------------------------------------------------//
// AJOUT DE PRODUIT //
//------------------------------------------------------//
//FONCTION D'AJOUT AU PANIER
function qtePlusPanier(clickBoutonAjoutPanier) {
//VIDAGE DU LOCALSTORAGE
localStorage.clear();
// VIDAGE DE L'AFFICHAGE HTML
document.getElementById("listeProduitsPanier").innerHTML = "";
document.getElementById("divDroiteRecapCommande").innerHTML = "";
//RECUPERATION DE L'ID DU BOUTON CLIQUE QUI CORRESPOND A L'ID DU PRODUIT DANS LE FICHIER JSON
produitSelectionne = (clickBoutonAjoutPanier.target.value);
//SI LE PANIER EST VIDE
if (tabPanier.length == 0) {
ajout(produitSelectionne)
}
//SINON SI LE PANIER N'EST PAS VIDE
else {
let presentPanier = false
//VERIFICATION DE LA PRESENCE DE L'ARTICLE DANS LE PANIER POUR EVITER DE DOUBLER LES LIGNES
//ON INCREMENTE LA QUANTITE ET LE SOUS-TOTAL
tabPanier.forEach(element => {
if (element.idProduitPanier == produitSelectionne) {
element.quantiteProduitPanier++
element.sousTotalProduitPanier = element.quantiteProduitPanier * element.prixProduitPanier
presentPanier = true;
}
})
//SI PRODUIT ABSENT DU PANIER LA VARIABLE presentPanier RESTE A FALSE ET ON AJOUTE LE PRODUIT NORMAL
if (presentPanier == false) {
ajout(produitSelectionne)
}
}
//ENVOI DU PANIER VERS LE LOCAL STORAGE
localStorage.setItem(`storagePanier`, JSON.stringify(tabPanier));
let recupStoragePanier = localStorage.getItem(`storagePanier`);
tabPanier = JSON.parse(recupStoragePanier);
recupStorage();
}
//FONCTION QUI SERA APPELER DEPUIS LA FONCTION "qtePlusPanier" SI LE PANIER EST VIDE
function ajout(valueBouton) {
affichageMagasin.forEach(element => {
if (element.idProduit == valueBouton) {
tabPanier.push({
idProduitPanier: element.idProduit,
imgProduitPanier: element.imageProduit,
nomProduitPanier: element.nomProduit,
prixProduitPanier: element.prixProduit,
quantiteProduitPanier: 1,
sousTotalProduitPanier: element.prixProduit
});
}
})
}
//------------------------------------------------------//
// SUPPRESSION DE PRODUIT //
//------------------------------------------------------//
//FONCTION DE RETRAIT D'UNE QUANTITE D'UN PRODUIT DU PANIER
function qteMoinsPanier(clickBoutonAjoutPanier) {
//VIDAGE DU LOCALSTORAGE
localStorage.clear();
// VIDAGE DE L'AFFICHAGE HTML
document.getElementById("listeProduitsPanier").innerHTML = "";
document.getElementById("divDroiteRecapCommande").innerHTML = "";
//RECUPERATION DE L'ID DU BOUTON CLIQUE QUI CORRESPOND A L'ID DU PRODUIT DANS LE FICHIER JSON
produitSelectionne = (clickBoutonAjoutPanier.target.value);
tabPanier.forEach(element => {
if (element.idProduitPanier == produitSelectionne) {
if (element.quantiteProduitPanier == 1) {
suppresion(produitSelectionne)
} else {
element.quantiteProduitPanier--
element.sousTotalProduitPanier = element.quantiteProduitPanier * element.prixProduitPanier
}
}
})
//ENVOI DU PANIER VERS LE LOCAL STORAGE
localStorage.setItem(`storagePanier`, JSON.stringify(tabPanier));
let recupStoragePanier = localStorage.getItem(`storagePanier`);
tabPanier = JSON.parse(recupStoragePanier);
recupStorage();
}
// FONCTION DE SUPPRESSION DE LIGNE DU PANIER
function suppressionLignePanier(clickBoutonAjoutPanier) {
//VIDAGE DU LOCALSTORAGE
localStorage.clear();
// VIDAGE DE L'AFFICHAGE HTML
document.getElementById("listeProduitsPanier").innerHTML = "";
document.getElementById("divDroiteRecapCommande").innerHTML = "";
//RECUPERATION DE L'ID DU BOUTON CLIQUE QUI CORRESPOND A L'ID DU PRODUIT DANS LE FICHIER JSON
produitSelectionne = (clickBoutonAjoutPanier.target.value);
tabPanier.forEach(element => {
if (element.idProduitPanier == produitSelectionne) {
suppresion(produitSelectionne)
}
})
//ENVOI DU PANIER VERS LE LOCAL STORAGE
localStorage.setItem(`storagePanier`, JSON.stringify(tabPanier));
let recupStoragePanier = localStorage.getItem(`storagePanier`);
tabPanier = JSON.parse(recupStoragePanier);
recupStorage();
}
// FONCTION QUI SERA APPELER PAR LES FONCTIONS "qteMoinsPanier" ET "suppressionLignePanier"
// POUR SUPPRIMER UN PRODUIT ET SA QUANTITE TOTALE DU PANIER
function suppresion(valueBouton) {
//JE LANCE UNE ALERTE POUR SAVOIR SI L'UTILISATEUR VEUT SUPPRIMER L'ARTICLE DU PANIER
let reponse = window.confirm("Supprimer l'article du panier?")
if (reponse) {
console.log(valueBouton);
tabPanier.forEach(element => {
if (element.idProduitPanier == valueBouton) {
console.log(tabPanier.indexOf(element));
tabPanier.splice(tabPanier.indexOf(element), 1);
console.log(tabPanier);
}
})
}
}