changes
This commit is contained in:
107
run_poynt_sync.py
Normal file
107
run_poynt_sync.py
Normal file
@@ -0,0 +1,107 @@
|
||||
from datetime import date, timedelta
|
||||
import logging
|
||||
_logger = logging.getLogger('poynt_sync')
|
||||
|
||||
Batch = env['poynt.settlement.batch']
|
||||
provider = env['payment.provider'].search([('code', '=', 'poynt'), ('state', '=', 'enabled')], limit=1)
|
||||
|
||||
if not provider:
|
||||
print('ERROR: No active Poynt provider found', flush=True)
|
||||
else:
|
||||
print(f'Provider: {provider.name} (ID {provider.id})', flush=True)
|
||||
print(f'Business ID: {provider.poynt_business_id}', flush=True)
|
||||
|
||||
# Process each day from 2024-01-01 to today
|
||||
# Skip weekends (Saturday batched with Friday→Monday)
|
||||
start_date = date(2024, 1, 1)
|
||||
end_date = date.today() - timedelta(days=1) # yesterday
|
||||
|
||||
current = start_date
|
||||
batches_created = 0
|
||||
batches_with_txns = 0
|
||||
total_lines = 0
|
||||
errors = []
|
||||
|
||||
while current <= end_date:
|
||||
weekday = current.weekday()
|
||||
|
||||
# Skip Saturday — batched with Sunday→Monday
|
||||
if weekday == 5:
|
||||
current += timedelta(days=1)
|
||||
continue
|
||||
|
||||
# For Sunday, fetch Fri+Sat+Sun
|
||||
if weekday == 6:
|
||||
txn_from = current - timedelta(days=2) # Friday
|
||||
else:
|
||||
txn_from = current
|
||||
|
||||
settlement_date = current + timedelta(days=1)
|
||||
# If settlement falls on weekend, push to Monday
|
||||
if settlement_date.weekday() == 5:
|
||||
settlement_date += timedelta(days=2)
|
||||
elif settlement_date.weekday() == 6:
|
||||
settlement_date += timedelta(days=1)
|
||||
|
||||
# Check if batch already exists
|
||||
existing = Batch.search([
|
||||
('provider_id', '=', provider.id),
|
||||
('transaction_date', '=', txn_from),
|
||||
])
|
||||
if existing:
|
||||
current += timedelta(days=1)
|
||||
continue
|
||||
|
||||
try:
|
||||
batch = Batch.create({
|
||||
'provider_id': provider.id,
|
||||
'transaction_date': txn_from,
|
||||
'settlement_date': settlement_date,
|
||||
})
|
||||
batch.action_fetch_transactions()
|
||||
batches_created += 1
|
||||
|
||||
line_count = len(batch.line_ids)
|
||||
if line_count > 0:
|
||||
batches_with_txns += 1
|
||||
total_lines += line_count
|
||||
|
||||
# Try to match deposit
|
||||
try:
|
||||
batch.action_match_deposit()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Try to match customers
|
||||
try:
|
||||
batch.action_match_customers()
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
# No transactions — delete empty batch
|
||||
batch.unlink()
|
||||
batches_created -= 1
|
||||
|
||||
except Exception as e:
|
||||
err_msg = str(e)[:100]
|
||||
if err_msg not in [e[:100] for e in errors]:
|
||||
errors.append(str(e))
|
||||
print(f' Error on {current}: {err_msg}', flush=True)
|
||||
|
||||
if batches_created % 30 == 0 and batches_created > 0:
|
||||
env.cr.commit()
|
||||
print(f' Progress: {batches_created} batches, {total_lines} lines, date={current}', flush=True)
|
||||
|
||||
current += timedelta(days=1)
|
||||
|
||||
env.cr.commit()
|
||||
print(f'\nDONE:', flush=True)
|
||||
print(f' Batches created: {batches_created}', flush=True)
|
||||
print(f' Batches with transactions: {batches_with_txns}', flush=True)
|
||||
print(f' Total transaction lines: {total_lines}', flush=True)
|
||||
print(f' Errors: {len(errors)}', flush=True)
|
||||
|
||||
# Summary of batch states
|
||||
all_batches = Batch.search([('provider_id', '=', provider.id)])
|
||||
matched = all_batches.filtered(lambda b: b.state == 'matched')
|
||||
print(f' Matched to deposits: {len(matched)} batches', flush=True)
|
||||
Reference in New Issue
Block a user