feat(商品): 調整商品代號顯示與會計報表樣式
This commit is contained in:
@@ -90,37 +90,58 @@ class AccountingReportController extends Controller
|
||||
{
|
||||
$dateStart = $request->input('date_start', Carbon::now()->toDateString());
|
||||
$dateEnd = $request->input('date_end', Carbon::now()->toDateString());
|
||||
$selectedIdsParam = $request->input('selected_ids');
|
||||
|
||||
$purchaseOrders = PurchaseOrder::with(['vendor'])
|
||||
->whereIn('status', ['received', 'completed'])
|
||||
->whereBetween('created_at', [$dateStart . ' 00:00:00', $dateEnd . ' 23:59:59'])
|
||||
->get();
|
||||
$purchaseOrdersQuery = PurchaseOrder::with(['vendor'])
|
||||
->whereIn('status', ['received', 'completed']);
|
||||
|
||||
$utilityFeesQuery = UtilityFee::query();
|
||||
|
||||
$utilityFees = UtilityFee::whereBetween('transaction_date', [$dateStart, $dateEnd])->get();
|
||||
if ($selectedIdsParam) {
|
||||
$ids = explode(',', $selectedIdsParam);
|
||||
$poIds = [];
|
||||
$ufIds = [];
|
||||
foreach ($ids as $id) {
|
||||
if (str_starts_with($id, 'PO-')) {
|
||||
$poIds[] = substr($id, 3);
|
||||
} elseif (str_starts_with($id, 'UF-')) {
|
||||
$ufIds[] = substr($id, 3);
|
||||
}
|
||||
}
|
||||
$purchaseOrders = $purchaseOrdersQuery->whereIn('id', $poIds)->get();
|
||||
$utilityFees = $utilityFeesQuery->whereIn('id', $ufIds)->get();
|
||||
} else {
|
||||
$purchaseOrders = $purchaseOrdersQuery
|
||||
->whereBetween('created_at', [$dateStart . ' 00:00:00', $dateEnd . ' 23:59:59'])
|
||||
->get();
|
||||
$utilityFees = $utilityFeesQuery
|
||||
->whereBetween('transaction_date', [$dateStart, $dateEnd])
|
||||
->get();
|
||||
}
|
||||
|
||||
$allRecords = collect();
|
||||
|
||||
foreach ($purchaseOrders as $po) {
|
||||
$allRecords->push([
|
||||
$po->created_at->toDateString(),
|
||||
Carbon::parse($po->created_at)->toDateString(),
|
||||
'採購單',
|
||||
'進貨支出',
|
||||
$po->vendor->name ?? '',
|
||||
$po->code,
|
||||
$po->invoice_number,
|
||||
$po->grand_total,
|
||||
(float)$po->grand_total,
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($utilityFees as $fee) {
|
||||
$allRecords->push([
|
||||
$fee->transaction_date,
|
||||
Carbon::parse($fee->transaction_date)->toDateString(),
|
||||
'公共事業費',
|
||||
$fee->category,
|
||||
$fee->description,
|
||||
'-',
|
||||
$fee->invoice_number,
|
||||
$fee->amount,
|
||||
(float)$fee->amount,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -75,6 +75,7 @@ class ProductController extends Controller
|
||||
public function store(Request $request)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'code' => 'required|string|max:2|unique:products,code',
|
||||
'name' => 'required|string|max:255',
|
||||
'category_id' => 'required|exists:categories,id',
|
||||
'brand' => 'nullable|string|max:255',
|
||||
@@ -85,6 +86,9 @@ class ProductController extends Controller
|
||||
'conversion_rate' => 'required_with:large_unit_id|nullable|numeric|min:0.0001',
|
||||
'purchase_unit_id' => 'nullable|exists:units,id',
|
||||
], [
|
||||
'code.required' => '商品代號為必填',
|
||||
'code.max' => '商品代號最多 2 碼',
|
||||
'code.unique' => '商品代號已存在',
|
||||
'name.required' => '商品名稱為必填',
|
||||
'category_id.required' => '請選擇分類',
|
||||
'category_id.exists' => '所選分類不存在',
|
||||
@@ -94,14 +98,6 @@ class ProductController extends Controller
|
||||
'conversion_rate.numeric' => '換算率必須為數字',
|
||||
'conversion_rate.min' => '換算率最小為 0.0001',
|
||||
]);
|
||||
|
||||
// Auto-generate code
|
||||
$prefix = 'P';
|
||||
$lastProduct = Product::withTrashed()->latest('id')->first();
|
||||
$nextId = $lastProduct ? $lastProduct->id + 1 : 1;
|
||||
$code = $prefix . str_pad($nextId, 5, '0', STR_PAD_LEFT);
|
||||
|
||||
$validated['code'] = $code;
|
||||
|
||||
$product = Product::create($validated);
|
||||
|
||||
@@ -114,6 +110,7 @@ class ProductController extends Controller
|
||||
public function update(Request $request, Product $product)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'code' => 'required|string|max:2|unique:products,code,' . $product->id,
|
||||
'name' => 'required|string|max:255',
|
||||
'category_id' => 'required|exists:categories,id',
|
||||
'brand' => 'nullable|string|max:255',
|
||||
@@ -123,6 +120,9 @@ class ProductController extends Controller
|
||||
'conversion_rate' => 'required_with:large_unit_id|nullable|numeric|min:0.0001',
|
||||
'purchase_unit_id' => 'nullable|exists:units,id',
|
||||
], [
|
||||
'code.required' => '商品代號為必填',
|
||||
'code.max' => '商品代號最多 2 碼',
|
||||
'code.unique' => '商品代號已存在',
|
||||
'name.required' => '商品名稱為必填',
|
||||
'category_id.required' => '請選擇分類',
|
||||
'category_id.exists' => '所選分類不存在',
|
||||
|
||||
Reference in New Issue
Block a user