CaiWuXiTong/app/Http/Controllers/Business/InternalFlowReportActions.php
DoDo 0174a056ac feat: 联动内部流转预计销量并支持供应商收票
预计销量自动读取主体维度经营报表上月业绩;开票与进项成本按 20%/25%/80% 计算;供应商收票支持人工覆盖并跨导入保留。
2026-11-09 12:38:19 +08:00

64 lines
2.3 KiB
PHP

<?php
namespace App\Http\Controllers\Business;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Modules\EcommerceFinance\Repositories\InternalFlowReportRepository;
use Modules\EcommerceFinance\Services\InternalFlowProjection;
use Throwable;
class InternalFlowReportActions
{
public function updateSupplierReceipt(
Request $request,
InternalFlowReportRepository $repository,
InternalFlowProjection $projection,
int $record,
): JsonResponse|RedirectResponse {
$data = $request->validate([
'receipt_from_supplier' => ['present', 'nullable', 'numeric', 'min:0', 'max:99999999999999'],
]);
$amount = $data['receipt_from_supplier'] === null
? null
: round((float) $data['receipt_from_supplier'], 2);
$companyName = $repository->updateSupplierReceipt($record, $amount, user_id());
abort_if($companyName === null, 404);
$projectionPayload = null;
$projectionError = null;
try {
$projectionPayload = $projection->forMonth();
} catch (Throwable $exception) {
report($exception);
$projectionError = '主体维度报表上月业绩暂时无法读取,已保存供应商收票,其他自动计算暂时保留原值。';
}
$saved = $repository->find($record, $projectionPayload);
$filters = [
'company_name' => (string) $request->input('company_name', ''),
'tag' => (string) $request->input('tag', ''),
];
if ($request->expectsJson()) {
return response()->json([
'ok' => true,
'record' => [
'id' => (int) ($saved['id'] ?? $record),
'receipt_from_supplier' => $saved['receipt_from_supplier'] ?? null,
'receipt_total' => $saved['receipt_total'] ?? null,
'remaining_gap' => $saved['remaining_gap'] ?? null,
],
'summary' => $repository->summary($filters, $projectionPayload),
'warning' => $projectionError,
]);
}
return back()->with(
$projectionError === null ? 'success' : 'warning',
$projectionError ?? '收票-供应商已保存。',
);
}
}