Bonjour à tous..
J’ai une erreur lorsque j’utilise les alias lors des requêtes sql au niveau de table_query.
Voici mon code détaillée :
@classmethod
def table_query(cls):
SalePriceList = Pool().get('product.price_list')
sale_price_list = SalePriceList.__table__()
Invoice = Pool().get('account.invoice')
invoice = Invoice.__table__()
print(type(invoice))
i1 = invoice("i1")
i2 = invoice("i2")
i3 = invoice("i3")
# Jointures croisant facture et avoir
join_ref = Join(i1, i2, 'LEFT')
join_ref.condition = i1.number == i2.reference
join_rev = Join(join_ref, i3, 'LEFT')
join_rev.condition = join_ref.left.reference == join_rev.right.number
# Jointure pour aller chercher sale_price_list.name
join_spl = Join(join_ref.left, sale_price_list, 'LEFT')
join_spl.condition = join_ref.left.sale_price_list == sale_price_list.id
# Clause de base
where = Literal(True)
ctx = Transaction().context
if ctx.get('start_date'):
where &= i1.invoice_date >= ctx['start_date']
if ctx.get('end_date'):
where &= i1.invoice_date <= ctx['end_date']
where &= i1.state.in_(['paid', 'posted'])
# Élimination des factures avec relation crédit/avoir
where &= (i2.id == None) # i1.number ≠ i2.reference
where &= (join_rev.right.id == None) # i1.reference ≠ i3.number
print(join_ref.left.sale_price_list.name)
return join_rev.select(
join_spl.right.name,
Sum(join_ref.left.montant_assurance),
where=where,
group_by=[join_spl.right.name]
)
Lorsque j’exécute celui-ci j’ai cette erreur
i1 = invoice.alias('i1')
^^^^^^^^^^^^^^^^^^^
TypeError: 'str' object is not callable
Naturellement invoice est de class sql.table et cette classe n’a pas pour attribut alias. OK pour ceci.
J’essaye donc de remplacer par
print(type(invoice))
i1 = invoice
i2 = invoice
i3 = invoice
Mais j’ai cette erreur ci
cursor.execute(self, sql, args)
psycopg2.errors.DuplicateAlias: table name "b" specified more than once
Je n’ai plus vraiment d’idée si vous pouvez m’aider s’il vous plait je vous en remercie.