Commit e0331aec by Etienne Freiss

Merge branch 'evolution_bdm' of…

Merge branch 'evolution_bdm' of https://gl.cooperatic.fr/cooperatic-foodcoops/third-party into ticket_1677
parents baa689f0 10ef839e
Pipeline #1502 passed with stage
in 1 minute 33 seconds
......@@ -345,12 +345,28 @@ def get_makeups_members(request):
return JsonResponse({ 'res' : res })
def update_members_makeups(request):
""" Décrémente les rattrapages des membres passés dans la requête """
""" Met à jour les rattrapages des membres passés dans la requête """
res = {}
is_connected_user = CagetteUser.are_credentials_ok(request)
if is_connected_user is True:
members_data = json.loads(request.body.decode())
res["res"] = CagetteMembers.update_members_makeups(members_data)
res["res"] = []
for member_data in members_data:
cm = CagetteMember(int(member_data["member_id"]))
res["res"].append(cm.update_member_makeups(member_data))
if "decrement_pts" in member_data and member_data["decrement_pts"] is True:
data = {
'name': "Ajout manuel d'un rattrapage depuis l'admin BDM",
'shift_id': False,
'type': member_data["member_shift_type"],
'partner_id': int(member_data["member_id"]),
'point_qty': -1
}
cm.update_member_points(data)
response = JsonResponse(res)
else:
......
......@@ -61,21 +61,22 @@ class CagetteMember(models.Model):
image = res[0]['image_medium']
return image
# def update_member_points(self, status):
# fields = {'name': reason,
# 'shift_id': False,
# 'type': stype,
# 'partner_id': self.id,
# 'point_qty': pts
# }
# return self.o_api.create('shift.counter.event', fields)
# if status not in ["suspended", "delay", "up_to_date", "unsuscribed", "alert"]:
# raise Exception("Bad status")
# f = { 'cooperative_state': "delay" }
# return self.o_api.update('res.partner', [self.id], f)
def update_member_points(self, data):
"""
ex:
data = {
'name': reason,
'shift_id': False,
'type': stype,
'partner_id': self.id,
'point_qty': pts
}
"""
try:
return self.o_api.create('shift.counter.event', data)
except Exception as e:
print(str(e))
# # # BDM
......@@ -826,6 +827,19 @@ class CagetteMember(models.Model):
except:
return None
def update_member_makeups(self, member_data):
api = OdooAPI()
res = {}
f = { 'makeups_to_do': int(member_data["target_makeups_nb"]) }
res_item = api.update('res.partner', [self.id], f)
res = {
'mid': self.id,
'update': res_item
}
return res
class CagetteMembers(models.Model):
"""Class to manage operations on all members or part of them."""
......@@ -1051,25 +1065,10 @@ class CagetteMembers(models.Model):
def get_makeups_members():
api = OdooAPI()
cond = [['makeups_to_do','>', 0]]
fields = ['id', 'name', 'makeups_to_do']
fields = ['id', 'name', 'makeups_to_do','shift_type']
res = api.search_read('res.partner', cond, fields)
return res
@staticmethod
def update_members_makeups(members_data):
api = OdooAPI()
res = []
for member_data in members_data:
member_id = int(member_data["member_id"])
f = { 'makeups_to_do': int(member_data["target_makeups_nb"]) }
res_item = api.update('res.partner', [member_id], f)
res.append({
'mid': member_id,
'update': res_item
})
return res
class CagetteServices(models.Model):
"""Class to handle cagette Odoo services."""
......@@ -1174,7 +1173,7 @@ class CagetteServices(models.Model):
dateutil.parser.parse(s['date_begin_tz']).replace(tzinfo=None)
).total_seconds() / 60 > default_acceptable_minutes_after_shift_begins
if with_members is True:
cond = [['id', 'in', s['registration_ids']], ['state', '!=', 'cancel']]
cond = [['id', 'in', s['registration_ids']], ['state', 'not in', ['cancel', 'waiting', 'draft']]]
fields = ['partner_id', 'shift_type', 'state', 'is_late']
members = api.search_read('shift.registration', cond, fields)
s['members'] = sorted(members, key=lambda x: x['partner_id'][0])
......
......@@ -123,7 +123,7 @@ function display_makeups_members() {
"Tout"
]
],
iDisplayLength: -1,
iDisplayLength: 25,
oLanguage: {
"sProcessing": "Traitement en cours...",
"sSearch": "Rechercher dans le tableau",
......@@ -280,9 +280,13 @@ function increment_makeups(member_ids) {
member_index = makeups_members.findIndex(m => m.id == mid);
makeups_members[member_index].makeups_to_do += 1;
console.log(makeups_members[member_index]);
data.push({
member_id: mid,
target_makeups_nb: makeups_members[member_index].makeups_to_do
target_makeups_nb: makeups_members[member_index].makeups_to_do,
decrement_pts: (makeups_members[member_index].makeups_to_do == 1),
member_shift_type: makeups_members[member_index].shift_type
});
}
......@@ -349,7 +353,8 @@ function display_possible_members() {
makeups_members.unshift({
id: member.id,
name: member.name,
makeups_to_do: 0
makeups_to_do: 0,
shift_type: member.shift_type
});
openModal(
......
......@@ -204,33 +204,23 @@ body {
color: #d9534f;
}
.member_shift_name_area {
margin-top: 10px;
}
.member_shift_name_area,
.member_coop_number_area {
margin-bottom: 10px;
}
.member_shift_name_area,
.member_coop_number_area,
.member_associated_partner_area {
font-size: 1.9rem;
line-height: 1.3;
}
@media screen and (max-width: 380px) {
.member_shift_name_area,
.member_coop_number_area,
.member_associated_partner_area {
font-size: 1.6rem;
}
}
@media screen and (max-width: 992px) {
.member_shift_name_area,
.member_coop_number_area,
.member_associated_partner_area {
display: flex;
flex-direction: column;
......
......@@ -276,6 +276,7 @@ def request_delay(request):
if 'verif_token' in request.POST:
if Verification.verif_token(request.POST.get('verif_token'), int(request.POST.get('idPartner'))) is True:
cs = CagetteShift()
partner_id = int(request.POST['idPartner'])
use_new_members_space = getattr(settings, 'USE_NEW_MEMBERS_SPACE', False)
if use_new_members_space is True:
......@@ -285,7 +286,7 @@ def request_delay(request):
return JsonResponse(res, status=403)
data = {
"idPartner": int(request.POST['idPartner']),
"idPartner": partner_id,
"start_date" : request.POST['start_date']
}
if ('extension_beginning' in request.POST):
......@@ -299,6 +300,30 @@ def request_delay(request):
try:
new_id = cs.create_delay(data, duration)
if (new_id):
try:
cm = CagetteMember(partner_id)
# Add 0 pt to counter so odoo updates member status
data = {
'name': "Forcer l'entrée en délai",
'shift_id': False,
'type': "standard",
'partner_id': partner_id,
'point_qty': 0
}
cm.update_member_points(data)
data = {
'name': "Forcer l'entrée en délai",
'shift_id': False,
'type': "ftop",
'partner_id': partner_id,
'point_qty': 0
}
cm.update_member_points(data)
except Exception as e:
print(str(e))
response = {'result': True}
else:
coop_logger.error("request delay : %s, %s", str(new_id), str(data))
......
......@@ -216,7 +216,7 @@
</div>
<div class="grp_text">
Si tu ne comprends pas pourquoi tu es désinscrit.e ou suspendu.e, tu peux le signaler au bureau des membres pour qu'il règle ton problème. N'hésite pas à renseigner un maximum d'information sur ta situation pour nous aider à régler ton problème : <br />
Si tu ne comprends pas pourquoi tu es désinscrit.e ou en rattrapage, tu peux le signaler au bureau des membres pour qu'il règle ton problème. N'hésite pas à renseigner un maximum d'information sur ta situation pour nous aider à régler ton problème : <br />
</div>
<div class="faq_link_button_area">
<a
......
......@@ -57,9 +57,9 @@
<div id="calendar_explaination_template">
<h4>Légende du calendrier</h4>
<a class="example-event fc-daygrid-event fc-daygrid-block-event fc-h-event fc-event fc-event-start fc-event-end fc-event-future shift_booked"><div class="fc-event-main"><div class="fc-event-main-frame"><div class="fc-event-time">06:00</div><div class="fc-event-title-container"><div class="fc-event-title fc-sticky">&nbsp;-- 9/12</div></div></div></div></a>
<a class="example-event fc-daygrid-event fc-daygrid-block-event fc-h-event fc-event fc-event-start fc-event-end fc-event-future shift_booked"><div class="fc-event-main"><div class="fc-event-main-frame"><div class="fc-event-time">06:00</div><div class="fc-event-title-container"><div class="fc-event-title fc-sticky">&nbsp;- 9/12</div></div></div></div></a>
<p>Un service colorié en noir : je suis déjà inscrit.e à ce service.</p>
<a class="example-event fc-daygrid-event fc-daygrid-block-event fc-h-event fc-event fc-event-start fc-event-end fc-event-future shift_less_alf"><div class="fc-event-main"><div class="fc-event-main-frame"><div class="fc-event-time">10:45</div><div class="fc-event-title-container"><div class="fc-event-title fc-sticky">&nbsp;-- 3/12</div></div></div></div></a>
<a class="example-event fc-daygrid-event fc-daygrid-block-event fc-h-event fc-event fc-event-start fc-event-end fc-event-future shift_less_alf"><div class="fc-event-main"><div class="fc-event-main-frame"><div class="fc-event-time">10:45</div><div class="fc-event-title-container"><div class="fc-event-title fc-sticky">&nbsp;- 3/12</div></div></div></div></a>
<p>Un service colorié en bleu : je peux m'inscrire à ce service.</p>
<p>3/12 <i class="arrow_explanation_numbers fas fa-arrow-right"></i> il y a déjà 3 places réservées à ce service sur 12 disponibles.
<b>Plus le chiffre de gauche est petit, plus on a besoin de coopérateurs.rices à ce service !</b></p>
......
......@@ -41,9 +41,7 @@
Numéro de coop
</div>
<div class="my_info_line_right member_coop_number_area">
<div class="member_coop_number_area">
<span class="member_coop_number member_info"></span>
</div>
<span class="member_coop_number member_info"></span>
</div>
</div>
<div class="my_info_line member_email_line">
......@@ -105,4 +103,4 @@
</div>
</div>
</div>
</div>
\ No newline at end of file
</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