Enhance production plan service by adding lead time handling. Implemented checks for lead time column in item_info and adjusted scheduling logic accordingly. Updated frontend to reflect lead time in production plan management and shipping order pages, including Excel upload functionality for batch processing.
This commit is contained in:
@@ -822,6 +822,37 @@ export const ExcelUploadModal: React.FC<ExcelUploadModalProps> = ({
|
||||
return true;
|
||||
};
|
||||
|
||||
// 템플릿 다운로드: 테이블 스키마 기반으로 빈 엑셀 파일 생성
|
||||
const handleDownloadTemplate = async () => {
|
||||
try {
|
||||
const { exportToExcel } = await import("@/lib/utils/excelExport");
|
||||
const response = await getTableSchema(tableName);
|
||||
if (!response.success || !response.data) {
|
||||
toast.error("테이블 정보를 가져올 수 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
const AUTO_COLS = ["id", "created_date", "updated_date", "writer", "company_code"];
|
||||
const columns = response.data.columns.filter(
|
||||
(col) => !AUTO_COLS.includes(col.name.toLowerCase())
|
||||
);
|
||||
|
||||
// 필수 컬럼에 * 표시
|
||||
const headerRow: Record<string, any> = {};
|
||||
for (const col of columns) {
|
||||
const label = col.label || col.name;
|
||||
const isRequired = !col.nullable;
|
||||
headerRow[isRequired ? `${label} *` : label] = "";
|
||||
}
|
||||
|
||||
await exportToExcel([headerRow], `${tableName}_템플릿.xlsx`, "Sheet1");
|
||||
toast.success("템플릿 파일이 다운로드되었습니다.");
|
||||
} catch (error) {
|
||||
console.error("템플릿 다운로드 실패:", error);
|
||||
toast.error("템플릿 다운로드에 실패했습니다.");
|
||||
}
|
||||
};
|
||||
|
||||
// 다음 단계
|
||||
const handleNext = async () => {
|
||||
if (currentStep === 1 && !file) {
|
||||
@@ -1607,11 +1638,23 @@ export const ExcelUploadModal: React.FC<ExcelUploadModalProps> = ({
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* 파일 선택 영역 */}
|
||||
{/* 템플릿 다운로드 + 파일 선택 영역 */}
|
||||
<div>
|
||||
<Label htmlFor="file-upload" className="text-xs sm:text-sm">
|
||||
파일 선택 *
|
||||
</Label>
|
||||
<div className="flex items-center justify-between">
|
||||
<Label htmlFor="file-upload" className="text-xs sm:text-sm">
|
||||
파일 선택 *
|
||||
</Label>
|
||||
<Button
|
||||
type="button"
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
className="h-7 gap-1.5 text-xs text-muted-foreground hover:text-foreground"
|
||||
onClick={handleDownloadTemplate}
|
||||
>
|
||||
<ArrowRight className="h-3 w-3 rotate-90" />
|
||||
업로드 템플릿 다운로드
|
||||
</Button>
|
||||
</div>
|
||||
<div
|
||||
onDragOver={handleDragOver}
|
||||
onDragLeave={handleDragLeave}
|
||||
|
||||
Reference in New Issue
Block a user