Commit 349a141a by Damien Moulard

BDM: increase member delay

parent 53918063
Pipeline #2429 passed with stage
in 1 minute 26 seconds
...@@ -8,7 +8,7 @@ from members.models import CagetteMember ...@@ -8,7 +8,7 @@ from members.models import CagetteMember
from shifts.models import CagetteServices from shifts.models import CagetteServices
from shifts.models import CagetteShift from shifts.models import CagetteShift
from outils.common import MConfig from outils.common import MConfig
from datetime import datetime from datetime import datetime, date
default_msettings = {'msg_accueil': {'title': 'Message borne accueil', default_msettings = {'msg_accueil': {'title': 'Message borne accueil',
'type': 'textarea', 'type': 'textarea',
...@@ -419,9 +419,28 @@ def regenerate_member_delay(request): ...@@ -419,9 +419,28 @@ def regenerate_member_delay(request):
""" From BDM admin, close existing extension if exists & recreate for 6 months """ """ From BDM admin, close existing extension if exists & recreate for 6 months """
res = {} res = {}
is_connected_user = CagetteUser.are_credentials_ok(request) is_connected_user = CagetteUser.are_credentials_ok(request)
if is_connected_user is True: if is_connected_user is True:
data = json.loads(request.body.decode()) raw_data = json.loads(request.body.decode())
print(data["member_id"])
# Close extension if has one
member_id = int(raw_data["member_id"])
cm = CagetteMember(member_id)
cm.close_extension()
# Recreate starting now
cs = CagetteShift()
data = {
"idPartner": member_id,
"start_date": date.today().isoformat()
}
duration = raw_data["duration"]
ext_name = "Délai étendue depuis l'admin BDM"
res["create_delay"] = cs.create_delay(data=data, duration=duration, ext_name=ext_name)
res["member_data"] = CagetteMembers.get_makeups_members([member_id])[0]
response = JsonResponse(res, safe=False) response = JsonResponse(res, safe=False)
else: else:
......
...@@ -1007,14 +1007,7 @@ class CagetteMember(models.Model): ...@@ -1007,14 +1007,7 @@ class CagetteMember(models.Model):
if changing_shift is False: if changing_shift is False:
# Close extensions if just unsubscribing, else keep it # Close extensions if just unsubscribing, else keep it
c = [['partner_id', '=', self.id], ['date_start', '<=', now], ['date_stop', '>=', now]] res["close_extensions"] = self.close_extension()
f = ['id']
res_ids = self.o_api.search_read("shift.extension", c, f)
ids = [d['id'] for d in res_ids]
if ids:
f = {'date_stop': now}
res["close_extensions"] = self.o_api.update('shift.extension', ids, f)
return res return res
...@@ -1035,6 +1028,20 @@ class CagetteMember(models.Model): ...@@ -1035,6 +1028,20 @@ class CagetteMember(models.Model):
return res return res
def close_extension(self):
now = datetime.datetime.now().isoformat()
c = [['partner_id', '=', self.id], ['date_start', '<=', now], ['date_stop', '>=', now]]
f = ['id']
res_ids = self.o_api.search_read("shift.extension", c, f)
ids = [d['id'] for d in res_ids]
if ids:
f = {'date_stop': now}
return self.o_api.update('shift.extension', ids, f)
else:
return False
class CagetteMembers(models.Model): class CagetteMembers(models.Model):
"""Class to manage operations on all members or part of them.""" """Class to manage operations on all members or part of them."""
...@@ -1257,9 +1264,13 @@ class CagetteMembers(models.Model): ...@@ -1257,9 +1264,13 @@ class CagetteMembers(models.Model):
return res return res
@staticmethod @staticmethod
def get_makeups_members(): def get_makeups_members(ids=[]):
api = OdooAPI() api = OdooAPI()
cond = [['makeups_to_do','>', 0]] cond = [['makeups_to_do','>', 0]]
if len(ids) > 0:
cond.append(['id','in', ids])
fields = ['id', 'name', 'display_std_points', 'display_ftop_points', 'shift_type', 'makeups_to_do', 'date_delay_stop'] fields = ['id', 'name', 'display_std_points', 'display_ftop_points', 'shift_type', 'makeups_to_do', 'date_delay_stop']
res = api.search_read('res.partner', cond, fields) res = api.search_read('res.partner', cond, fields)
return res return res
......
...@@ -237,6 +237,7 @@ function display_makeups_members() { ...@@ -237,6 +237,7 @@ function display_makeups_members() {
const member = makeups_members.find(m => m.id == member_id); const member = makeups_members.find(m => m.id == member_id);
let modal = $("#modal_extend_delay_template"); let modal = $("#modal_extend_delay_template");
modal.find(".member_name").text(member.name); modal.find(".member_name").text(member.name);
openModal( openModal(
...@@ -322,13 +323,21 @@ function update_members_makeups(member_ids, action) { ...@@ -322,13 +323,21 @@ function update_members_makeups(member_ids, action) {
/** /**
* Send request to extend the member's delay, or create one if none open. * Send request to extend the member's delay, or create one if none open.
* @param {Object} member * @param {Object} member
*/ */
function extend_member_delay(member) { function extend_member_delay(member) {
openModal(); openModal();
let today = new Date();
let today_plus_six_month = new Date();
today_plus_six_month.setMonth(today_plus_six_month.getMonth()+6);
const diff_time = Math.abs(today_plus_six_month - today);
const diff_days = Math.ceil(diff_time / (1000 * 60 * 60 * 24));
let data = { let data = {
member_id: member.id member_id: member.id,
duration: diff_days
}; };
$.ajax({ $.ajax({
...@@ -338,7 +347,11 @@ function extend_member_delay(member) { ...@@ -338,7 +347,11 @@ function extend_member_delay(member) {
dataType:"json", dataType:"json",
traditional: true, traditional: true,
contentType: "application/json; charset=utf-8", contentType: "application/json; charset=utf-8",
success: function() { success: function(result) {
let i = makeups_members.findIndex(m => m.id == result.member_data.id);
makeups_members[i].date_delay_stop = result.member_data.date_delay_stop;
display_makeups_members(); display_makeups_members();
closeModal(); closeModal();
}, },
......
...@@ -188,39 +188,39 @@ function set_subscription_area() { ...@@ -188,39 +188,39 @@ function set_subscription_area() {
retrieve_and_draw_shift_tempates({shift_listener: false}); retrieve_and_draw_shift_tempates({shift_listener: false});
$("#shifts_calendar_area").show(); $("#shifts_calendar_area").show();
// Cancel listeners from subscription page & set custom listeners // Cancel listeners from subscription page & set custom listeners
$(document).off("click", "#shifts_calendar_area button[data-select='Volant']"); $(document).off("click", "#shifts_calendar_area button[data-select='Volant']");
$(document).on("click", "#shifts_calendar_area button[data-select='Volant']", function() { $(document).on("click", "#shifts_calendar_area button[data-select='Volant']", function() {
// Subscribe to comitee/ftop shift // Subscribe to comitee/ftop shift
msg = (has_committe_shift === "True") msg = (has_committe_shift === "True")
? `Inscrire ${selected_member.name} au service des Comités ?` ? `Inscrire ${selected_member.name} au service des Comités ?`
: `Inscrire ${selected_member.name} en Volant ?`; : `Inscrire ${selected_member.name} en Volant ?`;
openModal( openModal(
msg, msg,
() => { () => {
shift_subscrition(2); shift_subscrition(2);
}, },
"Confirmer", "Confirmer",
false false
); );
}); });
$(document).off("click", ".shift"); $(document).off("click", ".shift");
$(document).on("click", ".shift", function() { $(document).on("click", ".shift", function() {
// Subscribe to shift template // Subscribe to shift template
let shift_template_id = select_shift_among_compact(null, this, false); // method from common.js let shift_template_id = select_shift_among_compact(null, this, false); // method from common.js
let shift_template_data = shift_templates[shift_template_id].data;// shift_templates: var from common.js let shift_template_data = shift_templates[shift_template_id].data;// shift_templates: var from common.js
let shift_template_name = get_shift_name(shift_template_data); let shift_template_name = get_shift_name(shift_template_data);
openModal( openModal(
`Inscrire ${selected_member.name} au créneau ${shift_template_name} ?`, `Inscrire ${selected_member.name} au créneau ${shift_template_name} ?`,
() => { () => {
shift_subscrition(1, parseInt(shift_template_id), shift_template_name); shift_subscrition(1, parseInt(shift_template_id), shift_template_name);
}, },
"Confirmer", "Confirmer",
false false
); );
}); });
} }
......
...@@ -127,7 +127,7 @@ function create_new_coop() { ...@@ -127,7 +127,7 @@ function create_new_coop() {
$('.chosen_associate_area').hide(); $('.chosen_associate_area').hide();
$('.member_choice').removeClass('choice_active'); $('.member_choice').removeClass('choice_active');
$(".remove_binome_icon").on("click", hide_chosen_associate); $(".remove_binome_icon").on("click", hide_chosen_associate);
$('input[name="binome"]').prop('checked',false); $('input[name="binome"]').prop('checked', false);
local_in_process = getLocalInProcess(); local_in_process = getLocalInProcess();
if (getLocalInProcess().length > 0) { if (getLocalInProcess().length > 0) {
empty_waiting_local_processes(); empty_waiting_local_processes();
...@@ -270,7 +270,7 @@ function store_new_coop(event) { ...@@ -270,7 +270,7 @@ function store_new_coop(event) {
} }
if ($('#associate_area').is(':visible')) { if ($('#associate_area').is(':visible')) {
// If user choose yes for binome, a type of association must be selected // If user choose yes for binome, a type of association must be selected
let associated_data_selected = false; let associated_data_selected = false;
if ( if (
......
...@@ -318,7 +318,7 @@ class CagetteShift(models.Model): ...@@ -318,7 +318,7 @@ class CagetteShift(models.Model):
coop_logger.error("Reopen shift : %s", str(e)) coop_logger.error("Reopen shift : %s", str(e))
return response return response
def create_delay(self, data, duration=28): def create_delay(self, data, duration=28, ext_name="Extension créée depuis l'espace membre"):
""" """
Create a delay for a member. Create a delay for a member.
If no duration is specified, a delay is by default 28 days from the given start_date. If no duration is specified, a delay is by default 28 days from the given start_date.
...@@ -327,14 +327,16 @@ class CagetteShift(models.Model): ...@@ -327,14 +327,16 @@ class CagetteShift(models.Model):
Else, create a 28 days delay. Else, create a 28 days delay.
Args: Args:
idPartner: int data
start_date: string date at iso format (eg. "2019-11-19") idPartner: int
Date from which the delay end date is calculated start_date: string date at iso format (eg. "2019-11-19")
(optionnal) extension_beginning: string date at iso format Date from which the delay end date is calculated
If specified, will be the actual starting date of the extension. (optionnal) extension_beginning: string date at iso format
Should be inferior than start_date. If specified, will be the actual starting date of the extension.
(at creation only: odoo ignores delays if today's not inside) Should be inferior than start_date.
(at creation only: odoo ignores delays if today's not inside)
duration: nb of days duration: nb of days
ext_name: will be displayed in odoo extensions list
""" """
action = 'create' action = 'create'
...@@ -392,7 +394,7 @@ class CagetteShift(models.Model): ...@@ -392,7 +394,7 @@ class CagetteShift(models.Model):
"type_id": ext_type_id, "type_id": ext_type_id,
"date_start": starting_date.isoformat(), "date_start": starting_date.isoformat(),
"date_stop": ending_date.isoformat(), "date_stop": ending_date.isoformat(),
"name": "Extension créée depuis l'espace membre" "name": ext_name
} }
response = self.o_api.create('shift.extension', fields) response = self.o_api.create('shift.extension', fields)
......
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