ultimatepos/Modules/Maintenance/Http/Controllers/SettingsController.php

89 lines
3.9 KiB
PHP

<?php
namespace Modules\Maintenance\Http\Controllers;
use App\Business;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Maintenance\Http\Controllers\Concerns\AuthorizesMaintenance;
use Modules\Maintenance\Utils\MaintenanceUtil;
class SettingsController extends Controller
{
use AuthorizesMaintenance;
public function __construct(
protected MaintenanceUtil $maintenanceUtil
) {}
public function index()
{
$this->authorizeMaintenanceAccess('maintenance.access');
$business_id = $this->maintenanceUtil->getBusinessId();
$settings = $this->maintenanceUtil->getMaintenanceSettings($business_id);
$accountingEnabled = $this->maintenanceUtil->isAccountingEnabled($business_id);
$assetEnabled = $this->maintenanceUtil->isAssetManagementEnabled($business_id);
$crmEnabled = $this->maintenanceUtil->isCrmEnabled($business_id);
return view('maintenance::settings.index', [
'settings' => $settings,
'accounting_enabled' => $accountingEnabled,
'asset_enabled' => $assetEnabled,
'crm_enabled' => $crmEnabled,
'accounts' => $accountingEnabled ? $this->maintenanceUtil->getAccountingAccountsDropdown($business_id) : [],
'asset_categories' => $assetEnabled ? $this->maintenanceUtil->getAssetCategoriesDropdown($business_id) : [],
'locations' => $this->maintenanceUtil->getLocationsDropdown($business_id),
]);
}
public function update(Request $request)
{
$this->authorizeMaintenanceAccess('maintenance.access');
$business_id = $this->maintenanceUtil->getBusinessId();
$existing = $this->maintenanceUtil->getMaintenanceSettings($business_id);
$data = $request->validate([
'expense_account_id' => 'nullable|integer',
'payment_account_id' => 'nullable|integer',
'default_asset_category_id' => 'nullable|integer',
'auto_post_journal' => 'sometimes|boolean',
'auto_create_asset' => 'sometimes|boolean',
'crm_sync_followup_on_equipment' => 'sometimes|boolean',
'crm_sync_followup_on_work_order' => 'sometimes|boolean',
'auto_pm_reminders' => 'sometimes|boolean',
'auto_create_pm_work_order' => 'sometimes|boolean',
'sync_pos_stock' => 'sometimes|boolean',
'deduct_pos_stock_on_consume' => 'sometimes|boolean',
'default_stock_location_id' => 'nullable|integer',
]);
$settings = array_merge($existing, [
'expense_account_id' => $data['expense_account_id'] ?? null,
'payment_account_id' => $data['payment_account_id'] ?? null,
'default_asset_category_id' => $data['default_asset_category_id'] ?? null,
'auto_post_journal' => $request->boolean('auto_post_journal'),
'auto_create_asset' => $request->boolean('auto_create_asset'),
'crm_sync_followup_on_equipment' => $request->boolean('crm_sync_followup_on_equipment'),
'crm_sync_followup_on_work_order' => $request->boolean('crm_sync_followup_on_work_order'),
'auto_pm_reminders' => $request->boolean('auto_pm_reminders'),
'auto_create_pm_work_order' => $request->boolean('auto_create_pm_work_order'),
'sync_pos_stock' => $request->boolean('sync_pos_stock'),
'deduct_pos_stock_on_consume' => $request->boolean('deduct_pos_stock_on_consume'),
'default_stock_location_id' => $data['default_stock_location_id'] ?? null,
]);
if (\Illuminate\Support\Facades\Schema::hasColumn('business', 'maintenance_settings')) {
Business::where('id', $business_id)->update([
'maintenance_settings' => json_encode($settings),
]);
}
return redirect()
->action([self::class, 'index'])
->with('status', 'تنظیمات نگهداری ذخیره شد.');
}
}