Skip to content
Extraits de code Groupes Projets
Valider f8786d2a rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[update] add batch queue for contribution creation and remove threading

parent 5834b2bf
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -10,6 +10,7 @@
"depends": [
"account_banking_sepa_direct_debit",
"cgscop_cotisation",
"queue_job_batch",
],
"data": [
"security/security_rules.xml",
......
......@@ -222,19 +222,22 @@ class ScopCotisationAura(models.Model):
message_id = self.env['message.wizard'].create(
{'message': message})
# Création de la task
cotiz_aura_task = self.env['scop.cotisation.task'].create({
'year': self.year,
'cotiz_to_create': len(members_to_invoice),
'message': "En cours de création",
'status': 'in_process'
})
cotiz_aura_task.env.cr.commit()
# Lancement du calcul en arrière plan
threaded_cotiz = threading.Thread(
target=self.process_cotiz_generate,
args=(members_to_invoice, cotiz_aura_task))
threaded_cotiz.start()
# Job queue
batch_name = (fields.Datetime.to_string(fields.Datetime.now()) +
" Génération des cotisations AURA " + str(self.year))
batch = self.env['queue.job.batch'].get_new_batch(batch_name)
for member in members_to_invoice:
liasse = self.get_liasse(member)
amount_aura = self.round_to_closest_multiple(self.get_cotiz_aura(member, liasse), 4)
# Mise en file d'attente de la création du bordereau
self.with_context(job_batch=batch).with_delay().create_contribution_aura(
partner=member, amount=amount_aura,
nb_quarter_aura=4, liasse=liasse, date=False)
# Lancement de la file d'attente
batch.enqueue()
else:
message = ("<p class='text-center'>Tous les appels de " +
"cotisations annuels ont déjà été créés !</p>")
......@@ -431,8 +434,12 @@ class ScopCotisationAura(models.Model):
liasse_id = self.env['scop.liasse.fiscale'].search([
('partner_id', '=', member.id),
('year', '=', self.year - 2),
('type_id', '=', 'lm')
])
('type_id', '=', 'lm'),
('is_qualified', '=', True)
], order='create_date desc', limit=1)
if len(liasse_id) > 1:
print(member.name)
print(member.id)
return liasse_id
# ------------------------------------------------------
......@@ -476,65 +483,3 @@ class ScopCotisationAura(models.Model):
return plancher
else:
return cotiz
# ------------------------------------------------------
# Threading task
# ------------------------------------------------------
def process_cotiz_generate(self, partner_ids, cotiz_aura_task,
nb_quarter_aura=4, date=False):
"""
Process de génération des cotiz Aura en background
"""
cotiz_created = 0
cotiz_to_create = len(partner_ids)
with api.Environment.manage():
with registry(self.env.cr.dbname).cursor() as new_cr:
# Def new env
new_env = api.Environment(
new_cr, self.env.uid, self.env.context
)
# Def new var in new env
task = cotiz_aura_task.with_env(new_env)
new_self = self.with_env(new_env)
# Definition of specific param
# Creation of cotiz invoice for each member
for member_id in partner_ids:
member = member_id.with_env(new_env)
try:
liasse = new_self.get_liasse(member)
amount_aura = new_self.round_to_closest_multiple(
new_self.get_cotiz_aura(member, liasse), 4)
invoice_cotiz_aura = \
new_self.create_contribution_aura(
member, amount_aura, nb_quarter_aura, liasse, date)
if nb_quarter_aura != 4:
invoice_cotiz_aura.recalcul_cotiz_aura()
cotiz_created += 1
task.write({
'cotiz_created': cotiz_created,
'message': "%d / %d ont été créés" % (
cotiz_created, cotiz_to_create),
})
if cotiz_created == cotiz_to_create:
task.write({
'message': "Tous les appels de cotisations ont"
" été créés",
'status': "done"
})
invoice_cotiz_aura.env.cr.commit()
task.env.cr.commit()
except Exception as e:
_logger.exception(str(e))
task.write({
'cotiz_created': cotiz_created,
'message': "%d / %d ont été créés" % (
cotiz_created, cotiz_to_create),
'is_error': True,
'status': "done"
})
task.env.cr.commit()
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter