Commit 65c073b6 by Félicie

Merge remote-tracking branch 'origin' into 2207-type-of-members

parents 16f87ccd 99ad4563
Pipeline #1760 failed with stage
in 1 minute 33 seconds
from django.test import SimpleTestCase
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
from django.test import SimpleTestCase
from django.test import Client
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
def testInventoryUrlIsResolved(self):
c = Client()
response = c.get('/reception/')
assert response.status_code == 200, "Inventory url is not resolved"
from django.test import SimpleTestCase
from django.test import Client
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
def testMembersUrlIsResolved(self):
c = Client()
response = c.get('/members/')
assert response.status_code == 200, "Members url is not resolved"
from django.test import SimpleTestCase
from django.test import Client
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
def testOrdersUrlIsResolved(self):
c = Client()
response = c.get('/orders/')
assert response.status_code == 200, "Orders url is not resolved"
from django.test import SimpleTestCase
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
......@@ -9,8 +9,8 @@
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"lint": "eslint . --max-warnings 326 '**/*.js'",
"lint-fix": "eslint . --fix --max-warnings 326 '**/*.js'"
"lint": "eslint . --max-warnings 292 '**/*.js'",
"lint-fix": "eslint . --fix --max-warnings 292 '**/*.js'"
},
"repository": {
"type": "git",
......
from django.test import SimpleTestCase
from django.test import Client
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
def testProductsUrlIsResolved(self):
c = Client()
response = c.get('/products/')
assert response.status_code == 200, "Products url is not resolved"
......@@ -30,7 +30,8 @@ var reception_status = null,
updatedProducts = [], // Keep record of updated products
validProducts = [], // Keep record of directly validated products
updateType = "", // step 1: qty_valid; step2: br_valid
barcodes = null; // Barcodes stored locally
barcodes = null, // Barcodes stored locally
priceToWeightIsCorrect = true;
var dbc = null,
sync = null,
......@@ -67,38 +68,56 @@ function searchUpdatedProduct() {
function select_product_from_bc(barcode) {
try {
if (editing_product == null) {
let p = barcodes.get_corresponding_odoo_product(barcode);
var scannedProduct = barcodes.get_corresponding_odoo_product(barcode);
if (p == null) {
priceToWeightIsCorrect = true;
if (scannedProduct == null) {
alert("Le code-barre " + barcode + " ne correspond à aucun article connu.");
return -1;
}
var found = {data: null, place: null};
var foundProduct = {data: null, place: null};
$.each(list_to_process, function(i, e) {
if (e.product_id[0] == p.data[barcodes['keys']['id']]) {
found.data = e;
found.place = 'to_process';
if (e.product_id[0] == scannedProduct.data[barcodes['keys']['id']]) {
foundProduct.data = e;
foundProduct.place = 'to_process';
}
});
if (found.data == null) {
if (foundProduct.data == null) {
$.each(list_processed, function(i, e) {
if (e.product_id[0] == p.data[barcodes['keys']['id']]) {
found.data = JSON.parse(JSON.stringify(e));
found.place = 'processed';
if (e.product_id[0] == scannedProduct.data[barcodes['keys']['id']]) {
foundProduct.data = JSON.parse(JSON.stringify(e));
foundProduct.data.product_qty = null;
foundProduct.place = 'processed';
}
});
}
if (found.data !== null) {
setLineEdition(found.data);
if (found.place === 'to_process') {
let row = table_to_process.row($('#'+found.data.product_id[0]));
if (foundProduct.data !== null) {
if (foundProduct.data.product_uom[0] == 21) { //if qty is in weight
if (scannedProduct.rule === 'weight') {
editing_product = foundProduct.data;
editProductInfo(foundProduct.data, scannedProduct.qty);
editing_product = null;
} else if (scannedProduct.rule === 'price_to_weight') {
openModal($('#templates #modal_confirm_price_to_weight').html(), price_to_weight_is_wrong, 'Non', false, true, price_to_weight_confirmed_callback(foundProduct, scannedProduct));
setupPopUpBtnStyle(scannedProduct);
}
}
if (scannedProduct.rule !== 'price_to_weight') {
if (foundProduct.data.product_uom[0] != 21) {
setLineEdition(foundProduct.data);
}
if (foundProduct.place === 'to_process') {
let row = table_to_process.row($('#'+foundProduct.data.product_id[0]));
remove_from_toProcess(row, found.data);
remove_from_toProcess(row, foundProduct.data);
}
}
}
}
......@@ -156,6 +175,65 @@ function update_distant_orders() {
});
}
function price_to_weight_confirmed_callback(foundProduct, scannedProduct) {
return function() {
let newQty = null;
if (priceToWeightIsCorrect) {
newQty = scannedProduct.qty;
} else {
let tmp = Number((scannedProduct.value/document.getElementById("new_price_to_weight").value).toFixed(3));
if (isFinite(tmp)) {
newQty = tmp;
}
}
if (foundProduct.data !== null && newQty != null) {
if (foundProduct.place === 'to_process') {
let row = table_to_process.row($('#'+foundProduct.data.product_id[0]));
remove_from_toProcess(row, foundProduct.data);
}
editing_product = foundProduct.data;
editProductInfo(foundProduct.data, newQty);
editing_product = null;
resetPopUpButtons();
}
};
}
function price_to_weight_is_wrong() {
document.getElementById("new_price_to_weight").style.display = "";
document.getElementsByClassName("btn--success")[0].style.display = "none";
document.querySelector('#modal_closebtn_bottom').innerHTML = 'OK';
priceToWeightIsCorrect = false;
}
function setupPopUpBtnStyle(p) {
//On inverse en quelque sorte les boutons succes et d'annulation en mettant "Oui" sur le btn d'annulation
// et "Non" sur le bouton de reussite.
//Cela nous permet de reecrire moins de code puisque si la reponse est Oui on ne veut
//rien modifier et sortir du pop up, ce qui correspond au comportement du bouton annulation
//(ou aussi appeler cancel button)
document.querySelector('#modal_closebtn_bottom').innerHTML = 'Oui';
document.getElementById("modal_closebtn_bottom").style.backgroundColor = "green";
document.getElementsByClassName("btn--success")[0].style.backgroundColor = "red";
document.querySelector('#product_to_verify').innerHTML = p.data[0];
document.querySelector('#price_to_verify').innerHTML = p.data[6];
document.getElementById("new_price_to_weight").style.display = "none";
document.getElementsByClassName("btn--success")[0].style.display = "";
}
function resetPopUpButtons() {
document.getElementsByClassName("btn--success")[0].style.display = "";
document.getElementsByClassName("btn--success")[0].style.backgroundColor = "";
document.querySelector('#modal_closebtn_bottom').style.backgroundColor = "";
}
/* INIT */
// Get order(s) data from server
......@@ -857,36 +935,47 @@ function editProductInfo (productToEdit, value = null, batch = false) {
// Check if the product is already in the 'updated' list
var index = searchUpdatedProduct();
var firstUpdate = false;
var isValid = false;
let newValue = value;
var addition = false;
// If 'value' parameter not set, get value from edition input
if (value == null) {
newValue = parseFloat(document.getElementById('edition_input').value.replace(',', '.'));
newValue = newValue.isFinite() ? newValue : 0;
}
$.each(list_processed, function(i, e) {
if (e.product_id[0] == productToEdit.product_id[0]) {
addition = true;
productToEdit = e;
newValue = newValue + productToEdit.product_qty;
newValue = Number((newValue + productToEdit.product_qty).toFixed(3));
}
});
// If qty edition & Check if qty changed
if (reception_status == "False" && productToEdit.product_qty != newValue) {
if (index == -1) { // First update
productToEdit.old_qty = productToEdit.product_qty;
firstUpdate = true;
}
if (reception_status == "False") {
firstUpdate = (index == -1); //first update
if (productToEdit.product_qty != newValue) {
if (firstUpdate) {
productToEdit.old_qty = productToEdit.product_qty;
} else {
//if it is not the first update AND newValue is equal to the validation qty then the product is valid
isValid = (newValue === productToEdit.old_qty);
}
// Edit product info
productToEdit.product_qty = newValue;
/*
If qty has changed, we choose to set detailed values as follow:
1 package (product_qty_package) of X products (package_qty)
*/
productToEdit.product_qty_package = 1;
productToEdit.package_qty = productToEdit.product_qty;
// Edit product info
productToEdit.product_qty = newValue;
/*
If qty has changed, we choose to set detailed values as follow:
1 package (product_qty_package) of X products (package_qty)
*/
productToEdit.product_qty_package = 1;
productToEdit.package_qty = productToEdit.product_qty;
} else if (firstUpdate) {
// if the product is updated for the first time and productQty is equal to the newValue then the product is validated
isValid = true;
}
}
// Check if price changed
......@@ -920,27 +1009,56 @@ function editProductInfo (productToEdit, value = null, batch = false) {
if (firstUpdate) {
updatedProducts.push(productToEdit);
// Create 'updated_products' list in order if not exists
if (!orders[productToEdit.id_po]['updated_products']) {
orders[productToEdit.id_po]['updated_products'] = [];
}
//if product is validated thru edition -> add to valid_products
if (isValid) {
// Create 'valid_products' list in order if not exists
if (!orders[productToEdit.id_po]['valid_products']) {
orders[productToEdit.id_po]['valid_products'] = [];
}
orders[productToEdit.id_po]['valid_products'].push(productToEdit['id']);
} else {
// Create 'updated_products' list in order if not exists
if (!orders[productToEdit.id_po]['updated_products']) {
orders[productToEdit.id_po]['updated_products'] = [];
}
// Add product to order's updated products if first update
orders[productToEdit.id_po]['updated_products'].push(productToEdit);
// Add product to order's updated products if first update
orders[productToEdit.id_po]['updated_products'].push(productToEdit);
// May have been directly validated then updated from processed list
// -> remove from 'valid_products' list
for (i in orders[productToEdit.id_po]['valid_products']) {
if (orders[productToEdit.id_po]['valid_products'][i] == productToEdit['id']) {
orders[productToEdit.id_po]['valid_products'].splice(i, 1);
// May have been directly validated then updated from processed list
// -> remove from 'valid_products' list
for (i in orders[productToEdit.id_po]['valid_products']) {
if (orders[productToEdit.id_po]['valid_products'][i] == productToEdit['id']) {
orders[productToEdit.id_po]['valid_products'].splice(i, 1);
}
}
}
} else {
// Look for product in order's updated products list
for (i in orders[productToEdit.id_po]['updated_products']) {
if (orders[productToEdit.id_po]['updated_products'][i]['product_id'][0]
== productToEdit['product_id'][0]) {
orders[productToEdit.id_po]['updated_products'][i] = productToEdit;
if (isValid) {
//if product is valid -> remove from updated_products list and add to valid_products list
//removing from updated_products
for (i in orders[productToEdit.id_po]['updated_products']) {
if (orders[productToEdit.id_po]['updated_products'][i]['product_id'][0]
== productToEdit['product_id'][0]) {
orders[productToEdit.id_po]['updated_products'].splice(i, 1);
}
}
//add to valid_products
// Create 'valid_products' list in order if not exists
if (!orders[productToEdit.id_po]['valid_products']) {
orders[productToEdit.id_po]['valid_products'] = [];
}
orders[productToEdit.id_po]['valid_products'].push(productToEdit['id']);
} else {
// Look for product in order's updated products list
for (i in orders[productToEdit.id_po]['updated_products']) {
if (orders[productToEdit.id_po]['updated_products'][i]['product_id'][0]
== productToEdit['product_id'][0]) {
orders[productToEdit.id_po]['updated_products'][i] = productToEdit;
}
}
}
}
......
from django.test import SimpleTestCase
from django.test import Client
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
def testReceptionUrlIsResolved(self):
c = Client()
response = c.get('/reception/')
assert response.status_code == 200 , "Reception url is not resolved"
from django.test import SimpleTestCase
\ No newline at end of file
from django.test import SimpleTestCase
from django.test import SimpleTestCase
from django.test import Client
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
def testSalesUrlIsResolved(self):
c = Client()
response = c.get('/sales/')
assert response.status_code == 200, "Sales url is not resolved"
from django.test import SimpleTestCase
from django.test import Client
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
def testShelfsUrlIsResolved(self):
c = Client()
response = c.get('/shelfs/')
assert response.status_code == 200, "Shelfs url is not resolved"
from django.test import SimpleTestCase
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
from django.test import SimpleTestCase
from django.test import Client
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
def testShopUrlIsResolved(self):
c = Client()
response = c.get('/shop/')
assert response.status_code == 200, "Shop url is not resolved"
from django.test import SimpleTestCase
from django.test import Client
class TestUrls(SimpleTestCase):
def test_list_url_is_resolved(self):
assert 1==1
\ No newline at end of file
def testStockUrlIsResolved(self):
c = Client()
response = c.get('/stock/')
assert response.status_code == 200, "Stock url is not resolved"
......@@ -177,6 +177,12 @@
<div id="modal_FAQ_content"></div>
<div id="modal_qtiesValidated"></div>
<div id="modal_pricesValidated"></div>
<div id="modal_confirm_price_to_weight">
<h3>Confirmation du prix</h3>
<p>Est ce que le prix au kilo du produit <b><span id="product_to_verify"></span></b>
est bien <b><span id="price_to_verify"></span></b> euros/Kg ?</p>
<input type="number" name="Prix au Kilo" id="new_price_to_weight">
</div>
</div>
<br/>
</div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment