feat:계약일 date input 입력 가능하게 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-19 16:34:07 +09:00
parent 6a7a8d00d0
commit 6a846a1c0d
4 changed files with 59 additions and 2 deletions

View File

@@ -323,6 +323,30 @@ public function updateHqStatus(int $id, Request $request)
]);
}
/**
* 계약일 변경
*/
public function updateContractedDate(int $id, Request $request)
{
$this->checkAdminAccess();
$request->validate([
'contracted_at' => 'nullable|date',
]);
$prospect = TenantProspect::findOrFail($id);
$management = SalesTenantManagement::findOrCreateByProspect($prospect->id);
$management->update([
'contracted_at' => $request->input('contracted_at') ?: null,
]);
return response()->json([
'success' => true,
'contracted_at' => $management->contracted_at?->format('Y-m-d'),
]);
}
/**
* 인계일 수동 변경
*/

View File

@@ -350,6 +350,35 @@ function confirmDelete() {
});
}
// 계약일 저장
function saveContractedDate(prospectId, date, inputEl) {
fetch(`/sales/admin-prospects/${prospectId}/contracted-date`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
'Accept': 'application/json'
},
body: JSON.stringify({ contracted_at: date || null })
})
.then(response => response.json())
.then(result => {
if (result.success && inputEl) {
if (date) {
inputEl.className = 'w-28 h-7 text-xs px-1 border-2 border-blue-400 rounded cursor-pointer hover:border-blue-400 focus:outline-none focus:border-blue-500 text-blue-600 font-medium bg-blue-50';
} else {
inputEl.className = 'w-28 h-7 text-xs px-1 border-2 border-gray-300 rounded cursor-pointer hover:border-blue-400 focus:outline-none focus:border-blue-500 text-gray-500 bg-gray-50';
}
} else if (!result.success) {
alert(result.message || '계약일 저장에 실패했습니다.');
}
})
.catch(error => {
console.error('Error:', error);
alert('계약일 저장 중 오류가 발생했습니다.');
});
}
// 인계일 저장
function saveHandoverDate(prospectId, date) {
if (!date) return;

View File

@@ -148,8 +148,11 @@ class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none foc
$disabledClass = $commissionDisabled ? 'opacity-40 cursor-not-allowed bg-gray-100' : '';
@endphp
{{-- 계약일 --}}
<td class="px-4 py-3 whitespace-nowrap text-center text-sm text-gray-500">
{{ $prospect->contracted_at ? \Carbon\Carbon::parse($prospect->contracted_at)->format('Y-m-d') : '-' }}
<td class="px-1 py-2 whitespace-nowrap text-center">
<input type="date"
class="w-28 h-7 text-xs px-1 border-2 border-gray-300 rounded cursor-pointer hover:border-blue-400 focus:outline-none focus:border-blue-500 {{ $prospect->contracted_at ? 'text-blue-600 font-medium bg-blue-50 border-blue-400' : 'text-gray-500 bg-gray-50' }}"
value="{{ $prospect->contracted_at ? \Carbon\Carbon::parse($prospect->contracted_at)->format('Y-m-d') : '' }}"
onchange="saveContractedDate({{ $prospect->id }}, this.value, this)">
</td>
{{-- 1 납입완료 --}}
<td class="px-1 py-2 whitespace-nowrap text-center">

View File

@@ -1253,6 +1253,7 @@
Route::get('admin-prospects/refresh', [\App\Http\Controllers\Sales\AdminProspectController::class, 'refresh'])->name('admin-prospects.refresh');
Route::get('admin-prospects/{id}/modal-show', [\App\Http\Controllers\Sales\AdminProspectController::class, 'modalShow'])->name('admin-prospects.modal-show');
Route::post('admin-prospects/{id}/hq-status', [\App\Http\Controllers\Sales\AdminProspectController::class, 'updateHqStatus'])->name('admin-prospects.update-hq-status');
Route::post('admin-prospects/{id}/contracted-date', [\App\Http\Controllers\Sales\AdminProspectController::class, 'updateContractedDate'])->name('admin-prospects.update-contracted-date');
Route::post('admin-prospects/{id}/handover-date', [\App\Http\Controllers\Sales\AdminProspectController::class, 'updateHandoverDate'])->name('admin-prospects.update-handover-date');
Route::post('admin-prospects/{id}/commission-date', [\App\Http\Controllers\Sales\AdminProspectController::class, 'updateCommissionDate'])->name('admin-prospects.update-commission-date');
Route::delete('admin-prospects/{id}/commission-date', [\App\Http\Controllers\Sales\AdminProspectController::class, 'clearCommissionDate'])->name('admin-prospects.clear-commission-date');