|
|
"""
Internal index is a field that holds the combination of the date, compliment of sequence and id of each line.
Using this prevents us having a compound index, and extensive where clauses.
Without this finding lines before current line (which we need for calculating the running balance)
would need a query like this:
date < current date OR (date = current date AND sequence > current date) or (
date = current date AND sequence = current sequence AND id < current id)
which needs to be repeated all over the code.
This would be simply "internal index < current internal index" using this field.
Also, we would need a compound index of date + sequence + id
on the table which is not possible because date is not in this table (it is in the account move table)
unless we use a sql view which is more complicated.
"""
for st_line in self.filtered(lambda line: line._origin.id):
st_line.internal_index = f'{st_line.date.strftime("%Y%m%d")}' \
f'{MAXINT - st_line.sequence:0>10}' \
f'{st_line._origin.id:0>10}'
|
|