Add membership fee system with disability discount and fix document permissions
Features: - Implement two fee types: entrance fee and annual fee (both NT$1,000) - Add 50% discount for disability certificate holders - Add disability certificate upload in member profile - Integrate disability verification into cashier approval workflow - Add membership fee settings in system admin Document permissions: - Fix hard-coded role logic in Document model - Use permission-based authorization instead of role checks Additional features: - Add announcements, general ledger, and trial balance modules - Add income management and accounting entries - Add comprehensive test suite with factories - Update UI translations to Traditional Chinese 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AuditLog;
|
||||
use App\Models\SystemSetting;
|
||||
use App\Services\MembershipFeeCalculator;
|
||||
use App\Services\SettingsService;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -270,4 +271,45 @@ class SystemSettingsController extends Controller
|
||||
|
||||
return redirect()->route('admin.settings.advanced')->with('status', '進階設定已更新');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show membership fee settings page
|
||||
*/
|
||||
public function membership()
|
||||
{
|
||||
$feeCalculator = app(MembershipFeeCalculator::class);
|
||||
|
||||
$settings = [
|
||||
'entrance_fee' => $feeCalculator->getEntranceFee(),
|
||||
'annual_fee' => $feeCalculator->getAnnualFee(),
|
||||
'disability_discount_rate' => $feeCalculator->getDisabilityDiscountRate() * 100, // Convert to percentage
|
||||
];
|
||||
|
||||
return view('admin.settings.membership', compact('settings'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update membership fee settings
|
||||
*/
|
||||
public function updateMembership(Request $request)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'entrance_fee' => 'required|numeric|min:0|max:100000',
|
||||
'annual_fee' => 'required|numeric|min:0|max:100000',
|
||||
'disability_discount_rate' => 'required|numeric|min:0|max:100',
|
||||
]);
|
||||
|
||||
SystemSetting::set('membership_fee.entrance_fee', $validated['entrance_fee'], 'float', 'membership');
|
||||
SystemSetting::set('membership_fee.annual_fee', $validated['annual_fee'], 'float', 'membership');
|
||||
SystemSetting::set('membership_fee.disability_discount_rate', $validated['disability_discount_rate'] / 100, 'float', 'membership');
|
||||
|
||||
AuditLog::create([
|
||||
'user_id' => auth()->id(),
|
||||
'action' => 'settings.membership.updated',
|
||||
'description' => '更新會費設定',
|
||||
'ip_address' => $request->ip(),
|
||||
]);
|
||||
|
||||
return redirect()->route('admin.settings.membership')->with('status', '會費設定已更新');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user