Commit d0157c9c by François

Allow Special FTOP to easy validate shift (and eslint auto fix)

parent bfbd616f
Pipeline #1153 passed with stage
in 1 minute 22 seconds
...@@ -1176,6 +1176,44 @@ class CagetteServices(models.Model): ...@@ -1176,6 +1176,44 @@ class CagetteServices(models.Model):
result['service_found'] = False result['service_found'] = False
return result return result
@staticmethod
def easy_validate_shift_presence(coop_id):
"""Add a presence point if the request is valid."""
res = {}
try:
api = OdooAPI()
# let verify coop_id is corresponding to a ftop subscriber
cond = [['id', '=', coop_id]]
fields = ['shift_type']
coop = api.search_read('res.partner', cond, fields)
if coop:
if coop[0]['shift_type'] == 'ftop':
evt_name = getattr(settings, 'ENTRANCE_ADD_PT_EVENT_NAME', 'Validation service comité')
c = [['partner_id', '=', coop_id], ['name', '=', evt_name]]
f = ['create_date']
last_point_mvts = api.search_read('shift.counter.event', c, f,
order ="create_date DESC", limit=1)
ok_for_adding_pt = False
if len(last_point_mvts):
now = datetime.datetime.now()
past = datetime.datetime. strptime(last_point_mvts[0]['create_date'],
'%Y-%m-%d %H:%M:%S')
if (now - past).total_seconds() >= 3600 * 24:
ok_for_adding_pt = True
else:
ok_for_adding_pt = True
if ok_for_adding_pt is True:
res['evt_id'] = CagetteMember(coop_id).add_pts('ftop', 1, evt_name)
else:
res['error'] = "One point has been added less then 24 hours ago"
else:
res['error'] = "Unallowed coop"
else:
res['error'] = "Invalid coop id"
except Exception as e:
coop_logger.error("easy_validate_shift_presence : %s %s", str(coop_id), str(e))
return res
class CagetteUser(models.Model): class CagetteUser(models.Model):
@staticmethod @staticmethod
......
...@@ -24,6 +24,8 @@ var current_displayed_member = null, ...@@ -24,6 +24,8 @@ var current_displayed_member = null,
rattrapage_ou_volant = null, rattrapage_ou_volant = null,
timeout_counter = null; timeout_counter = null;
var search_button = $('.btn--primary.search'); var search_button = $('.btn--primary.search');
var sm_search_member_button = $('#sm_search_member_button'),
sm_search_member_input = $('#sm_search_member_input');
var loading2 = $('.loading2'); var loading2 = $('.loading2');
var search_field = $('input[name="search_string"]'); var search_field = $('input[name="search_string"]');
var shift_title = $('#current_shift_title'); var shift_title = $('#current_shift_title');
...@@ -163,7 +165,7 @@ function canSearch() { ...@@ -163,7 +165,7 @@ function canSearch() {
function search_member(force_search = false) { function search_member(force_search = false) {
chars = []; // to prevent false "as barcode-reader" input chars = []; // to prevent false "as barcode-reader" input
operator = null operator = null;
if (canSearch() || force_search) { if (canSearch() || force_search) {
html_elts.member_slide.hide(); html_elts.member_slide.hide();
...@@ -281,11 +283,15 @@ function fill_service_entry(s) { ...@@ -281,11 +283,15 @@ function fill_service_entry(s) {
rattrapage_wanted.show(); rattrapage_wanted.show();
} }
function clean_service_entry() { function clean_search_for_easy_validate_zone() {
$('.search_member_results_area').hide(); $('.search_member_results_area').hide();
$('.search_member_results').empty(); $('.search_member_results').empty();
$('#sm_search_member_input').val(''); sm_search_member_input.val('');
operator = null operator = null;
}
function clean_service_entry() {
clean_search_for_easy_validate_zone();
rattrapage_wanted.hide(); rattrapage_wanted.hide();
shift_title.text(''); shift_title.text('');
shift_members.html(''); shift_members.html('');
...@@ -681,20 +687,20 @@ function ask_for_easy_shift_validation() { ...@@ -681,20 +687,20 @@ function ask_for_easy_shift_validation() {
post_form( post_form(
'/members/easy_validate_shift_presence', '/members/easy_validate_shift_presence',
{ {
coop_id: operator.id, coop_id: operator.id
}, },
function(err, result) { function(err, result) {
console.log(result);
if (!err) { if (!err) {
if (typeof(result.msg) != "undefined") { alert("1 point volant vient d'être ajouté.");
alert(result.msg); clean_search_for_easy_validate_zone();
} else if (result.action === null) {
console.log('ok')
}
closeModal(); closeModal();
} else { } else {
console.log(err) if (typeof (err.responseJSON) != "undefined"
&& typeof (err.responseJSON.error) != "undefined") {
alert(err.responseJSON.error);
} else {
console.log(err);
}
} }
} }
); );
...@@ -723,13 +729,11 @@ function display_possible_members() { ...@@ -723,13 +729,11 @@ function display_possible_members() {
+ '</button>'; + '</button>';
$('.search_member_results').append(member_button); $('.search_member_results').append(member_button);
// Set action on click on a member button // Set action on click on a member button
$('.btn_member').on('click', function() { $('.btn_member').on('click', function() {
for (member of members_search_results) { for (member of members_search_results) {
if (member.id == $(this).attr('member_id')) { if (member.id == $(this).attr('member_id')) {
operator = member; operator = member;
// Enable validation button when operator is selected // Enable validation button when operator is selected
ask_for_easy_shift_validation(); ask_for_easy_shift_validation();
break; break;
...@@ -784,7 +788,10 @@ $(document).ready(function() { ...@@ -784,7 +788,10 @@ $(document).ready(function() {
}); });
$('#sm_search_member_form').submit(function() { $('#sm_search_member_form').submit(function() {
let search_str = $('#sm_search_member_input').val(); if (is_time_to('search_member', 1000)) {
sm_search_member_button.empty().append(`<i class="fas fa-spinner fa-spin"></i>`);
let search_str = sm_search_member_input.val();
$.ajax({ $.ajax({
url: '/members/search/' + search_str, url: '/members/search/' + search_str,
dataType : 'json', dataType : 'json',
...@@ -792,7 +799,6 @@ $(document).ready(function() { ...@@ -792,7 +799,6 @@ $(document).ready(function() {
members_search_results = []; members_search_results = [];
for (member of data.res) { for (member of data.res) {
console.log(member)
if (member.shift_type == 'ftop') { if (member.shift_type == 'ftop') {
members_search_results.push(member); members_search_results.push(member);
} }
...@@ -811,9 +817,13 @@ $(document).ready(function() { ...@@ -811,9 +817,13 @@ $(document).ready(function() {
globalPosition:"top right", globalPosition:"top right",
className: "error" className: "error"
}); });
},
complete: function() {
sm_search_member_button.empty().append(`Recherche`);
}
});
} }
}); });
})
}); });
......
...@@ -286,7 +286,20 @@ def record_service_presence(request): ...@@ -286,7 +286,20 @@ def record_service_presence(request):
return JsonResponse({'res': res}) return JsonResponse({'res': res})
def easy_validate_shift_presence(request): def easy_validate_shift_presence(request):
return JsonResponse({}) """Add a presence point if the request is valid."""
res = {}
try:
coop_id = int(request.POST.get("coop_id", "nan"))
res = CagetteServices.easy_validate_shift_presence(coop_id)
except Exception as e:
res['error'] = str(e)
if 'error' in res:
if res['error'] == "One point has been added less then 24 hours ago":
# TODO : use translation (all project wide)
res['error'] = "Vous ne pouvez pas valider plus d'un service par 24h"
return JsonResponse(res, status=500)
else:
return JsonResponse(res, safe=False)
def record_absences(request): def record_absences(request):
return JsonResponse({'res': CagetteServices.record_absences()}) return JsonResponse({'res': CagetteServices.record_absences()})
......
...@@ -119,6 +119,7 @@ function add_product() { ...@@ -119,6 +119,7 @@ function add_product() {
contentType: "application/json; charset=utf-8", contentType: "application/json; charset=utf-8",
success: function(data) { success: function(data) {
let res = data.products[0]; let res = data.products[0];
if (typeof res.id != "undefined") { if (typeof res.id != "undefined") {
res.suppliersinfo = []; res.suppliersinfo = [];
res.default_code = ' '; res.default_code = ' ';
...@@ -191,7 +192,8 @@ function check_products_data() { ...@@ -191,7 +192,8 @@ function check_products_data() {
} }
); );
clicked_order_pill.find('.pill_order_name').empty().append(`<i class="fas fa-spinner fa-spin"></i>`); clicked_order_pill.find('.pill_order_name').empty()
.append(`<i class="fas fa-spinner fa-spin"></i>`);
$.ajax({ $.ajax({
type: 'GET', type: 'GET',
...@@ -208,12 +210,14 @@ function check_products_data() { ...@@ -208,12 +210,14 @@ function check_products_data() {
// Override products data with new data (without suppliersinfo so we don't override qty) // Override products data with new data (without suppliersinfo so we don't override qty)
const updated_suppliersinfo = product.suppliersinfo; const updated_suppliersinfo = product.suppliersinfo;
delete product.suppliersinfo; delete product.suppliersinfo;
products[p_index] = { ...products[p_index], ...product }; products[p_index] = { ...products[p_index], ...product };
// Update suppliers info // Update suppliers info
for (let psi_index in products[p_index].suppliersinfo) { for (let psi_index in products[p_index].suppliersinfo) {
const updated_psi = updated_suppliersinfo.find(psi => psi.supplier_id == products[p_index].suppliersinfo[psi_index].supplier_id); const updated_psi = updated_suppliersinfo.find(psi => psi.supplier_id == products[p_index].suppliersinfo[psi_index].supplier_id);
if (updated_psi !== undefined) { if (updated_psi !== undefined) {
products[p_index].suppliersinfo[psi_index].package_qty = updated_psi.package_qty; products[p_index].suppliersinfo[psi_index].package_qty = updated_psi.package_qty;
products[p_index].suppliersinfo[psi_index].price = updated_psi.price; products[p_index].suppliersinfo[psi_index].price = updated_psi.price;
...@@ -279,6 +283,7 @@ function add_supplier() { ...@@ -279,6 +283,7 @@ function add_supplier() {
selected_suppliers.push(supplier); selected_suppliers.push(supplier);
let url = "/orders/get_supplier_products"; let url = "/orders/get_supplier_products";
url += "?sids=" + encodeURIComponent(supplier.id); url += "?sids=" + encodeURIComponent(supplier.id);
// Fetch supplier products // Fetch supplier products
...@@ -486,6 +491,7 @@ function _compute_total_values_by_supplier() { ...@@ -486,6 +491,7 @@ function _compute_total_values_by_supplier() {
let supplier_index = selected_suppliers.findIndex(s => s.id == supinfo.supplier_id); let supplier_index = selected_suppliers.findIndex(s => s.id == supinfo.supplier_id);
let product_supplier_value = ('qty' in supinfo) ? supinfo.qty * supinfo.package_qty * supinfo.price : 0; let product_supplier_value = ('qty' in supinfo) ? supinfo.qty * supinfo.package_qty * supinfo.price : 0;
selected_suppliers[supplier_index].total_value += product_supplier_value; selected_suppliers[supplier_index].total_value += product_supplier_value;
} }
} }
...@@ -590,7 +596,8 @@ function generate_inventory() { ...@@ -590,7 +596,8 @@ function generate_inventory() {
modal_create_inventory.html(), modal_create_inventory.html(),
() => { () => {
if (is_time_to('validate_generate_inventory')) { if (is_time_to('validate_generate_inventory')) {
$('#do_inventory').empty().append(`<i class="fas fa-spinner fa-spin"></i>`); $('#do_inventory').empty()
.append(`<i class="fas fa-spinner fa-spin"></i>`);
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: "/inventory/generate_inventory_list", url: "/inventory/generate_inventory_list",
...@@ -603,7 +610,8 @@ function generate_inventory() { ...@@ -603,7 +610,8 @@ function generate_inventory() {
// Give time for modal to fade // Give time for modal to fade
setTimeout(function() { setTimeout(function() {
$('#do_inventory').empty().append(`Faire un inventaire`); $('#do_inventory').empty()
.append(`Faire un inventaire`);
$('#do_inventory').notify( $('#do_inventory').notify(
"Inventaire créé !", "Inventaire créé !",
{ {
...@@ -614,7 +622,8 @@ function generate_inventory() { ...@@ -614,7 +622,8 @@ function generate_inventory() {
}, 200); }, 200);
}, },
error: function(data) { error: function(data) {
$('#do_inventory').empty().append(`Faire un inventaire`); $('#do_inventory').empty()
.append(`Faire un inventaire`);
let msg = "erreur serveur lors de la création de l'inventaire". let msg = "erreur serveur lors de la création de l'inventaire".
err = {msg: msg, ctx: 'generate_inventory'}; err = {msg: msg, ctx: 'generate_inventory'};
...@@ -778,17 +787,19 @@ function create_orders() { ...@@ -778,17 +787,19 @@ function create_orders() {
} else { } else {
// Default date : tomorrow // Default date : tomorrow
let date_object = new Date(); let date_object = new Date();
date_object.setDate(date_object.getDate() + 1); date_object.setDate(date_object.getDate() + 1);
// Get ISO format bare string // Get ISO format bare string
formatted_date = date_object.toISOString().replace('T', ' ').split('.')[0]; formatted_date = date_object.toISOString().replace('T', ' ')
.split('.')[0];
} }
// Create an entry for this supplier // Create an entry for this supplier
orders_data.suppliers_data[supplier.id] = { orders_data.suppliers_data[supplier.id] = {
date_planned: formatted_date, date_planned: formatted_date,
lines: [] lines: []
} };
} }
openModal(); openModal();
...@@ -858,7 +869,7 @@ function create_orders() { ...@@ -858,7 +869,7 @@ function create_orders() {
order_doc._deleted = true; order_doc._deleted = true;
update_cdb_order().then(() => { update_cdb_order().then(() => {
update_order_selection_screen(); update_order_selection_screen();
}) });
reset_data(); reset_data();
switch_screen('orders_created'); switch_screen('orders_created');
closeModal(); closeModal();
...@@ -934,7 +945,7 @@ function goto_main_screen(doc) { ...@@ -934,7 +945,7 @@ function goto_main_screen(doc) {
update_cdb_order(); update_cdb_order();
update_main_screen(); update_main_screen();
switch_screen(); switch_screen();
}) });
} }
function back() { function back() {
...@@ -980,6 +991,7 @@ function display_suppliers() { ...@@ -980,6 +991,7 @@ function display_suppliers() {
const clicked_supplier = selected_suppliers.find(s => s.id == supplier_id); const clicked_supplier = selected_suppliers.find(s => s.id == supplier_id);
let modal_remove_supplier = $('#templates #modal_remove_supplier'); let modal_remove_supplier = $('#templates #modal_remove_supplier');
modal_remove_supplier.find(".supplier_name").text(clicked_supplier.display_name); modal_remove_supplier.find(".supplier_name").text(clicked_supplier.display_name);
openModal( openModal(
...@@ -1037,6 +1049,7 @@ function _compute_product_data(product) { ...@@ -1037,6 +1049,7 @@ function _compute_product_data(product) {
if (order_doc.coverage_days !== null) { if (order_doc.coverage_days !== null) {
let qty_not_covered = 0; let qty_not_covered = 0;
let days_covered = 0; let days_covered = 0;
if (product.daily_conso !== 0) { if (product.daily_conso !== 0) {
qty_not_covered = product.daily_conso * order_doc.coverage_days - product.qty_available - product.incoming_qty - purchase_qty; qty_not_covered = product.daily_conso * order_doc.coverage_days - product.qty_available - product.incoming_qty - purchase_qty;
qty_not_covered = -Math.ceil(qty_not_covered); // round up, so if a value is not fully covered display it qty_not_covered = -Math.ceil(qty_not_covered); // round up, so if a value is not fully covered display it
...@@ -1266,8 +1279,20 @@ function display_products(params) { ...@@ -1266,8 +1279,20 @@ function display_products(params) {
stripeClasses: [], // Remove datatable cells coloring stripeClasses: [], // Remove datatable cells coloring
orderClasses: false, orderClasses: false,
aLengthMenu: [ aLengthMenu: [
[25, 50, 100, 200, -1], [
[25, 50, 100, 200, "Tout"] 25,
50,
100,
200,
-1
],
[
25,
50,
100,
200,
"Tout"
]
], ],
iDisplayLength: -1, iDisplayLength: -1,
scrollX: true, scrollX: true,
...@@ -1469,8 +1494,10 @@ function display_total_values() { ...@@ -1469,8 +1494,10 @@ function display_total_values() {
_compute_total_values_by_supplier(); _compute_total_values_by_supplier();
let order_total_value = 0; let order_total_value = 0;
for (let supplier of selected_suppliers) { for (let supplier of selected_suppliers) {
$(`#pill_supplier_${supplier.id}`).find('.supplier_total_value').text(parseFloat(supplier.total_value).toFixed(2)); $(`#pill_supplier_${supplier.id}`).find('.supplier_total_value')
.text(parseFloat(supplier.total_value).toFixed(2));
order_total_value += supplier.total_value; order_total_value += supplier.total_value;
} }
...@@ -1528,6 +1555,7 @@ function update_order_selection_screen() { ...@@ -1528,6 +1555,7 @@ function update_order_selection_screen() {
$(".order_pill").off(); $(".order_pill").off();
let existing_orders_container = $("#existing_orders"); let existing_orders_container = $("#existing_orders");
existing_orders_container.empty(); existing_orders_container.empty();
$('#new_order_name').val(''); $('#new_order_name').val('');
...@@ -1536,6 +1564,7 @@ function update_order_selection_screen() { ...@@ -1536,6 +1564,7 @@ function update_order_selection_screen() {
} else { } else {
for (let row of result.rows) { for (let row of result.rows) {
let template = $("#templates #order_pill_template"); let template = $("#templates #order_pill_template");
template.find(".pill_order_name").text(row.id); template.find(".pill_order_name").text(row.id);
existing_orders_container.append(template.html()); existing_orders_container.append(template.html());
...@@ -1699,6 +1728,7 @@ $(document).ready(function() { ...@@ -1699,6 +1728,7 @@ $(document).ready(function() {
$('#create_orders').on('click', function() { $('#create_orders').on('click', function() {
if (is_time_to('create_orders', 1000)) { if (is_time_to('create_orders', 1000)) {
let modal_create_order = $('#templates #modal_create_order'); let modal_create_order = $('#templates #modal_create_order');
modal_create_order.find('.suppliers_date_planned_area').empty(); modal_create_order.find('.suppliers_date_planned_area').empty();
for (let supplier of selected_suppliers) { for (let supplier of selected_suppliers) {
...@@ -1724,7 +1754,8 @@ $(document).ready(function() { ...@@ -1724,7 +1754,8 @@ $(document).ready(function() {
// Add id to input once modal is displayed // Add id to input once modal is displayed
for (let supplier of selected_suppliers) { for (let supplier of selected_suppliers) {
$(`#modal #container_date_planned_supplier_${supplier.id}`).find(".supplier_date_planned").attr('id', `date_planned_supplier_${supplier.id}`); $(`#modal #container_date_planned_supplier_${supplier.id}`).find(".supplier_date_planned")
.attr('id', `date_planned_supplier_${supplier.id}`);
} }
$("#modal .supplier_date_planned") $("#modal .supplier_date_planned")
......
...@@ -230,8 +230,11 @@ ...@@ -230,8 +230,11 @@
- ENTRANCE_EXTRA_BUTTONS_DISPLAY = False (no button is shown above shift coop. list) (True if not set) - ENTRANCE_EXTRA_BUTTONS_DISPLAY = False (no button is shown above shift coop. list) (True if not set)
- ENTRANCE_EASY_SHIFT_VALIDATE = False (default value) When set to True allow coop to identify and have 1 point (only if FTOP) - ENTRANCE_EASY_SHIFT_VALIDATE = False (default value)
When set to True allow coop to identify and have 1 point (only if FTOP)
- ENTRANCE_ADD_PT_EVENT_NAME = 'Add 1 point name throught easy validate' (default : 'Validation service comité'')
### Member space ### Member space
- EM_URL = '' - EM_URL = ''
......
...@@ -59,10 +59,9 @@ function post_form(url, data, callback) { ...@@ -59,10 +59,9 @@ function post_form(url, data, callback) {
$.post(ajax_params) $.post(ajax_params)
.done(function(rData) { .done(function(rData) {
callback(null, rData); callback(null, rData);
}) })
.fail(function(err) { .fail(function(err) {
console.log(err); callback(err, {});
}); });
} }
......
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