Commit 591893b7 by François C.

Fix wrong usage of partner_id when associated people id is used in affect_shift process

parent f96b09f0
Pipeline #1866 passed with stage
in 1 minute 30 seconds
...@@ -178,20 +178,30 @@ class CagetteShift(models.Model): ...@@ -178,20 +178,30 @@ class CagetteShift(models.Model):
def affect_shift(self, data): def affect_shift(self, data):
"""Affect shift to partner, his associate or both""" """Affect shift to partner, his associate or both"""
response = None response = None
cond = [['partner_id', '=', int(data['idPartner'])], # partner_id can be 'associated_people' one, which is never use as shift partner_id reference
# So, let's first retrieved data about the res.partner involved
cond = [['id', '=', int(data['idPartner'])]]
fields = ['parent_id']
partner = self.o_api.search_read('res.partner', cond, fields, 1)
if partner:
if partner[0]['parent_id']:
partner_id = partner[0]['parent_id'][0]
else:
partner_id = int(data['idPartner'])
cond = [['partner_id', '=', partner_id],
['id', '=', int(data['idShiftRegistration'])]] ['id', '=', int(data['idShiftRegistration'])]]
fields = ['id'] fields = ['id']
try: try:
print(cond) # make sure there is coherence between shift.registration id and partner_id (to avoid forged request)
shit_to_affect = self.o_api.search_read('shift.registration', cond, fields, 1) shit_to_affect = self.o_api.search_read('shift.registration', cond, fields, 1)
print(shit_to_affect)
if (len(shit_to_affect) == 1): if (len(shit_to_affect) == 1):
shift_res = shit_to_affect[0] shift_res = shit_to_affect[0]
print(shift_res)
fieldsDatas = { "associate_registered":data['affected_partner']} fieldsDatas = { "associate_registered":data['affected_partner']}
response = self.o_api.update('shift.registration', [shift_res['id']], fieldsDatas) response = self.o_api.update('shift.registration', [shift_res['id']], fieldsDatas)
except Exception as e: except Exception as e:
coop_logger.error("Reopen shift : %s", str(e)) coop_logger.error("Model affect shift : %s", str(e))
else:
coop_logger.error("Model affect shift nobody found : %s", str(cond))
return response return response
def cancel_shift(self, idsRegisteur): def cancel_shift(self, idsRegisteur):
......
...@@ -239,11 +239,14 @@ def affect_shift(request): ...@@ -239,11 +239,14 @@ def affect_shift(request):
if Verification.verif_token(request.POST.get('verif_token'), int(request.POST.get('idPartner'))) is True: if Verification.verif_token(request.POST.get('verif_token'), int(request.POST.get('idPartner'))) is True:
cs = CagetteShift() cs = CagetteShift()
if 'idShiftRegistration' in request.POST and 'affected_partner' in request.POST: if 'idShiftRegistration' in request.POST and 'affected_partner' in request.POST:
# if request is made by associated people, idPartner is it's id, not "master" res.partner
# it's will be handled in model's method (affect_shift)
data = { data = {
"idPartner": int(request.POST['idPartner']), "idPartner": int(request.POST['idPartner']),
"idShiftRegistration": int(request.POST['idShiftRegistration']), "idShiftRegistration": int(request.POST['idShiftRegistration']),
"affected_partner": request.POST['affected_partner'], "affected_partner": request.POST['affected_partner'],
} }
st_r_id = None
try: try:
st_r_id = cs.affect_shift(data) st_r_id = cs.affect_shift(data)
except Exception as e: except Exception as e:
......
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