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
...@@ -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,6 +243,7 @@ def update_orders(request): ...@@ -235,6 +243,7 @@ def update_orders(request):
# Remove order's group # Remove order's group
try: try:
if os.path.exists('temp/grouped_order.json'):
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)
...@@ -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,8 +339,8 @@ def save_error_report(request): ...@@ -328,8 +339,8 @@ 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:
if 'updated_products' in order:
for product in order['updated_products']: for product in order['updated_products']:
# Don't store products with same qties # Don't store products with same qties
if product['old_qty'] != product['product_qty']: if product['old_qty'] != product['product_qty']:
...@@ -351,10 +362,9 @@ def save_error_report(request): ...@@ -351,10 +362,9 @@ def save_error_report(request):
product['product_qty'], product['product_qty'],
product['price_unit'], product['price_unit'],
supplier_shortage] ) supplier_shortage] )
except: except Exception as exp:
# no updated products, do nothing print("Error while updating products")
pass 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,6 +420,7 @@ def save_error_report(request): ...@@ -409,6 +420,7 @@ def save_error_report(request):
# Concatenate products info from each step # Concatenate products info from each step
try: try:
if "updated_products" in order:
for product in order['updated_products']: for product in order['updated_products']:
if 'supplier_code' in product: if 'supplier_code' in product:
supplier_code = str(product['supplier_code']) supplier_code = str(product['supplier_code'])
...@@ -453,10 +465,10 @@ def save_error_report(request): ...@@ -453,10 +465,10 @@ def save_error_report(request):
error_total_abs += abs(item['error_line']) error_total_abs += abs(item['error_line'])
data_full.append(item) data_full.append(item)
except: except Exception as exp:
# no updated products, do nothing # no updated products, do nothing
pass 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"
try:
wb.save(filename=fileName) 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