|
|
self.duplicate_expense_ids = [Command.clear()]
expenses = self.filtered(lambda expense: expense.employee_id and expense.product_id and expense.total_amount_currency)
if expenses.ids:
duplicates_query = """
SELECT ARRAY_AGG(DISTINCT he.id)
FROM hr_expense AS he
JOIN hr_expense AS ex ON he.employee_id = ex.employee_id
AND he.product_id = ex.product_id
AND he.date = ex.date
AND he.total_amount_currency = ex.total_amount_currency
AND he.company_id = ex.company_id
AND he.currency_id = ex.currency_id
WHERE ex.id in %(expense_ids)s
GROUP BY he.employee_id, he.product_id, he.date, he.total_amount_currency, he.company_id, he.currency_id
HAVING COUNT(he.id) > 1
"""
self.env.cr.execute(duplicates_query, {'expense_ids': tuple(expenses.ids)})
for duplicates_ids in (x[0] for x in self.env.cr.fetchall()):
expenses_duplicates = expenses.filtered(lambda expense: expense.id in duplicates_ids)
expenses_duplicates.duplicate_expense_ids = [Command.set(duplicates_ids)]
expenses = expenses - expenses_duplicates
|
|