- {this.state.articles[0][0] &&
- this.state.articles.map((divided) =>
-
+ {this.props.articles[0][0] &&
+ this.props.articles.map((divided) =>
+
{divided[0].category.name}
{divided.map((article) =>
-
+
)}
diff --git a/src/js/Components/Money.js b/src/js/Components/Money.js
index a0fa8cd..fd2d8cb 100644
--- a/src/js/Components/Money.js
+++ b/src/js/Components/Money.js
@@ -1,5 +1,4 @@
import React, { Component } from 'react';
-import { Link } from 'react-router-dom';
import '../../css/Components/money.css'
class Money extends Component {
diff --git a/src/js/Components/Selected.js b/src/js/Components/Selected.js
index 8d220c5..262fbab 100644
--- a/src/js/Components/Selected.js
+++ b/src/js/Components/Selected.js
@@ -4,7 +4,6 @@ import { Icon} from '@iconify/react';
import minusIcon from '@iconify/icons-fa-solid/minus';
import plusIcon from '@iconify/icons-fa-solid/plus';
import { Tooltip, Zoom } from '@material-ui/core';
-import axios from 'axios';
class Selected extends Component {
@@ -16,52 +15,11 @@ class Selected extends Component {
}
minusQuantitySelected = () => {
- this.updateArticle(-1)
+ this.props.updateArticles(-1)
}
plusQuantitySelected = () => {
- this.updateArticle(1)
- }
-
- updateArticle = (value) => {
-
- for (let i = 0 ; i < this.props.selectedArticles.length ; i++) {
-
- axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.props.selectedArticles[i].id}`,
- {
- 'name':this.props.selectedArticles[i].name,
- 'description':this.props.selectedArticles[i].description,
- 'quantity':this.props.selectedArticles[i].quantity+value,
- 'price':this.props.selectedArticles[i].price,
- 'code':this.props.selectedArticles[i].code,
- 'category_id':this.props.selectedArticles[i].category.id
- }
- )
- .then(res => {
- console.log(res.data)
- })
- .catch(error => {
- console.log(error.response)
- })
-
- }
-
-
- }
-
- deleteSelectedArticles = () => {
-
- for (let i = 0 ; i < this.props.selectedArticles.length ; i++) {
-
- axios.delete(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.props.selectedArticles[i].id}`)
- .then(res => {
- console.log(res.data)
- })
- .catch(error => {
- console.log(error.response)
- })
-
- }
+ this.props.updateArticles(1)
}
@@ -84,7 +42,7 @@ class Selected extends Component {
-
+
diff --git a/src/js/Components/Sort.js b/src/js/Components/Sort.js
index 3f7d025..4d548a8 100644
--- a/src/js/Components/Sort.js
+++ b/src/js/Components/Sort.js
@@ -88,7 +88,7 @@ class Sort extends Component {
-
{this.state.orderText.split("").map((l) =>
-
{l}
+
{l}
)}
diff --git a/src/js/Views/Stock.js b/src/js/Views/Stock.js
index 4e11024..401d43c 100644
--- a/src/js/Views/Stock.js
+++ b/src/js/Views/Stock.js
@@ -38,7 +38,8 @@ export default class Stock extends React.Component {
lowToHigh: true,
selectedArticles:[],
counter:0,
- code:''
+ code:'',
+ dividedArticles:[]
}
}
@@ -47,11 +48,212 @@ export default class Stock extends React.Component {
}
+
+
+ deleteSelectedArticles = () => {
+ for (let i = 0 ; i < this.state.selectedArticles.length ; i++) {
+
+ axios.delete(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.state.selectedArticles[i].id}`)
+ .then(res => {
+ console.log(res.data)
+ if (i === this.state.selectedArticles.length-1){
+ this.setState({counter:0,selectedArticles:[]},()=>{
+ this.getArticles()
+ })
+ }
+ })
+ .catch(error => {
+ console.log(error.response)
+ })
+ }
+}
+
+ // OnClick : selon si on clique sur tel ou tel element : on va colorer en blanc et selectionner
+ // on va minus ou plus quantity et colorer en rouge
+
+ selectArticles = (e,id) => {
+ let currentElement = e.target;
+ let iconElement;
+ if (e.target.tagName === "path"){
+ currentElement = e.target.parentElement
+ iconElement = currentElement
+ }
+ if ((e.target.id === "minusIcon") || (e.target.id === "plusIcon")){
+ iconElement = currentElement
+ }
+ while (currentElement.id !== "bulle"){
+ currentElement = currentElement.parentElement
+ }
+
+ if ((e.target.id !== "categoryIcon") && (e.target.id !== "penblue") && (e.target.id !== "crossred") && (e.target.id !== "") && (e.target.id !== "bluepen") && (e.target.id !== "redcross") && (e.target.id !== "no") && (e.target.id !== "minusIcon") && (e.target.id !== "plusIcon")){
+ let index = this.getArticleById(id).i;
+ let articles = this.state.articles;
+ articles[index].selected = !this.state.articles[index].selected;
+ console.log(articles[index].selected);
+ this.setState({articles:articles},()=>{
+ if (this.state.articles[index].selected){
+ this.select(id)
+ if (this.state.articles[index].quantity === 0){
+ this.colorArticle("red&white",currentElement)
+ } else {
+ this.colorArticle("white",currentElement)
+ }
+ } else {
+ this.deselect(id)
+ if (this.state.articles[index].quantity === 0){
+ this.colorArticle("red",currentElement)
+ } else {
+ this.colorArticle("grey",currentElement)
+ }
+ }
+ })
+ } else if (iconElement.id === "minusIcon"){
+ this.minusQuantity(currentElement,id)
+ } else if (iconElement.id === "plusIcon"){
+ this.plusQuantity(currentElement,id)
+ }
+ }
+
+ colorArticle = (color,element) => {
+
+ switch (color) {
+ case "white":
+ element.style.cssText = "background-color:rgba(255, 255, 255, 0.75);"
+ break;
+ case "grey" :
+ element.style.cssText = "background-color:rgba(105, 105, 105, 0.28);"
+ break;
+ case "red" :
+ element.style.cssText = "background-color:rgba(255, 21, 21, 0.28);"
+ break;
+ case "red&white" :
+ element.style.cssText = "background-color:rgba(255, 107, 107, 0.28);"
+ break;
+ default :
+ break;
+ }
+}
+
+ plusQuantity = (element,id) => {
+ let index = this.getArticleById(id).i;
+ let articles = this.state.articles;
+ articles[index].quantity++;
+ console.log(articles[index]);
+ this.setState({articles:articles},()=>{
+ this.updateArticle(index,id);
+ if (this.state.articles[index].quantity > 0 ){
+ if (this.state.articles[index].selected){
+ this.colorArticle("white",element)
+ } else {
+ this.colorArticle("grey",element)
+ }
+ }
+ })
+}
+
+minusQuantity = (element,id) => {
+ let index = this.getArticleById(id).i;
+
+ if (this.state.articles[index].quantity > 0){
+ let articles = this.state.articles;
+ articles[index].quantity--;
+ console.log(articles[index]);
+ this.setState({articles:articles},()=>{
+ this.updateArticle(index,id);
+ if (this.state.articles[index].quantity === 0 ){
+ if (this.state.articles[index].selected){
+ this.colorArticle("red&white",element)
+ } else {
+ this.colorArticle("red",element)
+ }
+ }
+ })
+ }
+}
+
+getBulleById = (id) => {
+ let element;
+ let articles = document.getElementById("articles")
+ for (let i = 0; i < articles.childElementCount ; i++){
+ if (id == articles.children[i].title){
+ element = articles.children[i]
+ }
+ }
+
+ return element
+}
+
+
+updateSelectedArticles = (value) => {
+
+
+ let articles = this.state.selectedArticles;
+
+ for (let i = 0 ; i < this.state.selectedArticles.length ; i++) {
+
+
+ if ((value !== -1) || articles[i].quantity !== 0){
+ articles[i].quantity+=value;
+
+
+ this.setState({selectedArticles:articles},() => {
+ axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${this.state.selectedArticles[i].id}`,
+ {
+ 'name':this.state.selectedArticles[i].name,
+ 'description':this.state.selectedArticles[i].description,
+ 'quantity':this.state.selectedArticles[i].quantity,
+ 'price':this.state.selectedArticles[i].price,
+ 'code':this.state.selectedArticles[i].code,
+ 'category_id':this.state.selectedArticles[i].category.id
+ }
+ )
+
+ .then(res => {
+ let element = this.getBulleById(this.state.selectedArticles[i].id)
+ if (this.state.selectedArticles[i].quantity > 0){
+ this.colorArticle("white",element)
+ } else {
+ this.colorArticle("red&white",element)
+ }
+
+ })
+ .catch(error => {
+ console.log(error.response)
+ })
+
+
+ })
+ }
+
+ }
+
+
+}
+
+updateArticle = (index,id) => {
+ axios.put(`https://etud.insa-toulouse.fr/~proximo/v2/api/articles/${id}`,
+ {
+ 'name':this.state.articles[index].name,
+ 'description':this.state.articles[index].description,
+ 'quantity':this.state.articles[index].quantity,
+ 'price':this.state.articles[index].price,
+ 'code':this.state.articles[index].code,
+ 'category_id':this.state.articles[index].category.id
+ }
+ )
+ .then(res => {
+ console.log(res.data)
+ })
+ .catch(error => {
+ console.log(error.response)
+ })
+}
+
select = (id) => {
console.log(id)
this.setState({counter:this.state.counter+1},()=>{
console.log(this.state.counter)
- this.state.selectedArticles.push(this.getArticleById(id))
+ this.state.selectedArticles.push(this.getArticleById(id).current)
console.log(this.state.selectedArticles)
})
}
@@ -68,14 +270,14 @@ export default class Stock extends React.Component {
trouve = !trouve;
}
}
- return(current);
+ return({current,i});
}
deselect = (id) => {
this.setState({counter:this.state.counter-1},()=>{
console.log(this.state.counter)
- this.setState({selectedArticles: this.state.selectedArticles.filter((item) => item !== this.getArticleById(id))},()=>{
+ this.setState({selectedArticles: this.state.selectedArticles.filter((item) => item !== this.getArticleById(id).current)},()=>{
console.log(this.state.selectedArticles)
})
@@ -117,6 +319,7 @@ export default class Stock extends React.Component {
//TRI PAR CATEGORIE
if (sortType === 'category_id'){
this.setState({articles:sorted},() => {
+ this.splitArticlesCategories()
this.setState({onSortedCategories:true})
})
}else{
@@ -131,6 +334,9 @@ export default class Stock extends React.Component {
getArticles = () => {
axios.get('https://etud.insa-toulouse.fr/~proximo/v2/api/articles')
.then(res => {
+ for (let i = 0; i
{
console.log(this.state.articles)
this.setState({sortType: "name"})
@@ -187,21 +393,7 @@ export default class Stock extends React.Component {
this.setState({onEditCategory:false})
}
- // handleChangeSortType = (e) => {
- // console.log(e.target.value)
- // this.setState({sortType:e.target.value},()=>{
- // if (this.state.sortType === "Ordre Alphabétique"){
- // this.sortArticles("name")
- // } else if(this.state.sortType === "Catégorie"){
- // this.sortArticles("category_id")
- // } else if(this.state.sortType === "Quantité"){
- // this.sortArticles("quantity")
- // } else if(this.state.sortType === "Prix"){
- // this.sortArticles("price");
- // }
- // })
- // }
//ATTENTION ça a changé, on passe directement le string en argument (j'avais besoin d'utiliser cette fonction autrement, voir dans Sort.js)
handleChangeSortType = (type) => {
@@ -224,7 +416,9 @@ export default class Stock extends React.Component {
axios.post('https://etud.insa-toulouse.fr/~proximo/v2/api/articles',bodyFormData)
.then(res => {
this.setState({articles : res.data}, () => {
- console.log(this.state.articles)
+ if (this.state.sortType === "category_id"){
+ this.splitArticlesCategories()
+ }
})
})
.catch(error => {
@@ -232,6 +426,35 @@ export default class Stock extends React.Component {
})
}
+ splitArticlesCategories = () => {
+ let counterTab = 0;
+ let divided = [];
+ divided.push([this.state.articles[0]])
+ for (let i = 1; i{
+ this.getElementandColorSplit()
+ })
+
+ }
+
+ getElementandColorSplit = () => {
+ let articles = document.getElementById("articles")
+ for (let i = 0; i {
this.setState({search : event.target.value},()=>
{
@@ -277,13 +500,13 @@ export default class Stock extends React.Component {
-
+
{this.state.articles && this.state.articles[0] ?
this.state.onSortedCategories ?
-
- :
+
+ :
:
}
diff --git a/src/js/Views/Ticket.js b/src/js/Views/Ticket.js
index 51b6ee3..bc7f8e5 100644
--- a/src/js/Views/Ticket.js
+++ b/src/js/Views/Ticket.js
@@ -83,7 +83,9 @@ export default class Stock extends React.Component {
}
if (already){
- this.state.articlesJamalette[j].quantity++;
+ let articles = this.state.articlesJamalette;
+ articles[j].quantity++;
+ this.setState({articlesJamalette:articles})
} else {
current.realQuantity = current.quantity;
current.quantity = 1;
@@ -138,6 +140,8 @@ export default class Stock extends React.Component {
case "red&white" :
element.style.cssText = "background-color:rgba(255, 107, 107, 0.28);"
break;
+ default :
+ break;
}
}