• Mahmoud Aglan's avatar
    fix(waiver): prevent reconcile() from revoking membership after successful transfer · ba9d9f81
    Mahmoud Aglan authored
    Root cause: after WaiverProcessor::execute() completed, visiting /members/{id}
    triggered MembershipPaymentGuard::reconcile(), which did not recognise waiver_fee
    as a valid activation payment. It stripped the membership_number and then called
    deactivateAllDependents(), which crashed on spouses.join_date NOT NULL constraint.
    
    Fixes:
    - MembershipPaymentGuard::reconcile(): add waiver_fee path — looks up completed
      waiver_requests where target_member_id matches, preventing false deactivation
    - MembershipPaymentGuard::deactivateAllDependents(): spouses.join_date is NOT NULL;
      use sentinel date '1970-01-01' instead of NULL to avoid constraint violation
    - MembershipPaymentGuard::deactivateDependent(): same sentinel fix for spouses
    - WaiverProcessor::execute(): set activated_by_payment_id + activated_at on the
      target member so the existing fallback check in reconcile() catches future cases
    
    Also restored member #136 directly in DB (membership_number='1600', status='active',
    activated_by_payment_id=773) which was the live victim of this bug.
    Co-Authored-By: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
    ba9d9f81
Name
Last commit
Last update
.claude Loading commit data...
Another ERP that we may want to cheat from Loading commit data...
Server Connection Data Loading commit data...
app Loading commit data...
config Loading commit data...
cron Loading commit data...
database Loading commit data...
docker Loading commit data...
docs Loading commit data...
public Loading commit data...
support_tickets_downloads/support_screenshots Loading commit data...
tests Loading commit data...
tools Loading commit data...
.dockerignore Loading commit data...
.editorconfig Loading commit data...
.env Loading commit data...
.env.example Loading commit data...
.gitignore Loading commit data...
.php-cs-fixer.php Loading commit data...
BalanceSheet.html Loading commit data...
CLAUDE.md Loading commit data...
Dockerfile Loading commit data...
Makefile Loading commit data...
SYSTEM_MAP.md Loading commit data...
UPGRADE_PLAN.md Loading commit data...
captain-definition Loading commit data...
cli.php Loading commit data...
composer.json Loading commit data...
composer.lock Loading commit data...
interesting_features.md Loading commit data...
phpstan.neon Loading commit data...
phpunit.xml Loading commit data...
sports activity stuff .txt Loading commit data...
sports-activity-alignment-plan.md Loading commit data...
sports-activity-smart-filtering-plan.md Loading commit data...
trial_balance_2026-01-01_to_2026-05-10.csv Loading commit data...