Files
kulakpos_web/Modules/Business/App/Http/Controllers/AcnooSettingsManagerController.php

187 lines
6.7 KiB
PHP

<?php
namespace Modules\Business\App\Http\Controllers;
use App\Models\Option;
use Illuminate\Http\Request;
use App\Models\ProductSetting;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;
use Illuminate\Validation\ValidationException;
class AcnooSettingsManagerController extends Controller
{
public function index()
{
$businessId = auth()->user()->business_id;
$invoiceSettingKey = 'invoice_setting_' . $businessId;
$invoice_setting = Option::where('key', $invoiceSettingKey)->first();
$product_setting = ProductSetting::where('business_id', auth()->user()->business_id)->first();
$currencySettingKey = 'currency_setting_' . $businessId;
$currency_setting = Option::where('key', $currencySettingKey)->first();
return view('business::manage-settings.index', compact('invoice_setting', 'product_setting', 'currency_setting'));
}
public function updateInvoice(Request $request)
{
$request->validate([
'invoice_size' => 'required|string|max:100|in:a4,3_inch_80mm',
]);
$key = 'invoice_setting_' . auth()->user()->business_id;
Option::updateOrCreate(
['key' => $key],
['value' => $request->invoice_size]
);
Cache::forget($key);
return response()->json(__('Invoice setting updated successfully.'));
}
public function updateProductSetting(Request $request)
{
$request->validate([
'show_product_price' => 'nullable|boolean',
'show_product_code' => 'nullable|boolean',
'show_product_stock' => 'nullable|boolean',
'show_product_sale_price' => 'nullable|boolean',
'show_product_dealer_price' => 'nullable|boolean',
'show_product_wholesale_price' => 'nullable|boolean',
'show_product_unit' => 'nullable|boolean',
'show_product_brand' => 'nullable|boolean',
'show_product_category' => 'nullable|boolean',
'show_product_manufacturer' => 'nullable|boolean',
'show_product_image' => 'nullable|boolean',
'show_expire_date' => 'nullable|boolean',
'show_alert_qty' => 'nullable|boolean',
'show_vat_id' => 'nullable|boolean',
'show_vat_type' => 'nullable|boolean',
'show_exclusive_price' => 'nullable|boolean',
'show_inclusive_price' => 'nullable|boolean',
'show_profit_percent' => 'nullable|boolean',
'show_capacity' => 'nullable|boolean',
'show_weight' => 'nullable|boolean',
'show_color' => 'nullable|boolean',
'show_size' => 'nullable|boolean',
'show_type' => 'nullable|boolean',
'show_batch_no' => 'nullable|boolean',
'show_mfg_date' => 'nullable|boolean',
'show_model_no' => 'nullable|boolean',
'show_product_batch_no' => 'nullable|boolean',
'show_product_expire_date' => 'nullable|boolean',
'default_batch_no' => 'nullable|string|max:255',
'default_expired_date' => 'nullable|date',
'default_mfg_date' => 'nullable|date',
'default_sale_price' => 'nullable|numeric|min:0',
'default_wholesale_price' => 'nullable|numeric|min:0',
'default_dealer_price' => 'nullable|numeric|min:0',
'expire_date_type' => 'nullable|in:dmy,my',
'mfg_date_type' => 'nullable|in:dmy,my',
'show_product_type_single' => 'nullable|boolean',
'show_product_type_variant' => 'nullable|boolean',
'show_product_type_combo' => 'nullable|boolean',
'show_warehouse' => 'nullable|boolean',
'show_action' => 'nullable|boolean',
'show_rack' => 'nullable|boolean',
'show_shelf' => 'nullable|boolean',
'show_guarantee' => 'nullable|boolean',
'show_warranty' => 'nullable|boolean',
'show_serial' => 'nullable|boolean',
]);
if (
!$request->boolean('show_product_type_single') &&
!$request->boolean('show_product_type_variant') &&
!$request->boolean('show_product_type_combo')
) {
throw ValidationException::withMessages([
'product_type' => ['At least one product type must be selected: Single, Variant or Combo.'],
]);
}
$modules = $request->except([
'_token',
'_method',
'default_expired_date_dmy',
'default_expired_date_my',
'default_mfg_date_dmy',
'default_mfg_date_my',
]);
// Set default_expired_date based on date type
$modules['default_expired_date'] = $request->expire_date_type === 'dmy'
? $request->default_expired_date_dmy
: ($request->expire_date_type === 'my'
? $request->default_expired_date_my
: null);
// Set default_mfg_date based on date type
$modules['default_mfg_date'] = $request->mfg_date_type === 'dmy'
? $request->default_mfg_date_dmy
: ($request->mfg_date_type === 'my'
? $request->default_mfg_date_my
: null);
$businessId = auth()->user()->business_id;
ProductSetting::updateOrCreate(
['business_id' => $businessId],
['modules' => $modules]
);
Cache::forget('product_setting_' . $businessId);
return response()->json(__('Product setting updated successfully.'));
}
public function updateCurrency(Request $request)
{
$request->validate([
'currency' => 'required|string|max:100|in:us,european',
]);
$key = 'currency_setting_' . auth()->user()->business_id;
Option::updateOrCreate(
['key' => $key],
['value' => $request->currency]
);
Cache::forget($key);
return response()->json(__('Currency setting updated successfully.'));
}
public function updateSerial(Request $request)
{
$request->validate([
'show_serial' => 'nullable|boolean',
]);
$businessId = auth()->user()->business_id;
$setting = ProductSetting::firstOrCreate(
['business_id' => $businessId],
['modules' => []]
);
$modules = $setting->modules ?? [];
$modules['show_serial'] = $request->boolean('show_serial') ? '1' : '0';
$setting->update([
'modules' => $modules
]);
Cache::forget('product_setting_' . $businessId);
return response()->json([
'message' => 'Serial setting updated successfully.',
]);
}
}