From e4596cbda0c848f52387311cfc2560d68eea31c1 Mon Sep 17 00:00:00 2001 From: eloyoussef Date: Wed, 28 Feb 2018 02:06:26 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20du=20fonction=20de=20bascul?= =?UTF-8?q?ement=20automatique=20depuis=20membre=20:=20utilisation=20vals?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- golem_activity_queue/models/golem_activity.py | 80 ++++++---- .../models/golem_activity_queue.py | 4 +- golem_activity_queue/models/golem_member.py | 146 ++++++++--------- .../views/golem_activity_queue_views.xml | 149 +++++++++--------- .../views/golem_activity_views.xml | 46 +++--- .../views/golem_member_views.xml | 4 +- ...golem_activity_automated_queue_activate.py | 6 +- ...ctivity_automated_queue_activate_views.xml | 2 +- .../wizard/golem_activity_queue_choose.py | 13 +- .../golem_activity_queue_choose_views.xml | 6 +- 10 files changed, 221 insertions(+), 235 deletions(-) diff --git a/golem_activity_queue/models/golem_activity.py b/golem_activity_queue/models/golem_activity.py index b1fd207..f317df7 100644 --- a/golem_activity_queue/models/golem_activity.py +++ b/golem_activity_queue/models/golem_activity.py @@ -26,18 +26,19 @@ class GolemActivity(models.Model): #ajout d'un champs O2M vers activity_id de golem.activity.queue activity_queue_ids = fields.One2many('golem.activity.queue', - 'activity_id','Pending registration') + 'activity_id', 'Pending registration') # un booleen pour determiner si une fille d'attente est autorisé queue_allowed = fields.Boolean(default=True, readonly=True) # un booleen pour automatisé l'inscription sur une activité depuis la file d'attente - automated_registration_from_queue = fields.Boolean(default=True, readonly=True) + auto_registration_from_queue = fields.Boolean(default=True, readonly=True) #ajout d'un champs pour calculer le nombre d'inscription en file d'attente - queue_activity_number = fields.Integer(compute="_queue_activity_number", + queue_activity_number = fields.Integer(compute="_compute_queue_activity_number", store=True, string='Pending registration number') @api.multi - def automated_registration_from_queue_toggle(self): + def auto_registration_from_queue_toggle(self): + """ switch registration from queueu mode """ for activity in self: - activity.automated_registration_from_queue = not activity.automated_registration_from_queue + activity.auto_registration_from_queue = not activity.auto_registration_from_queue @api.multi def write(self, vals): @@ -65,7 +66,7 @@ class GolemActivity(models.Model): #mettre à jour le status d'activité remplis sur chaque attente @api.constrains('places_remain') - def updateActivityState(self): + def update_activity_fullness(self): """updates queue.is_activity_full based on places_remain""" for activity in self: for queue in self.activity_queue_ids: @@ -87,7 +88,7 @@ class GolemActivity(models.Model): activity.activity_queue_ids = [(2, queue.id, 0)] #changer l'état de queue allowed et automated_registration en false activity.queue_allowed = False - activity.automated_registration_from_queue = False + activity.auto_registration_from_queue = False else: #lancer popup pour choisir activité à s'inscrire @@ -105,7 +106,8 @@ class GolemActivity(models.Model): - #contraint sur nombre d'inscription : une desincription declanche une inscription depuis attente + #contraint sur nombre d'inscription : une desincription declanche une inscription + #depuis attente mode automatique @api.multi @api.constrains('activity_registration_ids') def _automatedRegistrationFromQueue(self): @@ -116,9 +118,9 @@ class GolemActivity(models.Model): #3 verifier si la file est activé #4 verifier si linscription automatique depuis la file est activé if (len(record.activity_registration_ids) < record.places and - record.queue_activity_number > 0 and - record.queue_allowed and - record.automated_registration_from_queue): + record.queue_activity_number > 0 and + record.queue_allowed and + record.auto_registration_from_queue): #recupérer la liste en file d'attente queues = record.activity_queue_ids #trier la liste selon l'id : récupérer l'ancien element @@ -131,13 +133,15 @@ class GolemActivity(models.Model): membre_registred = False #recuperer la liste des registration registrations = record.activity_registration_ids - #parcourir les registration afin de vérifier si le memebre sur l'attente déja inscrit + #parcourir les registration afin de vérifier si le memebre sur l'attente + #déja inscrit for registration in registrations: #compare le membre sur l'attente au membre sur l'inscription if queue.member_id == registration.member_id: #si membre trouvé inscrit sur l'activité on le supprime de la queue record.activity_queue_ids = [(2, queue.id, 0)] - #si membre trouvé on mentionne enregistré, on passe au registration suivante + #si membre trouvé on mentionne enregistré, on passe au + #registration suivante membre_registred = True break #à la sortie de la boucle si le membre nest pas sur inscription faire une @@ -148,7 +152,7 @@ class GolemActivity(models.Model): 'member_id' : queue.member_id } # creation d'inscription - record.activity_registration_ids = [(0, 0,values)] + record.activity_registration_ids = [(0, 0, values)] #suppression de l'element de la file d'attente record.activity_queue_ids = [(2, queue.id, 0)] #sortir de la boucle parcourissante la queue puisque inscription faite @@ -159,13 +163,15 @@ class GolemActivity(models.Model): #calculer le nombre d'inscription sur la file d'attente @api.multi @api.depends('activity_queue_ids') - def _queue_activity_number(self): + def _compute_queue_activity_number(self): + """ compute number of queue registration for activity""" for activity in self: activity.queue_activity_number = len(activity.activity_queue_ids) #lancer une fenetre pour inscritpion en file d'attente à partir du boutton @api.multi def queue_register(self): + """ launch a wizard to register in queue """ self.ensure_one() activity_id = self[0] return { @@ -173,7 +179,7 @@ class GolemActivity(models.Model): 'type' : 'ir.actions.act_window', 'res_model' : 'golem.activity.queue', 'context' :{'default_activity_id' : activity_id.id}, - 'domain' : [('activity_id', '=', activity_id.id)],# activity_id.name)],#"('activity_id', '=', True)" + 'domain' : [('activity_id', '=', activity_id.id)], 'view_mode': 'tree', 'flags': {'action_buttons': True}, 'target': 'new', @@ -182,6 +188,7 @@ class GolemActivity(models.Model): #fonction enregistrement du premier element de la liste d'ttente en inscription : mode manuel @api.multi def register_from_queue(self): + """ register member from queue""" for record in self: #recupérer la liste en file d'attente queues = record.activity_queue_ids @@ -195,7 +202,8 @@ class GolemActivity(models.Model): membre_registred = False #recuperer la liste des registration registrations = record.activity_registration_ids - #parcourir les registration afin de vérifier si le memebre sur l'attente déja inscrit + #parcourir les registration afin de vérifier si le memebre sur + #l'attente déja inscrit for registration in registrations: #compare le membre sur l'attente au membre sur l'inscription if queue.member_id == registration.member_id: @@ -203,7 +211,8 @@ class GolemActivity(models.Model): record.activity_queue_ids = [(2, queue.id, 0)] # on mentionne enregistré, on passe au registration suivante membre_registred = True - #on sort de la boucle de registration et on passe à l'element suivant de l'attente + #on sort de la boucle de registration et on passe à + #l'element suivant de l'attente break #à la sortie de la boucle si le membre nest pas sur inscription faire une if not membre_registred: @@ -213,7 +222,7 @@ class GolemActivity(models.Model): 'member_id' : queue.member_id } # creation d'inscription - record.activity_registration_ids = [(0, 0,values)] + record.activity_registration_ids = [(0, 0, values)] #suppression de l'element de la file d'attente record.activity_queue_ids = [(2, queue.id, 0)] #sortir de la boucle parcourissante la queue puisque inscription faite @@ -227,12 +236,12 @@ class GolemActivity(models.Model): #2 verifier si desincription donc place disponible pour queue(automatique ou manuel) @api.multi @api.onchange('activity_registration_ids') - def _checkRegistrationNumber(self): + def _check_registration_number(self): current_activity = self._origin for record in self: #warning au cas ou le nombre d'inscription depasse le nombre de place if (len(record.activity_registration_ids) > record.places and - record.queue_allowed): + record.queue_allowed): message = _('No remaining place for the activity : {}, please' ' discard changes and register in the queue using' ' the button bellow') @@ -244,29 +253,30 @@ class GolemActivity(models.Model): } elif (len(record.activity_registration_ids) < len(current_activity.activity_registration_ids) and len(current_activity.activity_registration_ids) == record.places and - record.queue_activity_number > 0 ): + record.queue_activity_number > 0): #si le mode d'inscription depuis attente est activé - if record.automated_registration_from_queue: - #lancer un warning informant que l'inscription automatique aura lieu apres sauvegarde - print("________________________testuii____________________________________") - warningMessage = _('There is a free place for the activity' - ' : {}, once you save it will be filled' - ' by the first membre from queue') + if record.auto_registration_from_queue: + #lancer un warning informant que l'inscription automatique aura + #lieu apres sauvegarde + warning_message = _('There is a free place for the activity' + ' : {}, once you save it will be filled' + ' by the first membre from queue') return { 'warning' : { 'title' : _('Warning'), - 'message': warningMessage.format(record.name) + 'message': warning_message.format(record.name) } } - #traitement manuel pour le passage de la file d'attente en inscription : button sur queue - else : - warningMessage = _('There is a free place for the activity' - ' : {}, you can fill it from the queue' - ' using the button on queue tab') + #traitement manuel pour le passage de la file d'attente en inscription + # : button sur queue + else: + warning_message = _('There is a free place for the activity' + ' : {}, you can fill it from the queue' + ' using the button on queue tab') return { 'warning' : { 'title' : _('Warning'), - 'message': warningMessage.format(record.name) + 'message': warning_message.format(record.name) } } diff --git a/golem_activity_queue/models/golem_activity_queue.py b/golem_activity_queue/models/golem_activity_queue.py index dc61cae..7b12288 100644 --- a/golem_activity_queue/models/golem_activity_queue.py +++ b/golem_activity_queue/models/golem_activity_queue.py @@ -40,7 +40,7 @@ class GolemActivityQueue(models.Model): #nombre de place disponible sur activité liée places_remain = fields.Integer(related='activity_id.places_remain') #activité liée est plein ou non - is_activity_full = fields.Char(compute="_isActivityFull", store=True) + is_activity_full = fields.Char(compute="_compute_is_activity_full", store=True) sequence = fields.Integer() @@ -51,7 +51,7 @@ class GolemActivityQueue(models.Model): # decider si l'activity liée est pleine ou non : pour group by sur la liste @api.depends('places_remain') - def _isActivityFull(self): + def _compute_is_activity_full(self): """ Decide if activity is full or not """ for record in self: if record.places_remain == 0: diff --git a/golem_activity_queue/models/golem_member.py b/golem_activity_queue/models/golem_member.py index 6eb68b3..994f106 100644 --- a/golem_activity_queue/models/golem_member.py +++ b/golem_activity_queue/models/golem_member.py @@ -27,90 +27,83 @@ class GolemMember(models.Model): 'member_id', 'Pending registration') @api.multi - def write(self, values): + def write(self, vals): + registrations_edited = vals.get('activity_registration_ids') + if registrations_edited: + for registration_edited in registrations_edited: + if registration_edited[0] == 2: + registration_removed = self.env['golem.activity.registration'].browse(registration_edited[1]) + activity_removed = self.env['golem.activity'].browse(registration_removed.activity_id.id) + if (activity_removed.queue_allowed and + activity_removed.auto_registration_from_queue and + activity_removed.queue_activity_number > 0): + #récupérer la liste des attente lié à l'activité + queues = activity_removed.activity_queue_ids + #trier la liste selon l'id : récupérer l'ancien element + queues_sorted = sorted(queues, key=lambda k: k['id']) + #suppose que le membre est enrigistré + membre_registred = True + #parcourir les element sur l'attente + for queue in queues_sorted: + #inverse l'etat du memebre + membre_registred = False + #recuperer la liste des registration + registrations = activity_removed.activity_registration_ids + #parcourir les registration afin de vérifier si le memebre sur + #l'attente déja inscrit + for registration in registrations: + #compare le membre sur l'attente au membre sur l'inscription + if queue.member_id == registration.member_id: + #si membre trouvé inscrit sur l'activité on le + #supprime de la queue + activity_removed.activity_queue_ids = [(2, queue.id, 0)] + #si membre trouvé on mentionne enregistré, on passe au + #registration suivante + membre_registred = True + break + #à la sortie de la boucle si le membre nest pas sur + #inscription faire une + if not membre_registred: + #valeures pour creer une inscritpion apartir de la file + values = { + 'activity_id' : queue.activity_id, + 'member_id' : queue.member_id + } - #comparer old with new - oldRegistrations = self.activity_registration_ids - oldActivities = [oldRegistration.activity_id.id for oldRegistration in oldRegistrations] - - super(GolemMember, self).write(values) - newRegistrations = self.activity_registration_ids - if len(oldRegistrations) > len(newRegistrations): - newActivities = [newRegistration.activity_id.id for newRegistration in newRegistrations] - changed = list(set(oldActivities) - set(newActivities)) - activityRemoved = self.env['golem.activity'].browse(changed[0]) - - if (activityRemoved.queue_allowed and - activityRemoved.automated_registration_from_queue and - activityRemoved.queue_activity_number > 0): - queues = activityRemoved.activity_queue_ids - #trier la liste selon l'id : récupérer l'ancien element - queues_sorted = sorted(queues, key=lambda k: k['id']) - #suppose que le membre est enrigistré - membre_registred = True - #parcourir les element sur l'attente - for queue in queues_sorted: - #inverse l'etat du memebre - membre_registred = False - #recuperer la liste des registration - registrations = activityRemoved.activity_registration_ids - #parcourir les registration afin de vérifier si le memebre sur l'attente déja inscrit - for registration in registrations: - #compare le membre sur l'attente au membre sur l'inscription - if queue.member_id == registration.member_id: - #si membre trouvé inscrit sur l'activité on le supprime de la queue - record.activity_queue_ids = [(2, queue.id, 0)] - #si membre trouvé on mentionne enregistré, on passe au registration suivante - membre_registred = True - break - #à la sortie de la boucle si le membre nest pas sur inscription faire une - if not membre_registred: - #valeures pour creer une inscritpion apartir de la file - values = { - 'activity_id' : queue.activity_id, - 'member_id' : queue.member_id - } - # creation d'inscription - activityRemoved.activity_registration_ids = [(0, 0,values)] - #suppression de l'element de la file d'attente - activityRemoved.activity_queue_ids = [(2, queue.id, 0)] - #sortir de la boucle parcourissante la queue puisque inscription faite - break - - warningMessage = _('There is a free place for the activity' - ' : {}, once you save it will be filled' - ' by the first membre from queue') - print warningMessage.format(activityRemoved.name) - - - - - elif (activityRemoved.queue_allowed and - activityRemoved.queue_activity_number > 0) : - warningMessage = _('There is a free place for the activity' - ' : {}, you can fill it from the queue' - ' using the button on queue tab') - print warningMessage.format(activityRemoved.name) + super(GolemMember, self).write(vals) + # creation d'inscription + activity_removed.activity_registration_ids = [(0, 0, values)] + #suppression de l'element de la file d'attente + activity_removed.activity_queue_ids = [(2, queue.id, 0)] + #afficher un message informatif + warning_message = _('There is a free place for the activity' + ' : {}, once you save it will be filled' + ' by the first membre from queue') + print warning_message.format(activity_removed.name) + #sortir de la boucle parcourissante la queue puisque + # inscription faite + break + elif (activity_removed.queue_allowed and + activity_removed.queue_activity_number > 0): + warning_message = _('There is a free place for the activity' + ' : {}, you can fill it from the queue' + ' using the button on queue tab') + print warning_message.format(activity_removed.name) return True - - @api.constrains('activity_registration_ids') - def _automatedRegistrationFromQueue(self): - """ Automated Registration From Queue""" - #verifier le nombre d'enregistr - """for member in self: - for registration in member.activity_registration_ids: - print '______________________________________________' - print registration.activity_id.name""" - + #verifier si nombre d'inscription sur activité est supérieur au place disponible + #inviter l'utilisateur à s'inscrire sur l'attente @api.multi @api.onchange('activity_registration_ids') - def _checkRegistrationNumber(self): + def _check_registration_number(self): + """ check activity registration number """ self.ensure_one() member_id = self[0] - + #recupérer la liste des inscription pour le membbre courant for registration in member_id.activity_registration_ids: + #recupérer l'activité liée activity = registration.activity_id + #vérifier si le nombre d'inscription depasse le nombre de places sur activité if len(activity.activity_registration_ids) > activity.places and activity.queue_allowed: warning_message = _('This activity : {} is already full, please' ' discard changes and register in' @@ -125,9 +118,10 @@ class GolemMember(models.Model): #lancer popup pour choisir activité à s'inscrire @api.multi def choose_queue_to_register(self): + """ launch wizard to choose activity queue to register in""" self.ensure_one() member_id = self[0] - + #lancer le wizard avec le membre actuel return { 'name' : _('Choose the activity to register in'), 'type' : 'ir.actions.act_window', diff --git a/golem_activity_queue/views/golem_activity_queue_views.xml b/golem_activity_queue/views/golem_activity_queue_views.xml index 42d16d1..8caecc8 100644 --- a/golem_activity_queue/views/golem_activity_queue_views.xml +++ b/golem_activity_queue/views/golem_activity_queue_views.xml @@ -16,86 +16,81 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - - - - - queue.form - golem.activity.queue - -
- - - - + + queue.form + golem.activity.queue + + + + + + + + + + + + + + + queue.search + golem.activity.queue + + - -
- -
-
- - - -queue.search -golem.activity.queue - - - - - - - - - - - - - - - - - - -queue.tree -golem.activity.queue - - - - - - - - - - - - - - - - - - GOLEM Activity Queue List - golem.activity.queue - tree,search - {'search_default_season_default': True} - - - + + + + + + + + + + + + + + + + queue.tree + golem.activity.queue + + + + + + + + + + + + + + + GOLEM Activity Queue List + golem.activity.queue + tree,search + {'search_default_season_default': True} + + +
diff --git a/golem_activity_queue/views/golem_activity_views.xml b/golem_activity_queue/views/golem_activity_views.xml index b8329aa..dd47eac 100644 --- a/golem_activity_queue/views/golem_activity_views.xml +++ b/golem_activity_queue/views/golem_activity_views.xml @@ -16,19 +16,18 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - - Add the queue registration button to activity form - golem.activity - - + Add the queue registration items to activity form + golem.activity + + - + @@ -38,33 +37,29 @@ along with this program. If not, see .