Unverified Commit 9f817679 by Paul B

Merge remote-tracking branch 'cooperatic/dev_principale' into dev_lgds

parents 877b76d2 2c4b1bed
......@@ -91,5 +91,7 @@ ENTRANCE_COME_FOR_SHOPING_MSG = "Hey coucou toi ! Cet été nous sommes plus de
# Members space / shifts
UNSUBSCRIBED_MSG = 'Vous êtes désincrit·e, merci de remplir <a href="https://docs.google.com/forms/d/e/1FAIpQLSfPiC2PkSem9x_B5M7LKpoFNLDIz0k0V5I2W3Mra9AnqnQunw/viewform">ce formulaire</a> pour vous réinscrire sur un créneau.<br />Vous pouvez également contacter le Bureau des Membres en remplissant <a href="https://docs.google.com/forms/d/e/1FAIpQLSeZP0m5-EXPVJxEKJk6EjwSyZJtnbiGdYDuAeFI3ENsHAOikg/viewform">ce formulaire</a>'
RECEPTION_PB = "Ici, vous pouvez signaler toute anomalie lors d'une réception, les produits non commandés, cassés ou pourris. \
Merci d'indiquer un maximum d'informations, le nom du produit et son code barre. \
Dans le cas de produits déteriorés, merci d'envoyer une photo avec votre téléphone à [Adresse_email]"
......@@ -1338,7 +1338,7 @@ function openErrorReport() {
var textarea = document.getElementById("error_report");
textarea.value = user_comments;
textarea.value = (user_comments != undefined) ? user_comments : "";
textarea.focus();
textarea.setSelectionRange(textarea.value.length, textarea.value.length);
}
......
......@@ -2,6 +2,8 @@
from outils.common_imports import *
from outils.for_view_imports import *
from django.views.generic import View
from django.http import HttpResponse
from django.http import JsonResponse
import os
from datetime import date
......@@ -14,6 +16,9 @@ from outils.common import OdooAPI
from members.models import CagetteUser
from products.models import CagetteProduct
# create temp directory if needed
if not os.path.exists("temp"):
os.mkdir("temp")
def as_text(value):
""" Utils """
......@@ -74,10 +79,10 @@ def produits(request, id):
"TOOLS_SERVER": settings.TOOLS_SERVER}
fixed_barcode_prefix = '0490'
if hasattr(settings, 'RECEPTION_PB_EMAIL'):
context['RECEPTION_PB_EMAIL'] = settings.RECEPTION_PB_EMAIL
if hasattr(settings, 'RECEPTION_PB'):
context['RECEPTION_PB'] = settings.RECEPTION_PB
else:
context['RECEPTION_PB_EMAIL'] = ' [mail à renseigner dans config.py]'
context['RECEPTION_PB'] = ' [texte à renseigner dans config.py]'
if hasattr(settings, 'FIXED_BARCODE_PREFIX'):
fixed_barcode_prefix = settings.FIXED_BARCODE_PREFIX
......@@ -135,7 +140,7 @@ def save_order_group(request):
order_ids = json.loads(request.body.decode())
try:
try:
try:
# Check if any of the orders attempted to be grouped is already in a group
with open('temp/grouped_order.json', 'r') as json_file:
saved_groups = json.load(json_file)
......@@ -165,6 +170,9 @@ def update_orders(request):
import requests
# don't print barcode which begin with these codes
noprint_list = ["0493", "0492", "0499"]
rep = HttpResponse("Not")
if request.is_ajax():
if request.method == 'PUT':
......@@ -212,8 +220,8 @@ def update_orders(request):
except Exception as e:
errors.append('error registering shortage on p'+order_line['id']+':'+str(e))
# Print etiquette with new price if update if successful
if (print_labels is True) and (update is True) and (data['update_type'] == 'br_valid') and order_line['new_shelf_price']:
# Print etiquette with new price if update if successful and barcode is authorized
if (print_labels is True) and (update is True) and (data['update_type'] == 'br_valid') and order_line['new_shelf_price'] and order_line['barcode'][:4] not in noprint_list:
try:
tools_url = settings.TOOLS_SERVER + '/products/label_print/'
tools_url += str(order_line['product_tmpl_id']) + '/'
......@@ -235,17 +243,18 @@ def update_orders(request):
# Remove order's group
try:
with open('temp/grouped_order.json', 'r') as json_file:
saved_groups = json.load(json_file)
for oi in order_ids:
for i, group in enumerate(saved_groups):
if oi in group:
saved_groups.pop(i)
break
with open('temp/grouped_order.json', 'w') as json_file:
json.dump(saved_groups, json_file)
if os.path.exists('temp/grouped_order.json'):
with open('temp/grouped_order.json', 'r') as json_file:
saved_groups = json.load(json_file)
for oi in order_ids:
for i, group in enumerate(saved_groups):
if oi in group:
saved_groups.pop(i)
break
with open('temp/grouped_order.json', 'w') as json_file:
json.dump(saved_groups, json_file)
except Exception as e:
# no saved groups
print(str(e))
......@@ -292,6 +301,7 @@ def save_error_report(request):
orders_partner = orders_partner + ', '
orders_partner = orders_partner + order['partner'] + ' du ' + order['date_order']
# If group of orders
if len(data['orders']) > 1 :
temp_group_file_name = "temp/" + orders_name + "_rapport-reception_temp.xlsx"
......@@ -309,6 +319,7 @@ def save_error_report(request):
data['orders'].append(group_order)
# Save qties & comments after step 1
if data['update_type'] == 'qty_valid':
for order in data['orders']:
......@@ -328,33 +339,32 @@ def save_error_report(request):
# If in group add group name
if len(data['orders']) > 1 :
ws.append( ['group', orders_name] )
try:
for product in order['updated_products']:
# Don't store products with same qties
if product['old_qty'] != product['product_qty']:
if 'supplier_code' in product:
supplier_code = str(product['supplier_code'])
else:
supplier_code = 'X'
if 'supplier_shortage' in product:
supplier_shortage = '/!\ Rupture fournisseur'
else:
supplier_shortage = ''
ws.append( ['produit',
product['product_id'][1],
supplier_code,
str(product['barcode']),
product['old_qty'],
product['product_qty'],
product['price_unit'],
supplier_shortage] )
except:
# no updated products, do nothing
pass
if 'updated_products' in order:
for product in order['updated_products']:
# Don't store products with same qties
if product['old_qty'] != product['product_qty']:
if 'supplier_code' in product:
supplier_code = str(product['supplier_code'])
else:
supplier_code = 'X'
if 'supplier_shortage' in product:
supplier_shortage = '/!\ Rupture fournisseur'
else:
supplier_shortage = ''
ws.append( ['produit',
product['product_id'][1],
supplier_code,
str(product['barcode']),
product['old_qty'],
product['product_qty'],
product['price_unit'],
supplier_shortage] )
except Exception as exp:
print("Error while updating products")
print(exp)
if ('user_comments' in data) and data['user_comments'] != "":
ws.append( ['commentaire', data['user_comments']] )
else:
......@@ -363,6 +373,8 @@ def save_error_report(request):
# Save file
wb.save(filename=order['temp_file_name'])
# Create report with data from steps 1 & 2
else:
for order in data['orders']:
......@@ -397,7 +409,6 @@ def save_error_report(request):
os.remove(order['temp_file_name'])
except:
data_comment_s1 = "Rapport de la première étape absent !"
# Add data from step 2
data_full = []
error_total = 0
......@@ -409,54 +420,55 @@ def save_error_report(request):
# Concatenate products info from each step
try:
for product in order['updated_products']:
if 'supplier_code' in product:
supplier_code = str(product['supplier_code'])
else:
supplier_code = 'X'
if 'supplier_shortage' in product:
supplier_shortage = '/!\ Rupture fournisseur'
else:
supplier_shortage = ''
item = {
'product_id': product['product_id'][1],
'product_supplier_code': supplier_code,
'product_barcode': product['barcode'],
'old_price_unit': float(product['old_price_unit']),
'price_unit': float(product['price_unit']),
'supplier_shortage': supplier_shortage
}
# If the product was also modified in step 1
if item['product_id'] in data_qties:
item['old_qty'] = float(data_qties[item['product_id']]['old_qty'])
item['product_qty'] = float(data_qties[item['product_id']]['product_qty'])
item['expected_amount'] = item['old_qty']*item['old_price_unit']
item['error_line'] = (item['old_qty'] - item['product_qty'])*item['price_unit']
# If product was set on supplier shortage in step 1 and not in step 2
if item['supplier_shortage'] == '' and data_qties[item['product_id']]['supplier_shortage'] != '':
item['supplier_shortage'] = data_qties[item['product_id']]['supplier_shortage']
data_qties.pop(item['product_id'])
else:
item['old_qty'] = float(product['product_qty'])
item['product_qty'] = item['old_qty']
item['expected_amount'] = item['old_qty']*item['old_price_unit']
item['error_line'] = 0
if (item['price_unit'] != item['old_price_unit']):
item['error_line'] = (item['price_unit'] - item['old_price_unit']) * item['product_qty']
error_total += item['error_line']
error_total_abs += abs(item['error_line'])
data_full.append(item)
except:
# no updated products, do nothing
pass
if "updated_products" in order:
for product in order['updated_products']:
if 'supplier_code' in product:
supplier_code = str(product['supplier_code'])
else:
supplier_code = 'X'
if 'supplier_shortage' in product:
supplier_shortage = '/!\ Rupture fournisseur'
else:
supplier_shortage = ''
item = {
'product_id': product['product_id'][1],
'product_supplier_code': supplier_code,
'product_barcode': product['barcode'],
'old_price_unit': float(product['old_price_unit']),
'price_unit': float(product['price_unit']),
'supplier_shortage': supplier_shortage
}
# If the product was also modified in step 1
if item['product_id'] in data_qties:
item['old_qty'] = float(data_qties[item['product_id']]['old_qty'])
item['product_qty'] = float(data_qties[item['product_id']]['product_qty'])
item['expected_amount'] = item['old_qty']*item['old_price_unit']
item['error_line'] = (item['old_qty'] - item['product_qty'])*item['price_unit']
# If product was set on supplier shortage in step 1 and not in step 2
if item['supplier_shortage'] == '' and data_qties[item['product_id']]['supplier_shortage'] != '':
item['supplier_shortage'] = data_qties[item['product_id']]['supplier_shortage']
data_qties.pop(item['product_id'])
else:
item['old_qty'] = float(product['product_qty'])
item['product_qty'] = item['old_qty']
item['expected_amount'] = item['old_qty']*item['old_price_unit']
item['error_line'] = 0
if (item['price_unit'] != item['old_price_unit']):
item['error_line'] = (item['price_unit'] - item['old_price_unit']) * item['product_qty']
error_total += item['error_line']
error_total_abs += abs(item['error_line'])
data_full.append(item)
except Exception as exp:
# no updated products, do nothing
print("Error while updating products")
print(exp)
# Add remaining products, the ones edited only in step 1
for product in data_qties.values():
item = {
......@@ -486,7 +498,6 @@ def save_error_report(request):
wb = Workbook()
ws = wb.active
ws.title = "Commande " + order['name']
# Group
if 'group_ids' in order :
ws.append( ['Rapport de réception d\'un groupe de commandes'] )
......@@ -528,7 +539,6 @@ def save_error_report(request):
round(product['expected_amount'], 2),
round(product['error_line'], 2),
product['supplier_shortage']] )
ws.append( [] )
ws.append( ['Montant total de l\'erreur :', '', '', '', '', '', '', '', round(error_total, 2)] )
ws.append( ['Montant total en valeur absolue :', '', '', '', '', '', '', '', round(error_total_abs, 2)] )
......@@ -563,7 +573,6 @@ def save_error_report(request):
top_left_cell.alignment = Alignment(vertical="top")
top_left_cell = ws['B'+str(merge_begin)]
top_left_cell.alignment = Alignment(vertical="top")
# "Auto fit" columns width to content
for column_cells in ws.columns:
length = max(len(as_text(cell.value)) for cell in column_cells)
......@@ -572,23 +581,23 @@ def save_error_report(request):
length = 20
ws.column_dimensions[column_cells[3].column_letter].width = length
# Save file
fileName = "temp/" + order['name'] + "_rapport-reception.xlsx"
wb.save(filename=fileName)
try:
wb.save(filename=fileName)
except Exception as exp:
print("Error while saving file %s"%fileName)
print(str(exp))
#Attach file to order
if 'group_ids' in order : # group report
# Attach group report to each order
for group_item_id in order['group_ids'] :
m = CagetteReception(group_item_id)
m.attach_file(fileName, False)
os.remove(fileName)
else:
m = CagetteReception(order['id'])
m.attach_file(fileName)
return JsonResponse("ok", safe=False)
def reception_FAQ(request):
......
......@@ -120,9 +120,7 @@
<hr />
<p class="txtleft">
Ici, vous pouvez signaler toute anomalie lors d'une réception, les produits non commandés, cassés ou pourris.
Merci d'indiquer un maximum d'informations, le nom du produit et son code barre.
Dans le cas de produits déteriorés, merci d'envoyer une photo avec votre téléphone à <strong>{{RECEPTION_PB_EMAIL}}</strong>
{{RECEPTION_PB}}
</p>
<br>
<textarea id="error_report"></textarea>
......
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