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(
...@@ -327,8 +328,16 @@ function update_members_makeups(member_ids, action) { ...@@ -327,8 +328,16 @@ function update_members_makeups(member_ids, action) {
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();
}, },
......
...@@ -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();
......
...@@ -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,6 +327,7 @@ class CagetteShift(models.Model): ...@@ -327,6 +327,7 @@ class CagetteShift(models.Model):
Else, create a 28 days delay. Else, create a 28 days delay.
Args: Args:
data
idPartner: int idPartner: int
start_date: string date at iso format (eg. "2019-11-19") start_date: string date at iso format (eg. "2019-11-19")
Date from which the delay end date is calculated Date from which the delay end date is calculated
...@@ -335,6 +336,7 @@ class CagetteShift(models.Model): ...@@ -335,6 +336,7 @@ class CagetteShift(models.Model):
Should be inferior than start_date. Should be inferior than start_date.
(at creation only: odoo ignores delays if today's not inside) (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