Commit d7726103 by Arnaud B

Ajout d'un filtrage par code barre lors des impressions suite à maj du prix

Correction de bug: création du dossier temp s'il n'existe pas
Limite les exceptions pour éviter les erreurs 500 lors du save report
parent 7359d92d
Pipeline #938 passed with stage
in 20 seconds
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
from outils.common_imports import * from outils.common_imports import *
from outils.for_view_imports import * from outils.for_view_imports import *
from django.views.generic import View from django.views.generic import View
from django.http import HttpResponse
from django.http import JsonResponse
import os import os
from datetime import date from datetime import date
...@@ -14,6 +16,9 @@ from outils.common import OdooAPI ...@@ -14,6 +16,9 @@ from outils.common import OdooAPI
from members.models import CagetteUser from members.models import CagetteUser
from products.models import CagetteProduct from products.models import CagetteProduct
# create temp directory if needed
if not os.path.exists("temp"):
os.mkdir("temp")
def as_text(value): def as_text(value):
""" Utils """ """ Utils """
...@@ -74,10 +79,10 @@ def produits(request, id): ...@@ -74,10 +79,10 @@ def produits(request, id):
"TOOLS_SERVER": settings.TOOLS_SERVER} "TOOLS_SERVER": settings.TOOLS_SERVER}
fixed_barcode_prefix = '0490' fixed_barcode_prefix = '0490'
if hasattr(settings, 'RECEPTION_PB_EMAIL'): if hasattr(settings, 'RECEPTION_PB'):
context['RECEPTION_PB_EMAIL'] = settings.RECEPTION_PB_EMAIL context['RECEPTION_PB'] = settings.RECEPTION_PB
else: else:
context['RECEPTION_PB_EMAIL'] = ' [mail à renseigner dans config.py]' context['RECEPTION_PB'] = ' [texte à renseigner dans config.py]'
if hasattr(settings, 'FIXED_BARCODE_PREFIX'): if hasattr(settings, 'FIXED_BARCODE_PREFIX'):
fixed_barcode_prefix = settings.FIXED_BARCODE_PREFIX fixed_barcode_prefix = settings.FIXED_BARCODE_PREFIX
...@@ -135,7 +140,7 @@ def save_order_group(request): ...@@ -135,7 +140,7 @@ def save_order_group(request):
order_ids = json.loads(request.body.decode()) order_ids = json.loads(request.body.decode())
try: try:
try: try:
# Check if any of the orders attempted to be grouped is already in a group # 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: with open('temp/grouped_order.json', 'r') as json_file:
saved_groups = json.load(json_file) saved_groups = json.load(json_file)
...@@ -165,6 +170,9 @@ def update_orders(request): ...@@ -165,6 +170,9 @@ def update_orders(request):
import requests import requests
# don't print barcode which begin with these codes
noprint_list = ["0493", "0492", "0499"]
rep = HttpResponse("Not") rep = HttpResponse("Not")
if request.is_ajax(): if request.is_ajax():
if request.method == 'PUT': if request.method == 'PUT':
...@@ -212,8 +220,8 @@ def update_orders(request): ...@@ -212,8 +220,8 @@ def update_orders(request):
except Exception as e: except Exception as e:
errors.append('error registering shortage on p'+order_line['id']+':'+str(e)) errors.append('error registering shortage on p'+order_line['id']+':'+str(e))
# Print etiquette with new price if update if successful # 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']: 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: try:
tools_url = settings.TOOLS_SERVER + '/products/label_print/' tools_url = settings.TOOLS_SERVER + '/products/label_print/'
tools_url += str(order_line['product_tmpl_id']) + '/' tools_url += str(order_line['product_tmpl_id']) + '/'
...@@ -235,17 +243,18 @@ def update_orders(request): ...@@ -235,17 +243,18 @@ def update_orders(request):
# Remove order's group # Remove order's group
try: try:
with open('temp/grouped_order.json', 'r') as json_file: if os.path.exists('temp/grouped_order.json'):
saved_groups = json.load(json_file) 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): for oi in order_ids:
if oi in group: for i, group in enumerate(saved_groups):
saved_groups.pop(i) if oi in group:
break saved_groups.pop(i)
break
with open('temp/grouped_order.json', 'w') as json_file:
json.dump(saved_groups, json_file) with open('temp/grouped_order.json', 'w') as json_file:
json.dump(saved_groups, json_file)
except Exception as e: except Exception as e:
# no saved groups # no saved groups
print(str(e)) print(str(e))
...@@ -292,6 +301,7 @@ def save_error_report(request): ...@@ -292,6 +301,7 @@ def save_error_report(request):
orders_partner = orders_partner + ', ' orders_partner = orders_partner + ', '
orders_partner = orders_partner + order['partner'] + ' du ' + order['date_order'] orders_partner = orders_partner + order['partner'] + ' du ' + order['date_order']
# If group of orders # If group of orders
if len(data['orders']) > 1 : if len(data['orders']) > 1 :
temp_group_file_name = "temp/" + orders_name + "_rapport-reception_temp.xlsx" temp_group_file_name = "temp/" + orders_name + "_rapport-reception_temp.xlsx"
...@@ -309,6 +319,7 @@ def save_error_report(request): ...@@ -309,6 +319,7 @@ def save_error_report(request):
data['orders'].append(group_order) data['orders'].append(group_order)
# Save qties & comments after step 1 # Save qties & comments after step 1
if data['update_type'] == 'qty_valid': if data['update_type'] == 'qty_valid':
for order in data['orders']: for order in data['orders']:
...@@ -328,33 +339,32 @@ def save_error_report(request): ...@@ -328,33 +339,32 @@ def save_error_report(request):
# If in group add group name # If in group add group name
if len(data['orders']) > 1 : if len(data['orders']) > 1 :
ws.append( ['group', orders_name] ) ws.append( ['group', orders_name] )
try: try:
for product in order['updated_products']: if 'updated_products' in order:
# Don't store products with same qties for product in order['updated_products']:
if product['old_qty'] != product['product_qty']: # Don't store products with same qties
if 'supplier_code' in product: if product['old_qty'] != product['product_qty']:
supplier_code = str(product['supplier_code']) if 'supplier_code' in product:
else: supplier_code = str(product['supplier_code'])
supplier_code = 'X' else:
supplier_code = 'X'
if 'supplier_shortage' in product:
supplier_shortage = '/!\ Rupture fournisseur' if 'supplier_shortage' in product:
else: supplier_shortage = '/!\ Rupture fournisseur'
supplier_shortage = '' else:
supplier_shortage = ''
ws.append( ['produit',
product['product_id'][1], ws.append( ['produit',
supplier_code, product['product_id'][1],
str(product['barcode']), supplier_code,
product['old_qty'], str(product['barcode']),
product['product_qty'], product['old_qty'],
product['price_unit'], product['product_qty'],
supplier_shortage] ) product['price_unit'],
except: supplier_shortage] )
# no updated products, do nothing except Exception as exp:
pass print("Error while updating products")
print(exp)
if ('user_comments' in data) and data['user_comments'] != "": if ('user_comments' in data) and data['user_comments'] != "":
ws.append( ['commentaire', data['user_comments']] ) ws.append( ['commentaire', data['user_comments']] )
else: else:
...@@ -363,6 +373,8 @@ def save_error_report(request): ...@@ -363,6 +373,8 @@ def save_error_report(request):
# Save file # Save file
wb.save(filename=order['temp_file_name']) wb.save(filename=order['temp_file_name'])
# Create report with data from steps 1 & 2 # Create report with data from steps 1 & 2
else: else:
for order in data['orders']: for order in data['orders']:
...@@ -397,7 +409,6 @@ def save_error_report(request): ...@@ -397,7 +409,6 @@ def save_error_report(request):
os.remove(order['temp_file_name']) os.remove(order['temp_file_name'])
except: except:
data_comment_s1 = "Rapport de la première étape absent !" data_comment_s1 = "Rapport de la première étape absent !"
# Add data from step 2 # Add data from step 2
data_full = [] data_full = []
error_total = 0 error_total = 0
...@@ -409,54 +420,55 @@ def save_error_report(request): ...@@ -409,54 +420,55 @@ def save_error_report(request):
# Concatenate products info from each step # Concatenate products info from each step
try: try:
for product in order['updated_products']: if "updated_products" in order:
if 'supplier_code' in product: for product in order['updated_products']:
supplier_code = str(product['supplier_code']) if 'supplier_code' in product:
else: supplier_code = str(product['supplier_code'])
supplier_code = 'X' else:
supplier_code = 'X'
if 'supplier_shortage' in product:
supplier_shortage = '/!\ Rupture fournisseur' if 'supplier_shortage' in product:
else: supplier_shortage = '/!\ Rupture fournisseur'
supplier_shortage = '' else:
supplier_shortage = ''
item = {
'product_id': product['product_id'][1], item = {
'product_supplier_code': supplier_code, 'product_id': product['product_id'][1],
'product_barcode': product['barcode'], 'product_supplier_code': supplier_code,
'old_price_unit': float(product['old_price_unit']), 'product_barcode': product['barcode'],
'price_unit': float(product['price_unit']), 'old_price_unit': float(product['old_price_unit']),
'supplier_shortage': supplier_shortage '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 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 # Add remaining products, the ones edited only in step 1
for product in data_qties.values(): for product in data_qties.values():
item = { item = {
...@@ -486,7 +498,6 @@ def save_error_report(request): ...@@ -486,7 +498,6 @@ def save_error_report(request):
wb = Workbook() wb = Workbook()
ws = wb.active ws = wb.active
ws.title = "Commande " + order['name'] ws.title = "Commande " + order['name']
# Group # Group
if 'group_ids' in order : if 'group_ids' in order :
ws.append( ['Rapport de réception d\'un groupe de commandes'] ) ws.append( ['Rapport de réception d\'un groupe de commandes'] )
...@@ -528,7 +539,6 @@ def save_error_report(request): ...@@ -528,7 +539,6 @@ def save_error_report(request):
round(product['expected_amount'], 2), round(product['expected_amount'], 2),
round(product['error_line'], 2), round(product['error_line'], 2),
product['supplier_shortage']] ) product['supplier_shortage']] )
ws.append( [] ) ws.append( [] )
ws.append( ['Montant total de l\'erreur :', '', '', '', '', '', '', '', round(error_total, 2)] ) ws.append( ['Montant total de l\'erreur :', '', '', '', '', '', '', '', round(error_total, 2)] )
ws.append( ['Montant total en valeur absolue :', '', '', '', '', '', '', '', round(error_total_abs, 2)] ) ws.append( ['Montant total en valeur absolue :', '', '', '', '', '', '', '', round(error_total_abs, 2)] )
...@@ -563,7 +573,6 @@ def save_error_report(request): ...@@ -563,7 +573,6 @@ def save_error_report(request):
top_left_cell.alignment = Alignment(vertical="top") top_left_cell.alignment = Alignment(vertical="top")
top_left_cell = ws['B'+str(merge_begin)] top_left_cell = ws['B'+str(merge_begin)]
top_left_cell.alignment = Alignment(vertical="top") top_left_cell.alignment = Alignment(vertical="top")
# "Auto fit" columns width to content # "Auto fit" columns width to content
for column_cells in ws.columns: for column_cells in ws.columns:
length = max(len(as_text(cell.value)) for cell in column_cells) length = max(len(as_text(cell.value)) for cell in column_cells)
...@@ -572,23 +581,23 @@ def save_error_report(request): ...@@ -572,23 +581,23 @@ def save_error_report(request):
length = 20 length = 20
ws.column_dimensions[column_cells[3].column_letter].width = length ws.column_dimensions[column_cells[3].column_letter].width = length
# Save file # Save file
fileName = "temp/" + order['name'] + "_rapport-reception.xlsx" 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 #Attach file to order
if 'group_ids' in order : # group report if 'group_ids' in order : # group report
# Attach group report to each order # Attach group report to each order
for group_item_id in order['group_ids'] : for group_item_id in order['group_ids'] :
m = CagetteReception(group_item_id) m = CagetteReception(group_item_id)
m.attach_file(fileName, False) m.attach_file(fileName, False)
os.remove(fileName) os.remove(fileName)
else: else:
m = CagetteReception(order['id']) m = CagetteReception(order['id'])
m.attach_file(fileName) m.attach_file(fileName)
return JsonResponse("ok", safe=False) return JsonResponse("ok", safe=False)
def reception_FAQ(request): def reception_FAQ(request):
......
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