diff --git a/admin/articles.php b/admin/articles.php
new file mode 100644
index 0000000..fe96e72
--- /dev/null
+++ b/admin/articles.php
@@ -0,0 +1,6 @@
+";
+include("template.php");
diff --git a/admin/index.php b/admin/index.php
index 58ec880..87bda95 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -2,13 +2,23 @@
$relativePath = "../";
ob_start();
?>
-
-
-
-
-
-
-
+
diff --git a/admin/stock.php b/admin/stock.php
index fe96e72..dfbd2b3 100644
--- a/admin/stock.php
+++ b/admin/stock.php
@@ -1,6 +1,7 @@
";
+$isStock = true;
+$pageTitle = "Gestion des stocks";
+$script = "";
include("template.php");
diff --git a/admin/template.php b/admin/template.php
index fa1b14f..168d0c5 100644
--- a/admin/template.php
+++ b/admin/template.php
@@ -1,35 +1,61 @@
-
+
= $pageTitle ?>
-
-
-
+
+
+
+
+
+
-
+
+
+
Mode
+
+
+
+
+
+
-
-
+
+
+
+
+
-
+
-
+
+
+
+
+
' +
'
\n' +
diff --git a/assets/js/stock.js b/assets/js/stock.js
new file mode 100644
index 0000000..720ae3e
--- /dev/null
+++ b/assets/js/stock.js
@@ -0,0 +1,106 @@
+let listContainer = $("#dataList");
+let displayedItems = [];
+let fetchedData = {};
+
+let currentMode = "sell";
+
+let sellCLass = 'btn-danger';
+let buyClass = 'btn-success';
+
+$(document).ready(async function () {
+ fetchedData = await AjaxManager.getAll();
+
+ $('#sellButton').addClass(sellCLass);
+ $('#saveButton').addClass(sellCLass);
+
+ generateList();
+ $('#buyButton').on('click', function () {
+ if (!$(this).hasClass(buyClass)) {
+ $(this).addClass(buyClass);
+ $('#sellButton').removeClass(sellCLass);
+ $('#saveButton').removeClass(sellCLass).addClass(buyClass);
+ currentMode = "buy";
+ }
+ });
+ $('#sellButton').on('click', function () {
+ if (!$(this).hasClass(sellCLass)) {
+ $(this).addClass(sellCLass);
+ $('#buyButton').removeClass(buyClass);
+ $('#saveButton').removeClass(buyClass).addClass(sellCLass);
+ currentMode = "sell";
+ }
+ });
+ $('#saveButton').on('click', function () {
+ let values = getValues();
+ let message = 'Voulez vous vraimer ajouter ces articles au stock ?
';
+ let color = 'green';
+ if (currentMode === "sell"){
+ message = 'Voulez vous vraiment supprimer ces articles du stock ?
';
+ color = 'red';
+ }
+ for (let i = 0; i < values.length; i++) {
+ if (values[i]['value'] > 0){
+ message += '- ' + fetchedData['articles'][i]['name'] + ' : ' + values[i]['value'] + '
'
+ }
+ }
+ message += '
';
+ $.confirm({
+ title: 'Confirmer',
+ content: message,
+ type: color,
+ buttons: {
+ formSubmit: {
+ text: 'Confirmer',
+ action: function () {
+ window.location.reload();
+ }
+ },
+ cancel: {
+ text: 'Annuler',
+ }
+ }
+ });
+ AjaxManager.saveStockChange(getFormattedValues(values), currentMode === "sell");
+ });
+});
+
+function getListItem(item) {
+ return (
+ '' +
+ '
' +
+ '

' +
+ '
' + item['name'] + '
' +
+ '
Quantité : ' + item['quantity'] + '
' +
+ '
' +
+ '
' +
+ '
');
+}
+
+
+function generateList() {
+ for (let i = 0; i < fetchedData['articles'].length; i++) {
+ let listItem = getListItem(fetchedData['articles'][i]);
+ displayedItems.push($(listItem));
+ listContainer.append(displayedItems[i]);
+ }
+}
+
+
+function getValues() {
+ let values = [];
+ for (let i = 0; i < displayedItems.length; i++) {
+ let value = displayedItems[i].find('input').val();
+ let id = fetchedData['articles'][i]['id'];
+ values.push({id: id, value: value});
+ }
+ return values;
+}
+
+function getFormattedValues(values) {
+ let newValues = [];
+ for (let i = 0; i < values.length; i++) {
+ if (values[i]['value'] > 0)
+ newValues.push(values[i]);
+ }
+ return newValues;
+}
diff --git a/classes/dao.php b/classes/dao.php
index 9a70b92..37bd76d 100644
--- a/classes/dao.php
+++ b/classes/dao.php
@@ -137,4 +137,12 @@ class Dao
} else
return 0;
}
+
+ public function update_article_stock($articleid, $diff)
+ {
+ $sql = 'UPDATE articles SET quantity=quantity+? WHERE id=?';
+ $cursor = $this->conn->prepare($sql);
+ $data = [$diff, $articleid];
+ return $cursor->execute($data);
+ }
}
diff --git a/classes/postHandler.php b/classes/postHandler.php
index b9b7ab3..873070d 100644
--- a/classes/postHandler.php
+++ b/classes/postHandler.php
@@ -3,8 +3,8 @@ require_once 'dao.php';
class PostHandler
{
- private $valid_types = ["article", "category", "article_categories", 'image'];
- private $valid_actions = ["create", "update", "remove", "get"];
+ private $valid_types = ["article", "category", "article_categories", "image", "stock"];
+ private $valid_actions = ["create", "update", "remove", "get", "buy", "sell"];
private $action;
private $type;
@@ -35,6 +35,8 @@ class PostHandler
$result = -1;
if ($this->type == "image") {
$result = $this->save_image();
+ } else if ($this->type == "stock") {
+ $result = $this->updateStock();
} else if (count($this->data) > 0) {
if ($this->action == "create")
$result = $this->create();
@@ -151,6 +153,19 @@ class PostHandler
return $result;
}
+ function updateStock() {
+ $result = 0;
+ foreach ($this->data as $row) {
+ $value = $row["value"];
+ if ($this->action == "sell")
+ $value = -$value;
+ $result = $this->dao->update_article_stock($row["id"], $value);
+ if (!$result)
+ break;
+ }
+ return $result;
+ }
+
function setUnknownTypeResponse()
{
$this->responseArray["status"] = 1;