Commit 056fe5d4 by Damien Moulard

shifts exchange & choose makeups

parent 683fab8a
#shifts_exchange_content {
width: 95%;
margin: 3rem auto;
display: flex;
flex-direction: column;
}
#shifts_list {
flex-direction: column;
display: none;
width: min-content; /* ??? */
width: min-content;
max-width: 100%;
}
@media screen and (max-width:768px) {
#partner_shifts_list {
display: flex;
flex-direction: column;
align-items: center;
}
}
.selectable_shift_line {
display: flex;
align-items: center;
margin-left: 15px;
margin: 1rem 0;
margin: 0.75rem 0;
border-radius: 5px;
}
......@@ -21,14 +32,33 @@
margin-right: 10px;
}
/* .selectable_shift_line_text {
border: 2px solid #424242;
border-radius: 5px;
padding: 0.75rem;
} */
.selectable_shift_line.btn {
cursor: not-allowed;
}
#need_to_select_makeups_message {
display: none;
align-self: center;
background-color: #d9534f;
color: white;
margin: 0 1rem 1rem 1rem;
padding: 1rem 1.25rem;
text-align: center;
}
.makeups_warning {
margin-right: 3px;
}
@media screen and (max-width:768px) {
.select_makeups_message_block {
display: block;
}
}
#calendar {
margin: 3rem auto;
margin: 3rem 1rem;
display: none;
}
.fc .fc-event {
......@@ -36,6 +66,30 @@
margin: 1px 10px !important;
}
.fc-event.shift_booked {
background-color: #585858;
cursor: auto;
border-color: #585858;
}
.fc-list-event.shift_booked {
color: white;
}
#calendar .fc-list-table {
table-layout: auto;
}
.resp-header-toolbar {
display: flex;
flex-direction: column;
}
.resp-header-toolbar .fc-toolbar-chunk {
text-align: center;
margin: 0.25rem;
}
.date_old_shift, .time_old_shift, .date_new_shift, .time_new_shift {
font-weight: bold;
}
\ No newline at end of file
......@@ -18,23 +18,27 @@ $(document).ready(function() {
if (current_location !== "home") {
goto('home');
}
toggleHeader();
});
$('#nav_my_info').on('click', (e) => {
e.preventDefault();
if (current_location !== "my_info") {
goto('mes-infos');
}
toggleHeader();
});
$('#nav_my_shifts').on('click', (e) => {
e.preventDefault();
if (current_location !== "my_shifts") {
goto('mes-services');
}
toggleHeader();
});
$('#nav_shifts_exchange').on('click', (e) => {
e.preventDefault();
if (current_location !== "shifts_exchange") {
goto('echange-de-services');
}
toggleHeader();
});
});
......@@ -55,7 +55,7 @@ function prepare_server_data(data) {
f_date_shift_start = f_date_shift_start.charAt(0).toUpperCase() + f_date_shift_start.slice(1);
history_item.movement_date = f_date_shift_start + " - " + datetime_shift_start.toLocaleTimeString("fr-fr");
history_item.movement_date = f_date_shift_start + " - " + datetime_shift_start.toLocaleTimeString("fr-fr", time_options);
// Text replacements
history_item.name = (history_item.name === "Clôturer le service") ? "Décompte 28j" : history_item.name;//Clôlturer le service
......
......@@ -8,6 +8,7 @@ var base_location = null,
partner_history = null;
var date_options = {weekday: "long", year: "numeric", month: "long", day: "numeric"};
var time_options = {hour: '2-digit', minute:'2-digit'};
/* - Data */
......@@ -124,7 +125,7 @@ function prepare_shift_line_template(date_begin) {
f_date_shift_start = f_date_shift_start.charAt(0).toUpperCase() + f_date_shift_start.slice(1);
shift_line_template.find(".shift_line_date").text(f_date_shift_start);
shift_line_template.find(".shift_line_time").text(datetime_shift_start.toLocaleTimeString("fr-fr"));
shift_line_template.find(".shift_line_time").text(datetime_shift_start.toLocaleTimeString("fr-fr", time_options));
return shift_line_template;
}
......@@ -190,6 +191,8 @@ function init_my_info_data() {
}
$(document).ready(function() {
// TODO essayer de ne charger les js que au besoin
$.ajaxSetup({ headers: { "X-CSRFToken": getCookie('csrftoken') } });
// If partner is associated (attached), display the pair's main partner shift data
......
......@@ -60,6 +60,11 @@ footer { position: fixed;
margin: auto;
padding:15px;
}
@media screen and (max-width:768px) {
.overlay-content .mconfirm {
width: 100%;
}
}
.overlay-content .mconfirm button {margin:5px;}
.overlay-content > em {
color: #fff;
......
......@@ -300,3 +300,17 @@ class CagetteShift(models.Model):
def get_test(self, odooModel, cond, fieldsDatas):
return self.o_api.search_read(odooModel, cond, fieldsDatas, limit = 1000)
def decrement_makeups_to_do(self, partner_id):
""" Decrements partners makeups to do if > 0 """
cond = [['id', '=', partner_id]]
fields = ['makeups_to_do']
makeups_to_do = self.o_api.search_read('res.partner', cond, fields)[0]["makeups_to_do"]
if makeups_to_do > 0:
makeups_to_do -= 1
f = { "makeups_to_do": makeups_to_do }
return self.o_api.update('res.partner', partner_id, f)
else:
return "makeups already at 0"
\ No newline at end of file
......@@ -119,9 +119,6 @@ def get_list_shift_calendar(request, partner_id):
smax = int(value['seats_available']) + int(value['seats_reserved'])
title_prefix = ''
# if use_new_members_space is True:
# title_prefix = value["name"] + " ~ "
# else:
if len(value['address_id']) == 2 and ',' in value['address_id'][1]:
title_prefix = str(value['address_id'][1]).split(",")[1] + " -- "
......@@ -131,19 +128,31 @@ def get_list_shift_calendar(request, partner_id):
event["end"] = dateIsoUTC(value['date_begin_tz'])
if len(l) > 0:
event["className"] = "shift_booked"
if use_new_members_space is True:
event["classNames"] = ["shift_booked"]
else:
event["className"] = "shift_booked"
event["changed"] = False
# elif int(value['seats_reserved']) == int(value['seats_max']):
# event["className"] = "shift_full"
# event["changed"] = False
elif int(value['seats_reserved']) == 0:
event["className"] = "shift_empty"
if use_new_members_space is True:
event["classNames"] = ["shift_empty"]
else:
event["className"] = "shift_empty"
event["changed"] = True
elif _is_middled_filled_considered(value['seats_reserved'], smax) is True:
event["className"] = "shift_less_alf"
if use_new_members_space is True:
event["classNames"] = ["shift_less_alf"]
else:
event["className"] = "shift_less_alf"
event["changed"] = True
else:
event["className"] = "shift_other"
if use_new_members_space is True:
event["classNames"] = ["shift_other"]
else:
event["className"] = "shift_other"
event["changed"] = True
event["registration_ids"] = value['registration_ids']
......@@ -215,18 +224,36 @@ def add_shift(request):
cs = CagetteShift()
if 'idNewShift' in request.POST and 'idPartner' in request.POST:
data = {"idPartner": int(request.POST['idPartner']), "idShift":int(request.POST['idNewShift']), "in_ftop_team":request.POST['in_ftop_team']}
data = {
"idPartner": int(request.POST['idPartner']),
"idShift":int(request.POST['idNewShift']),
"in_ftop_team":request.POST['in_ftop_team']
}
#Insertion du nouveau shift
st_r_id = False
try:
st_r_id = cs.set_shift(data)
except Exception as e:
coop_logger.error("Add shift : %s, %s", str(e), str(data))
if st_r_id:
response = {'result': True}
else:
response = {'result': False}
# decrement makeups_to_do
res_decrement = False
try:
res_decrement = cs.decrement_makeups_to_do(int(request.POST['idPartner']))
except Exception as e:
coop_logger.error("Decrement makeups to do : %s, %s", str(e), str(data))
if res_decrement:
response["decrement_makeups"] = res_decrement
else:
response["decrement_makeups"] = False
else:
response = {'result': False}
return JsonResponse(response)
......
......@@ -42,6 +42,16 @@
</div>
</div>
</div>
<div id="modal_shift_exchange_template">
<div>Je suis sur le point d'échanger le service du : </div>
<div><span class="date_old_shift"></span> à <span class="time_old_shift"></span></div>
<div>par celui du : </div>
<div><span class="date_new_shift"></span> à <span class="time_new_shift"></span></div>
</div>
<div id="modal_add_shift_template">
<div>Je suis sur le point de m'inscrire au service du : <span class="date_new_shift"></span> à <span class="time_new_shift"></span></div>
</div>
</div>
</div>
......
<div id="shifts_exchange">
<div id="shifts_exchange_content">
<div id="need_to_select_makeups_message">
<span class="select_makeups_message_block">
<i class="fas fa-exclamation-triangle makeups_warning"></i>
J'ai <span class="makeups_nb"></span> rattrapage(s) à faire. </span>
<span class="select_makeups_message_block">Je dois les sélectionner dans le calendrier. </span>
<span class="select_makeups_message_block">Je ne peux pas échanger de service tant que je n'ai pas choisi mes rattrapages. </span>
</div>
<div id="partner_shifts_list">
Liste de mes services :
<h4>Liste de mes services :</h4>
<div class="loading-incoming-shifts">
<i class="fas fa-spinner fa-spin fa-lg"></i>
</div>
......
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