75 lines
2.5 KiB
Python
75 lines
2.5 KiB
Python
# Run this script using the Odoo shell:
|
|
# ./.venv/bin/python ./odoo/odoo-bin shell -d kipasdbclone7 -c odoo.conf < force_update_bills_to_paid.py
|
|
|
|
import sys
|
|
|
|
# List of vendor bills to force update to Paid.
|
|
# You can add or remove bill names as needed before running.
|
|
BILL_NAMES = [
|
|
'BILL/2025/10/0138',
|
|
'BILL/2025/10/0137',
|
|
'BILL/2025/10/0129',
|
|
'BILL/2025/10/0111',
|
|
'BILL/2025/10/0105',
|
|
'BILL/2025/10/0094',
|
|
'BILL/2025/10/0093',
|
|
'BILL/2025/10/0088',
|
|
'BILL/2025/10/0174',
|
|
'BILL/2025/10/0076',
|
|
'BILL/2025/10/0065',
|
|
]
|
|
|
|
def force_paid_bills(env):
|
|
bills = env['account.move'].search([
|
|
('name', 'in', BILL_NAMES),
|
|
('move_type', '=', 'in_invoice')
|
|
])
|
|
|
|
if not bills:
|
|
print("No matching vendor bills found.")
|
|
return
|
|
|
|
print(f"Found {len(bills)} vendor bills to update.")
|
|
|
|
for bill in bills:
|
|
if bill.payment_state == 'paid':
|
|
print(f"[{bill.name}] is already Paid. Skipping.")
|
|
continue
|
|
|
|
print(f"[{bill.name}] Updating state to 'paid'...")
|
|
|
|
# Use raw SQL to prevent Odoo ORM from overriding or triggering validations
|
|
# Updating the payment state and amount residual on the move
|
|
env.cr.execute("""
|
|
UPDATE account_move
|
|
SET payment_state = 'paid',
|
|
amount_residual = 0,
|
|
amount_residual_signed = 0
|
|
WHERE id = %s
|
|
""", (bill.id,))
|
|
|
|
# Updating the residual on the payable lines so it doesn't show "Amount Due" inside the form
|
|
payable_lines = bill.line_ids.filtered(lambda l: l.account_id.account_type in ('liability_payable', 'asset_receivable'))
|
|
if payable_lines:
|
|
env.cr.execute("""
|
|
UPDATE account_move_line
|
|
SET amount_residual = 0,
|
|
amount_residual_currency = 0
|
|
WHERE id IN %s
|
|
""", (tuple(payable_lines.ids),))
|
|
|
|
print("Committing changes to database...")
|
|
env.cr.commit()
|
|
|
|
# Invalidate cache so subsequent ORM calls in this session see the changes
|
|
env.invalidate_all()
|
|
print("Update complete!")
|
|
|
|
if __name__ == '__main__':
|
|
# When running via `odoo-bin shell`, the `env` variable is automatically available.
|
|
try:
|
|
force_paid_bills(env)
|
|
except NameError:
|
|
print("Please run this script using Odoo shell:")
|
|
print("Example: ./.venv/bin/python ./odoo/odoo-bin shell -d <database_name> -c odoo.conf < force_update_bills_to_paid.py")
|