- {form.id ? "Operasyon Türünü Düzenle" : "Yeni Operasyon Türü"}
+ {form.id ? 'Operasyon Türünü Düzenle' : 'Yeni Operasyon Türü'}
- );
-};
+ )
+}
-export default OperationTypeFormModal;
+export default OperationTypeFormModal
diff --git a/ui/src/views/mrp/components/OperationTypes.tsx b/ui/src/views/mrp/components/OperationTypes.tsx
index 9fb44f25..90973886 100644
--- a/ui/src/views/mrp/components/OperationTypes.tsx
+++ b/ui/src/views/mrp/components/OperationTypes.tsx
@@ -13,12 +13,7 @@ import {
import { MrpOperationTypeDefinition } from '../../../types/mrp'
import OperationTypeFormModal from './OperationTypeFormModal'
import { mockOperationTypes } from '../../../mocks/mockOperationTypes'
-import {
- getOperationCategoryColor,
- getOperationTypeColor,
- getOperationTypeText,
- getSkillLevelText,
-} from '../../../utils/erp'
+import { getOperationTypeColor, getOperationTypeText, getSkillLevelText } from '../../../utils/erp'
import { Container } from '@/components/shared'
const OperationTypes: React.FC = () => {
@@ -261,7 +256,7 @@ const OperationTypes: React.FC = () => {
diff --git a/ui/src/views/mrp/components/PlanningGantt.tsx b/ui/src/views/mrp/components/PlanningGantt.tsx
index b518e394..a28e0795 100644
--- a/ui/src/views/mrp/components/PlanningGantt.tsx
+++ b/ui/src/views/mrp/components/PlanningGantt.tsx
@@ -11,9 +11,9 @@ import { mockEmployees } from '../../../mocks/mockEmployees'
import { mockProductionOrders } from '../../../mocks/mockProductionOrders'
import { mockWorkOrders } from '../../../mocks/mockWorkOrders'
import { mockWorkCenters } from '../../../mocks/mockWorkCenters'
-import { PriorityEnum } from '../../../types/common'
-import { getPriorityColor, getProductionOrderStatus, getWorkOrderStatus } from '../../../utils/erp'
+import { getFrequencyUnitText, getPriorityColor } from '../../../utils/erp'
import { Container } from '@/components/shared'
+import { FrequencyUnitEnum } from '@/types/pm'
interface PlanningGanttProps {
workCenterId?: string
@@ -107,7 +107,7 @@ const PlanningGantt: React.FC = ({ workCenterId }) => {
assignee: wo.assignedOperators[0]
? mockEmployees.find((e) => e.id === wo.assignedOperators[0])
: undefined,
- status: getWorkOrderStatus(wo.status),
+ status: wo.status,
priority: order.priority,
level: 1,
children: [],
@@ -125,7 +125,7 @@ const PlanningGantt: React.FC = ({ workCenterId }) => {
order.confirmedQuantity && order.plannedQuantity
? Math.round((order.confirmedQuantity / order.plannedQuantity) * 100)
: 0,
- status: getProductionOrderStatus(order.status),
+ status: order.status,
priority: order.priority,
level: 0,
children: workOrders,
@@ -480,10 +480,18 @@ const PlanningGantt: React.FC = ({ workCenterId }) => {
onChange={(e) => setViewMode(e.target.value as 'day' | 'week' | 'month' | 'year')}
className="px-2 py-1.5 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500 w-full sm:w-auto"
>
- Günlük
- Haftalık
- Aylık
- Yıllık
+
+ {getFrequencyUnitText(FrequencyUnitEnum.Days)}
+
+
+ {getFrequencyUnitText(FrequencyUnitEnum.Days)}
+
+
+ {getFrequencyUnitText(FrequencyUnitEnum.Days)}
+
+
+ {getFrequencyUnitText(FrequencyUnitEnum.Days)}
+
diff --git a/ui/src/views/mrp/components/ProductionOrderForm.tsx b/ui/src/views/mrp/components/ProductionOrderForm.tsx
index 06b742a6..5817875a 100644
--- a/ui/src/views/mrp/components/ProductionOrderForm.tsx
+++ b/ui/src/views/mrp/components/ProductionOrderForm.tsx
@@ -26,6 +26,12 @@ import { mockMaterials } from '../../../mocks/mockMaterials'
import { PriorityEnum } from '../../../types/common'
import { Container } from '@/components/shared'
import { ROUTES_ENUM } from '@/routes/route.constant'
+import {
+ getPriorityText,
+ getProductionOrderStatusText,
+ getProductionOrderTypeText,
+} from '@/utils/erp'
+import { mockCurrencies } from '@/mocks/mockCurrencies'
const ProductionOrderForm: React.FC = () => {
const { id } = useParams()
@@ -260,10 +266,11 @@ const ProductionOrderForm: React.FC = () => {
onChange={handleChange}
className="w-full px-2 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 bg-gray-50 focus:bg-white"
>
- Standart
- Yeniden İşleme
- Bakım
- Numune
+ {Object.values(ProductionOrderTypeEnum).map((type) => (
+
+ {getProductionOrderTypeText(type)}
+
+ ))}
@@ -275,12 +282,11 @@ const ProductionOrderForm: React.FC = () => {
onChange={handleChange}
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 bg-gray-50 focus:bg-white"
>
- Oluşturuldu
- Yayınlandı
- İşlemde
- Tamamlandı
- İptal Edildi
- Beklemede
+ {Object.values(ProductionOrderStatusEnum).map((status) => (
+
+ {getProductionOrderStatusText(status)}
+
+ ))}
@@ -292,10 +298,11 @@ const ProductionOrderForm: React.FC = () => {
onChange={handleChange}
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 bg-gray-50 focus:bg-white"
>
- Düşük
- Normal
- Yüksek
- Acil
+ {Object.values(PriorityEnum).map((priority) => (
+
+ {getPriorityText(priority)}
+
+ ))}
@@ -469,10 +476,11 @@ const ProductionOrderForm: React.FC = () => {
onChange={handleChange}
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-yellow-500 focus:border-yellow-500 transition-all duration-200 bg-gray-50 focus:bg-white"
>
- TRY
- USD
- EUR
- GBP
+ {mockCurrencies.map((currency) => (
+
+ {currency.value} - {currency.label}
+
+ ))}
diff --git a/ui/src/views/mrp/components/ProductionOrderList.tsx b/ui/src/views/mrp/components/ProductionOrderList.tsx
index 8bf121c1..b2772da1 100644
--- a/ui/src/views/mrp/components/ProductionOrderList.tsx
+++ b/ui/src/views/mrp/components/ProductionOrderList.tsx
@@ -665,12 +665,11 @@ const ProductionOrderList: React.FC = () => {
className="w-full border border-gray-300 rounded-lg px-2 py-1.5 text-sm focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tümü
- Oluşturuldu
- Serbest Bırakıldı
- Devam Ediyor
- Tamamlandı
- Beklemede
- İptal Edildi
+ {Object.values(ProductionOrderStatusEnum).map((status) => (
+
+ {getProductionOrderStatusText(status)}
+
+ ))}
@@ -681,10 +680,11 @@ const ProductionOrderList: React.FC = () => {
className="w-full border border-gray-300 rounded-lg px-2 py-1.5 text-sm focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tümü
- Düşük
- Normal
- Yüksek
- Acil
+ {Object.values(PriorityEnum).map((priority) => (
+
+ {getPriorityText(priority)}
+
+ ))}
diff --git a/ui/src/views/project/components/CostTimeTracking.tsx b/ui/src/views/project/components/CostTimeTracking.tsx
index e4359294..966b3d2d 100644
--- a/ui/src/views/project/components/CostTimeTracking.tsx
+++ b/ui/src/views/project/components/CostTimeTracking.tsx
@@ -8,7 +8,7 @@ import {
FaChartBar,
FaDownload,
} from 'react-icons/fa'
-import { PsProjectCostTracking } from '../../../types/ps'
+import { ProjectCostTrackingStatus, PsProjectCostTracking } from '../../../types/ps'
import { mockProjectCostTracking } from '../../../mocks/mockProjectCostTracking'
import Widget from '../../../components/common/Widget'
import {
@@ -326,10 +326,11 @@ const CostTimeTracking: React.FC = () => {
className="px-3 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tüm Durumlar
- Planında
- Risk Altında
- Gecikmiş
- Tamamlandı
+ {Object.values(ProjectCostTrackingStatus).map((status) => (
+
+ {getCostTimeTrackingStatusText(status)}
+
+ ))}
diff --git a/ui/src/views/project/components/PhaseEditModal.tsx b/ui/src/views/project/components/PhaseEditModal.tsx
index b549e45f..c0704d3b 100644
--- a/ui/src/views/project/components/PhaseEditModal.tsx
+++ b/ui/src/views/project/components/PhaseEditModal.tsx
@@ -1,26 +1,22 @@
-import React, { useState, useEffect } from "react";
-import {
- FaPlus,
- FaEdit,
- FaSave,
- FaTimesCircle,
- FaProjectDiagram,
-} from "react-icons/fa";
+import React, { useState, useEffect } from 'react'
+import { FaPlus, FaEdit, FaSave, FaTimesCircle, FaProjectDiagram } from 'react-icons/fa'
import {
PhaseStatusEnum,
PsProjectPhase,
ProjectStatusEnum,
-} from "../../../types/ps";
-import { mockProjects } from "../../../mocks/mockProjects";
-import { mockProjectPhases } from "../../../mocks/mockProjectPhases";
-import MultiSelectTeam from "../../../components/common/MultiSelectTeam";
+ PhaseCategoryEnum,
+} from '../../../types/ps'
+import { mockProjects } from '../../../mocks/mockProjects'
+import { mockProjectPhases } from '../../../mocks/mockProjectPhases'
+import MultiSelectTeam from '../../../components/common/MultiSelectTeam'
+import { getPhaseCategoryText, getPhaseStatusText } from '@/utils/erp'
interface PhaseEditModalProps {
- isOpen: boolean;
- onClose: () => void;
- phase?: PsProjectPhase | null;
- defaultProjectId?: string;
- onSubmit: (data: PsProjectPhase) => void;
+ isOpen: boolean
+ onClose: () => void
+ phase?: PsProjectPhase | null
+ defaultProjectId?: string
+ onSubmit: (data: PsProjectPhase) => void
}
const PhaseEditModal: React.FC = ({
@@ -30,14 +26,14 @@ const PhaseEditModal: React.FC = ({
defaultProjectId,
onSubmit,
}) => {
- const isEdit = Boolean(phase);
+ const isEdit = Boolean(phase)
const ProjectPhaseNew: PsProjectPhase = {
- id: "",
- projectId: defaultProjectId || "",
- code: "",
- name: "",
- description: "",
+ id: '',
+ projectId: defaultProjectId || '',
+ code: '',
+ name: '',
+ description: '',
sequence: 0,
startDate: new Date(),
endDate: new Date(),
@@ -52,10 +48,10 @@ const PhaseEditModal: React.FC = ({
assignedTeams: [],
deliverables: [],
risks: [],
- category: "",
- };
+ category: PhaseCategoryEnum.Planning,
+ }
- const [formData, setFormData] = useState(ProjectPhaseNew);
+ const [formData, setFormData] = useState(ProjectPhaseNew)
useEffect(() => {
if (isOpen) {
@@ -66,50 +62,48 @@ const PhaseEditModal: React.FC = ({
name: phase.name,
projectId: phase.projectId,
code: phase.code,
- description: phase.description || "",
+ description: phase.description || '',
status: phase.status,
startDate: phase.startDate,
endDate: phase.endDate,
budget: phase.budget,
category: phase.category,
assignedTeams: phase.assignedTeams || [],
- });
+ })
} else {
- setFormData(ProjectPhaseNew);
+ setFormData(ProjectPhaseNew)
}
}
- }, [isOpen, phase, defaultProjectId]);
+ }, [isOpen, phase, defaultProjectId])
const handleInputChange = (
- e: React.ChangeEvent<
- HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement
- >
+ e: React.ChangeEvent,
) => {
- const { name, value } = e.target;
+ const { name, value } = e.target
setFormData((prev) => ({
...prev,
[name]: value,
- }));
- };
+ }))
+ }
const handleTeamChange = (teams: string[]) => {
setFormData((prev) => ({
...prev,
assignedTeams: teams,
- }));
- };
+ }))
+ }
const handleSubmit = (e: React.FormEvent) => {
- e.preventDefault();
- onSubmit(formData);
- };
+ e.preventDefault()
+ onSubmit(formData)
+ }
const generatePhaseCode = () => {
- const phaseCount = mockProjectPhases.length + 1;
- return `PH-${phaseCount.toString().padStart(3, "0")}`;
- };
+ const phaseCount = mockProjectPhases.length + 1
+ return `PH-${phaseCount.toString().padStart(3, '0')}`
+ }
- if (!isOpen) return null;
+ if (!isOpen) return null
return (
@@ -126,12 +120,12 @@ const PhaseEditModal: React.FC
= ({
- {isEdit ? "Aşama Düzenle" : "Yeni Aşama Oluştur"}
+ {isEdit ? 'Aşama Düzenle' : 'Yeni Aşama Oluştur'}
{isEdit
- ? "Mevcut aşama bilgilerini güncelleyin"
- : "Yeni bir proje aşaması tanımlayın"}
+ ? 'Mevcut aşama bilgilerini güncelleyin'
+ : 'Yeni bir proje aşaması tanımlayın'}
@@ -179,9 +173,9 @@ const PhaseEditModal: React.FC = ({
{formData.projectId &&
(() => {
const selectedProject = mockProjects.find(
- (p) => p.id === formData.projectId
- );
- if (!selectedProject) return null;
+ (p) => p.id === formData.projectId,
+ )
+ if (!selectedProject) return null
return (
@@ -195,79 +189,56 @@ const PhaseEditModal: React.FC
= ({
-
- Durum:
-
+ Durum:
- {selectedProject.status ===
- ProjectStatusEnum.Active
- ? "Aktif"
- : selectedProject.status ===
- ProjectStatusEnum.Planning
- ? "Planlama"
- : selectedProject.status ===
- ProjectStatusEnum.Completed
- ? "Tamamlandı"
- : selectedProject.status ===
- ProjectStatusEnum.OnHold
- ? "Beklemede"
- : "İptal"}
+ {selectedProject.status === ProjectStatusEnum.Active
+ ? 'Aktif'
+ : selectedProject.status === ProjectStatusEnum.Planning
+ ? 'Planlama'
+ : selectedProject.status === ProjectStatusEnum.Completed
+ ? 'Tamamlandı'
+ : selectedProject.status === ProjectStatusEnum.OnHold
+ ? 'Beklemede'
+ : 'İptal'}
-
- İlerleme:
-
+ İlerleme:
%{selectedProject.progress}
-
- Başlangıç:
-
+ Başlangıç:
- {selectedProject.startDate.toLocaleDateString(
- "tr-TR"
- )}
+ {selectedProject.startDate.toLocaleDateString('tr-TR')}
-
- Bitiş:
-
+ Bitiş:
- {selectedProject.endDate.toLocaleDateString(
- "tr-TR"
- )}
+ {selectedProject.endDate.toLocaleDateString('tr-TR')}
- ₺
- {selectedProject.budget.toLocaleString(
- "tr-TR"
- )}
-
-
- Bütçe
+ ₺{selectedProject.budget.toLocaleString('tr-TR')}
+
Bütçe
- );
+ )
})()}
@@ -287,9 +258,7 @@ const PhaseEditModal: React.FC = ({
-
- Açıklama
-
+
Açıklama
@@ -369,7 +326,7 @@ const PhaseEditModal: React.FC = ({
@@ -382,7 +339,7 @@ const PhaseEditModal: React.FC = ({
@@ -426,9 +383,7 @@ const PhaseEditModal: React.FC = ({
Aşama Kodu:
-
- {isEdit ? phase?.code : generatePhaseCode()}
-
+ {isEdit ? phase?.code : generatePhaseCode()}
@@ -449,13 +404,13 @@ const PhaseEditModal: React.FC = ({
className="px-4 py-1.5 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors flex items-center gap-2 shadow-md hover:shadow-lg"
>
- {isEdit ? "Güncelle" : "Oluştur"}
+ {isEdit ? 'Güncelle' : 'Oluştur'}
- );
-};
+ )
+}
-export default PhaseEditModal;
+export default PhaseEditModal
diff --git a/ui/src/views/project/components/ProjectForm.tsx b/ui/src/views/project/components/ProjectForm.tsx
index d975122b..b11c45a5 100644
--- a/ui/src/views/project/components/ProjectForm.tsx
+++ b/ui/src/views/project/components/ProjectForm.tsx
@@ -66,6 +66,7 @@ import {
} from '../../../utils/erp'
import { Container } from '@/components/shared'
import { ROUTES_ENUM } from '@/routes/route.constant'
+import { mockCurrencies } from '@/mocks/mockCurrencies'
// Custom styles for the slider
const sliderStyles = `
@@ -810,10 +811,11 @@ const ProjectForm: React.FC = () => {
}`}
>
Tip seçin
- İç Proje
- Müşteri Projesi
- Ar-Ge Projesi
- Bakım Projesi
+ {Object.values(ProjectTypeEnum).map((type) => (
+
+ {getProjectTypeText(type)}
+
+ ))}
{errors.projectType && (
{errors.projectType}
@@ -851,11 +853,11 @@ const ProjectForm: React.FC = () => {
onChange={(e) => handleInputChange('status', e.target.value)}
className="block w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500"
>
- Planlama
- Aktif
- Beklemede
- Tamamlandı
- İptal Edildi
+ {Object.values(ProjectStatusEnum).map((status) => (
+
+ {getProjectStatusText(status)}
+
+ ))}
@@ -868,10 +870,11 @@ const ProjectForm: React.FC = () => {
onChange={(e) => handleInputChange('priority', e.target.value)}
className="block w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500"
>
- Düşük
- Normal
- Yüksek
- Acil
+ {Object.values(PriorityEnum).map((priority) => (
+
+ {priority}
+
+ ))}
@@ -884,9 +887,11 @@ const ProjectForm: React.FC = () => {
onChange={(e) => handleInputChange('currency', e.target.value)}
className="block w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500"
>
- Türk Lirası (TRY)
- Amerikan Doları (USD)
- Euro (EUR)
+ {mockCurrencies.map((currency) => (
+
+ {currency.value} - {currency.label}
+
+ ))}
@@ -1238,9 +1243,11 @@ const ProjectForm: React.FC = () => {
onChange={(e) => handleInputChange('currency', e.target.value)}
className="block w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500"
>
- Türk Lirası (TRY)
- Amerikan Doları (USD)
- Euro (EUR)
+ {mockCurrencies.map((currency) => (
+
+ {currency.value} - {currency.label}
+
+ ))}
diff --git a/ui/src/views/project/components/ProjectGantt.tsx b/ui/src/views/project/components/ProjectGantt.tsx
index 3e61c76c..cc25d24a 100644
--- a/ui/src/views/project/components/ProjectGantt.tsx
+++ b/ui/src/views/project/components/ProjectGantt.tsx
@@ -12,8 +12,9 @@ import { mockProjects } from '../../../mocks/mockProjects'
import { mockProjectPhases } from '../../../mocks/mockProjectPhases'
import { mockProjectTasks } from '../../../mocks/mockProjectTasks'
import { PriorityEnum } from '../../../types/common'
-import { getPriorityColor, getProjectStatusColor } from '../../../utils/erp'
+import { getFrequencyUnitText, getGanttStatusColor, getPriorityColor } from '../../../utils/erp'
import { Container } from '@/components/shared'
+import { FrequencyUnitEnum } from '@/types/pm'
interface ProjectGanttProps {
employeeId?: string
@@ -479,7 +480,7 @@ const ProjectGantt: React.FC = ({ employeeId }) => {
if (task.type === 'task' && position.isVisible) {
return (
= ({ employeeId }) => {
İş Yükü ve Proje Takibi
-
- Tüm görevlerinizi merkezi bir noktadan yönetin.
-
+
Tüm görevlerinizi merkezi bir noktadan yönetin.
@@ -592,7 +591,7 @@ const ProjectGantt: React.FC
= ({ employeeId }) => {
Tüm Çalışanlar
{mockEmployees.map((emp) => (
- {emp.firstName} {emp.lastName}
+ {emp.fullName}
))}
@@ -602,10 +601,18 @@ const ProjectGantt: React.FC = ({ employeeId }) => {
onChange={(e) => setViewMode(e.target.value as 'day' | 'week' | 'month' | 'year')}
className="px-2 py-1.5 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500 w-full sm:w-auto"
>
- Günlük
- Haftalık
- Aylık
- Yıllık
+
+ {getFrequencyUnitText(FrequencyUnitEnum.Days)}
+
+
+ {getFrequencyUnitText(FrequencyUnitEnum.Weeks)}
+
+
+ {getFrequencyUnitText(FrequencyUnitEnum.Months)}
+
+
+ {getFrequencyUnitText(FrequencyUnitEnum.Years)}
+
diff --git a/ui/src/views/project/components/ProjectList.tsx b/ui/src/views/project/components/ProjectList.tsx
index bf34332a..9ad058df 100644
--- a/ui/src/views/project/components/ProjectList.tsx
+++ b/ui/src/views/project/components/ProjectList.tsx
@@ -201,11 +201,11 @@ const ProjectList: React.FC = () => {
className="w-full border border-gray-300 rounded-lg px-3 py-1.5 focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tümü
- Planlama
- Aktif
- Beklemede
- Tamamlandı
- İptal Edildi
+ {Object.values(ProjectStatusEnum).map((status) => (
+
+ {getProjectStatusText(status)}
+
+ ))}
@@ -217,10 +217,11 @@ const ProjectList: React.FC = () => {
className="w-full border border-gray-300 rounded-lg px-3 py-1.5 focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tümü
- Düşük
- Normal
- Yüksek
- Acil
+ {Object.values(PriorityEnum).map((priority) => (
+
+ {getPriorityText(priority)}
+
+ ))}
diff --git a/ui/src/views/project/components/ProjectPhases.tsx b/ui/src/views/project/components/ProjectPhases.tsx
index c8105718..5648c205 100644
--- a/ui/src/views/project/components/ProjectPhases.tsx
+++ b/ui/src/views/project/components/ProjectPhases.tsx
@@ -12,7 +12,12 @@ import {
FaSave,
FaProjectDiagram,
} from 'react-icons/fa'
-import { PhaseStatusEnum, PsProjectPhase, ProjectStatusEnum } from '../../../types/ps'
+import {
+ PhaseStatusEnum,
+ PsProjectPhase,
+ ProjectStatusEnum,
+ PhaseCategoryEnum,
+} from '../../../types/ps'
import { mockProjectPhases } from '../../../mocks/mockProjectPhases'
import { mockProjects } from '../../../mocks/mockProjects'
import MultiSelectTeam from '../../../components/common/MultiSelectTeam'
@@ -23,6 +28,8 @@ import {
getPhaseStatusIcon,
getPhaseStatusText,
getPhaseStatusColor,
+ getProjectStatusText,
+ getPhaseCategoryText,
} from '../../../utils/erp'
import { Container } from '@/components/shared'
@@ -45,7 +52,7 @@ const ProjectPhases: React.FC = () => {
startDate: '',
endDate: '',
budget: 0,
- category: '',
+ category: PhaseCategoryEnum.Planning,
assignedTeams: [] as string[],
})
@@ -93,7 +100,7 @@ const ProjectPhases: React.FC = () => {
startDate: '',
endDate: '',
budget: 0,
- category: '',
+ category: PhaseCategoryEnum.Planning,
assignedTeams: [],
})
setIsCreateModalOpen(true)
@@ -247,11 +254,11 @@ const ProjectPhases: React.FC = () => {
className="px-2 py-1 text-sm border border-gray-300 rounded-lg focus:ring-blue-500 focus:border-blue-500"
>
Tüm Durumlar
- Başlanmadı
- Devam Ediyor
- Beklemede
- Tamamlandı
- İptal Edildi
+ {Object.values(ProjectStatusEnum).map((status) => (
+
+ {getProjectStatusText(status)}
+
+ ))}
@@ -862,11 +869,11 @@ const ProjectPhases: React.FC = () => {
className="w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors"
>
Kategori seçin...
- Planlama
- Geliştirme
- Test
- Dağıtım
- Tasarım
+ {Object.values(PhaseCategoryEnum).map((cat) => (
+
+ {getPhaseCategoryText(cat)}
+
+ ))}
@@ -880,11 +887,11 @@ const ProjectPhases: React.FC = () => {
onChange={handleInputChange}
className="w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors"
>
- Başlanmadı
- Devam Ediyor
- Tamamlandı
- Beklemede
- İptal Edildi
+ {Object.values(PhaseStatusEnum).map((status) => (
+
+ {getPhaseStatusText(status)}
+
+ ))}
diff --git a/ui/src/views/project/components/ProjectTasks.tsx b/ui/src/views/project/components/ProjectTasks.tsx
index d56672ae..801c7164 100644
--- a/ui/src/views/project/components/ProjectTasks.tsx
+++ b/ui/src/views/project/components/ProjectTasks.tsx
@@ -1,5 +1,5 @@
-import React, { useState } from "react";
-import { PsProjectTask, TaskTypeEnum, TaskStatusEnum } from "../../../types/ps";
+import React, { useState } from 'react'
+import { PsProjectTask, TaskTypeEnum, TaskStatusEnum } from '../../../types/ps'
import {
FaSearch,
FaPlus,
@@ -13,158 +13,157 @@ import {
FaFlag,
FaProjectDiagram,
FaUserCog,
-} from "react-icons/fa";
-import { mockProjectTasks } from "../../../mocks/mockProjectTasks";
-import { mockEmployees } from "../../../mocks/mockEmployees";
-import { mockProjects } from "../../../mocks/mockProjects";
-import { mockProjectPhases } from "../../../mocks/mockProjectPhases";
-import Widget from "../../../components/common/Widget";
-import { PriorityEnum } from "../../../types/common";
+} from 'react-icons/fa'
+import { mockProjectTasks } from '../../../mocks/mockProjectTasks'
+import { mockEmployees } from '../../../mocks/mockEmployees'
+import { mockProjects } from '../../../mocks/mockProjects'
+import { mockProjectPhases } from '../../../mocks/mockProjectPhases'
+import Widget from '../../../components/common/Widget'
+import { PriorityEnum } from '../../../types/common'
import {
getTaskStatusColor,
getTaskStatusIcon,
getPriorityColor,
getTaskTypeColor,
-} from "../../../utils/erp";
-import { Container } from "@/components/shared";
+ getPriorityText,
+ getTaskStatusText,
+ getTaskTypeText,
+} from '../../../utils/erp'
+import { Container } from '@/components/shared'
const ProjectTasks: React.FC = () => {
- const [searchTerm, setSearchTerm] = useState("");
- const [statusFilter, setStatusFilter] = useState("");
- const [selectedProjectFilter, setSelectedProjectFilter] = useState("All");
- const [selectedTask, setSelectedTask] = useState(null);
- const [isModalOpen, setIsModalOpen] = useState(false);
- const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
- const [isEditModalOpen, setIsEditModalOpen] = useState(false);
- const [editingTask, setEditingTask] = useState(null);
+ const [searchTerm, setSearchTerm] = useState('')
+ const [statusFilter, setStatusFilter] = useState('')
+ const [selectedProjectFilter, setSelectedProjectFilter] = useState('All')
+ const [selectedTask, setSelectedTask] = useState(null)
+ const [isModalOpen, setIsModalOpen] = useState(false)
+ const [isCreateModalOpen, setIsCreateModalOpen] = useState(false)
+ const [isEditModalOpen, setIsEditModalOpen] = useState(false)
+ const [editingTask, setEditingTask] = useState(null)
// Form state for creating/editing tasks
const [formData, setFormData] = useState({
- name: "",
- description: "",
- projectId: "",
- phaseId: "",
+ name: '',
+ description: '',
+ projectId: '',
+ phaseId: '',
taskType: TaskTypeEnum.Development,
status: TaskStatusEnum.NotStarted,
priority: PriorityEnum.Normal,
- assignedTo: "",
- assigneeEmail: "",
- startDate: "",
- endDate: "",
+ assignedTo: '',
+ assigneeEmail: '',
+ startDate: '',
+ endDate: '',
estimatedHours: 0,
progress: 0,
- });
+ })
const filteredTasks = mockProjectTasks.filter((task) => {
const matchesSearch =
task.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
task.taskCode.toLowerCase().includes(searchTerm.toLowerCase()) ||
- (task.description &&
- task.description.toLowerCase().includes(searchTerm.toLowerCase()));
- const matchesStatus = statusFilter === "" || task.status === statusFilter;
+ (task.description && task.description.toLowerCase().includes(searchTerm.toLowerCase()))
+ const matchesStatus = statusFilter === '' || task.status === statusFilter
const matchesProject =
- selectedProjectFilter === "All" ||
- task.projectId === selectedProjectFilter;
- return matchesSearch && matchesStatus && matchesProject;
- });
+ selectedProjectFilter === 'All' || task.projectId === selectedProjectFilter
+ return matchesSearch && matchesStatus && matchesProject
+ })
const openModal = (task: PsProjectTask) => {
- setSelectedTask(task);
- setIsModalOpen(true);
- };
+ setSelectedTask(task)
+ setIsModalOpen(true)
+ }
const closeModal = () => {
- setSelectedTask(null);
- setIsModalOpen(false);
- };
+ setSelectedTask(null)
+ setIsModalOpen(false)
+ }
const openCreateModal = () => {
setFormData({
- name: "",
- description: "",
- projectId: "",
- phaseId: "",
+ name: '',
+ description: '',
+ projectId: '',
+ phaseId: '',
taskType: TaskTypeEnum.Development,
status: TaskStatusEnum.NotStarted,
priority: PriorityEnum.Normal,
- assignedTo: "",
- assigneeEmail: "",
- startDate: "",
- endDate: "",
+ assignedTo: '',
+ assigneeEmail: '',
+ startDate: '',
+ endDate: '',
estimatedHours: 0,
progress: 0,
- });
- setIsCreateModalOpen(true);
- };
+ })
+ setIsCreateModalOpen(true)
+ }
const closeCreateModal = () => {
- setIsCreateModalOpen(false);
- };
+ setIsCreateModalOpen(false)
+ }
const openEditModal = (task: PsProjectTask) => {
- setEditingTask(task);
+ setEditingTask(task)
setFormData({
name: task.name,
- description: task.description || "",
- projectId: task.projectId || "",
- phaseId: task.phaseId || "",
+ description: task.description || '',
+ projectId: task.projectId || '',
+ phaseId: task.phaseId || '',
taskType: task.taskType,
status: task.status,
priority: task.priority,
- assignedTo: task.assignedTo || "",
- assigneeEmail: task.assignee?.email || "",
- startDate: task.startDate.toISOString().split("T")[0],
- endDate: task.endDate.toISOString().split("T")[0],
+ assignedTo: task.assignedTo || '',
+ assigneeEmail: task.assignee?.email || '',
+ startDate: task.startDate.toISOString().split('T')[0],
+ endDate: task.endDate.toISOString().split('T')[0],
estimatedHours: task.estimatedHours,
progress: task.progress,
- });
- setIsEditModalOpen(true);
- };
+ })
+ setIsEditModalOpen(true)
+ }
const closeEditModal = () => {
- setIsEditModalOpen(false);
- setEditingTask(null);
- };
+ setIsEditModalOpen(false)
+ setEditingTask(null)
+ }
const handleInputChange = (
- e: React.ChangeEvent<
- HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement
- >
+ e: React.ChangeEvent,
) => {
- const { name, value } = e.target;
+ const { name, value } = e.target
// Eğer atanan kişi seçimi yapılıyorsa, e-posta adresini otomatik doldur
- if (name === "assignedTo") {
- const selectedEmployee = mockEmployees.find((emp) => emp.id === value);
+ if (name === 'assignedTo') {
+ const selectedEmployee = mockEmployees.find((emp) => emp.id === value)
setFormData((prev) => ({
...prev,
[name]: value,
- assigneeEmail: selectedEmployee?.email || "",
- }));
+ assigneeEmail: selectedEmployee?.email || '',
+ }))
} else {
setFormData((prev) => ({
...prev,
[name]: value,
- }));
+ }))
}
- };
+ }
const handleSubmit = (e: React.FormEvent) => {
- e.preventDefault();
+ e.preventDefault()
// Here you would normally save to backend
- console.log("Saving task:", formData);
- alert(isEditModalOpen ? "Görev güncellendi!" : "Yeni görev oluşturuldu!");
+ console.log('Saving task:', formData)
+ alert(isEditModalOpen ? 'Görev güncellendi!' : 'Yeni görev oluşturuldu!')
if (isEditModalOpen) {
- closeEditModal();
+ closeEditModal()
} else {
- closeCreateModal();
+ closeCreateModal()
}
- };
+ }
const generateTaskCode = () => {
- const taskCount = mockProjectTasks.length + 1;
- return `TSK-${taskCount.toString().padStart(3, "0")}`;
- };
+ const taskCount = mockProjectTasks.length + 1
+ return `TSK-${taskCount.toString().padStart(3, '0')}`
+ }
return (
@@ -172,9 +171,7 @@ const ProjectTasks: React.FC = () => {
Görev Yönetimi
-
- Proje görevlerinizi oluşturun, düzenleyin ve takip edin
-
+
Proje görevlerinizi oluşturun, düzenleyin ve takip edin
{
t.status === TaskStatusEnum.InProgress
- ).length
- }
+ value={mockProjectTasks.filter((t) => t.status === TaskStatusEnum.InProgress).length}
color="yellow"
icon="FaClock"
/>
t.status === TaskStatusEnum.Completed
- ).length
- }
+ value={mockProjectTasks.filter((t) => t.status === TaskStatusEnum.Completed).length}
color="green"
icon="FaCheckCircle"
/>
@@ -222,9 +211,9 @@ const ProjectTasks: React.FC = () => {
mockProjectTasks.length > 0
? `${Math.round(
mockProjectTasks.reduce((sum, t) => sum + t.progress, 0) /
- mockProjectTasks.length
+ mockProjectTasks.length,
)}%`
- : "0%"
+ : '0%'
}
color="red"
icon="FaBullseye"
@@ -260,17 +249,15 @@ const ProjectTasks: React.FC = () => {
- setStatusFilter(e.target.value as TaskStatusEnum | "")
- }
+ onChange={(e) => setStatusFilter(e.target.value as TaskStatusEnum | '')}
className="w-full px-2.5 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
>
Tüm Durumlar
- Başlanmadı
- Devam Ediyor
- Tamamlandı
- Beklemede
- İptal Edildi
+ {Object.values(TaskStatusEnum).map((status) => (
+
+ {getTaskStatusText(status)}
+
+ ))}
@@ -316,25 +303,21 @@ const ProjectTasks: React.FC = () => {
{(() => {
- const project = mockProjects.find(
- (p) => p.id === task.projectId
- );
- return project?.name || `Proje ID: ${task.projectId}`;
+ const project = mockProjects.find((p) => p.id === task.projectId)
+ return project?.name || `Proje ID: ${task.projectId}`
})()}
{(() => {
- const project = mockProjects.find(
- (p) => p.id === task.projectId
- );
- return project?.code || task.projectId;
+ const project = mockProjects.find((p) => p.id === task.projectId)
+ return project?.code || task.projectId
})()}
@@ -344,19 +327,15 @@ const ProjectTasks: React.FC = () => {
{task.phase?.name ||
(() => {
- const phase = mockProjectPhases.find(
- (p) => p.id === task.phaseId
- );
- return phase?.name || `Aşama ID: ${task.phaseId}`;
+ const phase = mockProjectPhases.find((p) => p.id === task.phaseId)
+ return phase?.name || `Aşama ID: ${task.phaseId}`
})()}
{task.phase?.code ||
(() => {
- const phase = mockProjectPhases.find(
- (p) => p.id === task.phaseId
- );
- return phase?.code || task.phaseId;
+ const phase = mockProjectPhases.find((p) => p.id === task.phaseId)
+ return phase?.code || task.phaseId
})()}
@@ -375,7 +354,7 @@ const ProjectTasks: React.FC = () => {
{getTaskStatusIcon(task.status)}
@@ -385,7 +364,7 @@ const ProjectTasks: React.FC = () => {
{task.priority}
@@ -397,7 +376,7 @@ const ProjectTasks: React.FC = () => {
- {task.assignee?.fullName || "-"}
+ {task.assignee?.fullName || '-'}
@@ -415,7 +394,7 @@ const ProjectTasks: React.FC = () => {
- {task.endDate.toLocaleDateString("tr-TR")}
+ {task.endDate.toLocaleDateString('tr-TR')}
@@ -446,12 +425,9 @@ const ProjectTasks: React.FC = () => {
-
- Görev bulunamadı
-
+
Görev bulunamadı
- Arama kriterlerinizi değiştirmeyi deneyin veya yeni bir görev
- oluşturun.
+ Arama kriterlerinizi değiştirmeyi deneyin veya yeni bir görev oluşturun.
)}
@@ -500,20 +476,17 @@ const ProjectTasks: React.FC = () => {
{(() => {
const project = mockProjects.find(
- (p) => p.id === selectedTask.projectId
- );
- return (
- project?.name ||
- `Proje ID: ${selectedTask.projectId}`
- );
+ (p) => p.id === selectedTask.projectId,
+ )
+ return project?.name || `Proje ID: ${selectedTask.projectId}`
})()}
{(() => {
const project = mockProjects.find(
- (p) => p.id === selectedTask.projectId
- );
- return project?.code || selectedTask.projectId;
+ (p) => p.id === selectedTask.projectId,
+ )
+ return project?.code || selectedTask.projectId
})()}
@@ -528,21 +501,18 @@ const ProjectTasks: React.FC = () => {
{selectedTask.phase?.name ||
(() => {
const phase = mockProjectPhases.find(
- (p) => p.id === selectedTask.phaseId
- );
- return (
- phase?.name ||
- `Aşama ID: ${selectedTask.phaseId}`
- );
+ (p) => p.id === selectedTask.phaseId,
+ )
+ return phase?.name || `Aşama ID: ${selectedTask.phaseId}`
})()}
{selectedTask.phase?.code ||
(() => {
const phase = mockProjectPhases.find(
- (p) => p.id === selectedTask.phaseId
- );
- return phase?.code || selectedTask.phaseId;
+ (p) => p.id === selectedTask.phaseId,
+ )
+ return phase?.code || selectedTask.phaseId
})()}
@@ -554,7 +524,7 @@ const ProjectTasks: React.FC = () => {
Açıklama
- {selectedTask.description || "Açıklama bulunmuyor."}
+ {selectedTask.description || 'Açıklama bulunmuyor.'}
@@ -565,7 +535,7 @@ const ProjectTasks: React.FC = () => {
{selectedTask.taskType}
@@ -577,7 +547,7 @@ const ProjectTasks: React.FC = () => {
{getTaskStatusIcon(selectedTask.status)}
@@ -592,7 +562,7 @@ const ProjectTasks: React.FC = () => {
{selectedTask.priority}
@@ -612,9 +582,7 @@ const ProjectTasks: React.FC = () => {
{selectedTask.assignee.fullName}
-
- {selectedTask.assignee.email}
-
+ {selectedTask.assignee.email}
) : (
@@ -641,7 +609,7 @@ const ProjectTasks: React.FC = () => {
Planlanan Başlangıç
- {selectedTask.startDate.toLocaleDateString("tr-TR")}
+ {selectedTask.startDate.toLocaleDateString('tr-TR')}
@@ -649,9 +617,8 @@ const ProjectTasks: React.FC = () => {
Gerçek Başlangıç
- {selectedTask.actualStartDate?.toLocaleDateString(
- "tr-TR"
- ) || "Henüz başlanmadı"}
+ {selectedTask.actualStartDate?.toLocaleDateString('tr-TR') ||
+ 'Henüz başlanmadı'}
@@ -662,7 +629,7 @@ const ProjectTasks: React.FC = () => {
Planlanan Bitiş
- {selectedTask.endDate.toLocaleDateString("tr-TR")}
+ {selectedTask.endDate.toLocaleDateString('tr-TR')}
@@ -670,9 +637,8 @@ const ProjectTasks: React.FC = () => {
Gerçek Bitiş
- {selectedTask.actualEndDate?.toLocaleDateString(
- "tr-TR"
- ) || "Henüz tamamlanmadı"}
+ {selectedTask.actualEndDate?.toLocaleDateString('tr-TR') ||
+ 'Henüz tamamlanmadı'}
@@ -727,9 +693,7 @@ const ProjectTasks: React.FC = () => {
Oluşturulma
- {selectedTask.creationTime.toLocaleDateString(
- "tr-TR"
- )}
+ {selectedTask.creationTime.toLocaleDateString('tr-TR')}
@@ -737,9 +701,7 @@ const ProjectTasks: React.FC = () => {
Son Güncelleme
- {selectedTask.lastModificationTime.toLocaleDateString(
- "tr-TR"
- )}
+ {selectedTask.lastModificationTime.toLocaleDateString('tr-TR')}
@@ -759,8 +721,8 @@ const ProjectTasks: React.FC = () => {
{
- closeModal();
- openEditModal(selectedTask!);
+ closeModal()
+ openEditModal(selectedTask!)
}}
className="px-3 py-1 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors flex items-center gap-1.5 shadow-sm"
>
@@ -788,12 +750,12 @@ const ProjectTasks: React.FC = () => {
- {isEditModalOpen ? "Görev Düzenle" : "Yeni Görev Oluştur"}
+ {isEditModalOpen ? 'Görev Düzenle' : 'Yeni Görev Oluştur'}
{isEditModalOpen
- ? "Mevcut görev bilgilerini güncelleyin"
- : "Yeni bir görev tanımlayın"}
+ ? 'Mevcut görev bilgilerini güncelleyin'
+ : 'Yeni bir görev tanımlayın'}
@@ -850,16 +812,11 @@ const ProjectTasks: React.FC = () => {
disabled={!formData.projectId}
>
- {formData.projectId
- ? "Aşama seçin..."
- : "Önce proje seçin"}
+ {formData.projectId ? 'Aşama seçin...' : 'Önce proje seçin'}
{formData.projectId &&
mockProjectPhases
- .filter(
- (phase) =>
- phase.projectId === formData.projectId
- )
+ .filter((phase) => phase.projectId === formData.projectId)
.map((phase) => (
{phase.code} - {phase.name}
@@ -907,18 +864,11 @@ const ProjectTasks: React.FC = () => {
onChange={handleInputChange}
className="w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors"
>
-
- Geliştirme
-
- Test
-
- Dokümantasyon
-
- İnceleme
-
- Dağıtım
-
- Toplantı
+ {Object.values(TaskTypeEnum).map((type) => (
+
+ {getTaskTypeText(type)}
+
+ ))}
@@ -932,10 +882,11 @@ const ProjectTasks: React.FC = () => {
onChange={handleInputChange}
className="w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors"
>
- Düşük
- Normal
- Yüksek
- Acil
+ {Object.values(PriorityEnum).map((priority) => (
+
+ {getPriorityText(priority)}
+
+ ))}
@@ -949,21 +900,11 @@ const ProjectTasks: React.FC = () => {
onChange={handleInputChange}
className="w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors"
>
-
- Başlanmadı
-
-
- Devam Ediyor
-
-
- Tamamlandı
-
-
- Beklemede
-
-
- İptal Edildi
-
+ {Object.values(TaskStatusEnum).map((status) => (
+
+ {getTaskStatusText(status)}
+
+ ))}
@@ -994,8 +935,7 @@ const ProjectTasks: React.FC = () => {
.filter((emp) => emp.isActive)
.map((employee) => (
- {employee.fullName} -{" "}
- {employee.jobPosition?.name}
+ {employee.fullName} - {employee.jobPosition?.name}
))}
@@ -1021,8 +961,8 @@ const ProjectTasks: React.FC = () => {
{(() => {
const selectedEmployee = mockEmployees.find(
- (emp) => emp.id === formData.assignedTo
- );
+ (emp) => emp.id === formData.assignedTo,
+ )
return selectedEmployee ? (
@@ -1040,7 +980,7 @@ const ProjectTasks: React.FC = () => {
- ) : null;
+ ) : null
})()}
)}
@@ -1126,9 +1066,7 @@ const ProjectTasks: React.FC = () => {
Görev Kodu:
- {isEditModalOpen
- ? editingTask?.taskCode
- : generateTaskCode()}
+ {isEditModalOpen ? editingTask?.taskCode : generateTaskCode()}
@@ -1150,7 +1088,7 @@ const ProjectTasks: React.FC = () => {
className="px-3 py-1 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors flex items-center gap-1.5 shadow-md"
>
- {isEditModalOpen ? "Güncelle" : "Oluştur"}
+ {isEditModalOpen ? 'Güncelle' : 'Oluştur'}
@@ -1158,8 +1096,7 @@ const ProjectTasks: React.FC = () => {
)}
+ )
+}
- );
-};
-
-export default ProjectTasks;
+export default ProjectTasks
diff --git a/ui/src/views/project/components/TaskEditModal.tsx b/ui/src/views/project/components/TaskEditModal.tsx
index 75977615..d028a6ae 100644
--- a/ui/src/views/project/components/TaskEditModal.tsx
+++ b/ui/src/views/project/components/TaskEditModal.tsx
@@ -1,5 +1,5 @@
-import React, { useState, useEffect } from "react";
-import { PsProjectTask, TaskTypeEnum, TaskStatusEnum } from "../../../types/ps";
+import React, { useState, useEffect } from 'react'
+import { PsProjectTask, TaskTypeEnum, TaskStatusEnum } from '../../../types/ps'
import {
FaPlus,
FaEdit,
@@ -10,39 +10,40 @@ import {
FaUserCog,
FaSave,
FaTimesCircle,
-} from "react-icons/fa";
-import { mockEmployees } from "../../../mocks/mockEmployees";
-import { mockProjects } from "../../../mocks/mockProjects";
-import { mockProjectPhases } from "../../../mocks/mockProjectPhases";
-import { PriorityEnum } from "../../../types/common";
+} from 'react-icons/fa'
+import { mockEmployees } from '../../../mocks/mockEmployees'
+import { mockProjects } from '../../../mocks/mockProjects'
+import { mockProjectPhases } from '../../../mocks/mockProjectPhases'
+import { PriorityEnum } from '../../../types/common'
+import { getPriorityText, getTaskStatusText, getTaskTypeText } from '@/utils/erp'
export interface TaskFormData {
- name: string;
- description: string;
- projectId: string;
- phaseId: string;
- taskType: TaskTypeEnum;
- status: TaskStatusEnum;
- priority: PriorityEnum;
- assignedTo: string;
- assigneeEmail: string;
- startDate: string;
- endDate: string;
- estimatedHours: number;
- progress: number;
+ name: string
+ description: string
+ projectId: string
+ phaseId: string
+ taskType: TaskTypeEnum
+ status: TaskStatusEnum
+ priority: PriorityEnum
+ assignedTo: string
+ assigneeEmail: string
+ startDate: string
+ endDate: string
+ estimatedHours: number
+ progress: number
}
interface TaskEditModalProps {
- isOpen: boolean;
- onClose: () => void;
- task?: PsProjectTask | null;
- onSubmit: (taskData: TaskFormData) => void;
- mode: "create" | "edit";
- defaultProjectId?: string;
+ isOpen: boolean
+ onClose: () => void
+ task?: PsProjectTask | null
+ onSubmit: (taskData: TaskFormData) => void
+ mode: 'create' | 'edit'
+ defaultProjectId?: string
}
const inputClasses =
- "w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors";
+ 'w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors'
const TaskEditModal: React.FC = ({
isOpen,
@@ -53,91 +54,89 @@ const TaskEditModal: React.FC = ({
defaultProjectId,
}) => {
const [formData, setFormData] = useState({
- name: "",
- description: "",
- projectId: "",
- phaseId: "",
+ name: '',
+ description: '',
+ projectId: '',
+ phaseId: '',
taskType: TaskTypeEnum.Development,
status: TaskStatusEnum.NotStarted,
priority: PriorityEnum.Normal,
- assignedTo: "",
- assigneeEmail: "",
- startDate: "",
- endDate: "",
+ assignedTo: '',
+ assigneeEmail: '',
+ startDate: '',
+ endDate: '',
estimatedHours: 0,
progress: 0,
- });
+ })
const generateTaskCode = () => {
- const taskCount = 1; // Bu gerçek uygulamada dinamik olarak hesaplanmalı
- return `TSK-${taskCount.toString().padStart(3, "0")}`;
- };
+ const taskCount = 1 // Bu gerçek uygulamada dinamik olarak hesaplanmalı
+ return `TSK-${taskCount.toString().padStart(3, '0')}`
+ }
useEffect(() => {
- if (mode === "edit" && task) {
+ if (mode === 'edit' && task) {
setFormData({
name: task.name,
- description: task.description || "",
+ description: task.description || '',
projectId: task.projectId,
- phaseId: task.phaseId || "",
+ phaseId: task.phaseId || '',
taskType: task.taskType,
status: task.status,
priority: task.priority,
- assignedTo: task.assignedTo || "",
- assigneeEmail: task.assignee?.email || "",
- startDate: task.startDate.toISOString().split("T")[0],
- endDate: task.endDate.toISOString().split("T")[0],
+ assignedTo: task.assignedTo || '',
+ assigneeEmail: task.assignee?.email || '',
+ startDate: task.startDate.toISOString().split('T')[0],
+ endDate: task.endDate.toISOString().split('T')[0],
estimatedHours: task.estimatedHours,
progress: task.progress,
- });
+ })
} else {
// Reset form for create mode
setFormData({
- name: "",
- description: "",
- projectId: defaultProjectId || "",
- phaseId: "",
+ name: '',
+ description: '',
+ projectId: defaultProjectId || '',
+ phaseId: '',
taskType: TaskTypeEnum.Development,
status: TaskStatusEnum.NotStarted,
priority: PriorityEnum.Normal,
- assignedTo: "",
- assigneeEmail: "",
- startDate: "",
- endDate: "",
+ assignedTo: '',
+ assigneeEmail: '',
+ startDate: '',
+ endDate: '',
estimatedHours: 0,
progress: 0,
- });
+ })
}
- }, [mode, task, isOpen, defaultProjectId]);
+ }, [mode, task, isOpen, defaultProjectId])
const handleInputChange = (
- e: React.ChangeEvent<
- HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement
- >
+ e: React.ChangeEvent,
) => {
- const { name, value } = e.target;
+ const { name, value } = e.target
setFormData((prev) => ({
...prev,
[name]: value,
- }));
+ }))
// Auto-fill email when employee is selected
- if (name === "assignedTo") {
- const selectedEmployee = mockEmployees.find((emp) => emp.id === value);
+ if (name === 'assignedTo') {
+ const selectedEmployee = mockEmployees.find((emp) => emp.id === value)
setFormData((prev) => ({
...prev,
- assigneeEmail: selectedEmployee?.email || "",
- }));
+ assigneeEmail: selectedEmployee?.email || '',
+ }))
}
- };
+ }
const handleSubmit = (e: React.FormEvent) => {
- e.preventDefault();
- onSubmit(formData);
- onClose();
- };
+ e.preventDefault()
+ onSubmit(formData)
+ onClose()
+ }
- if (!isOpen) return null;
+ if (!isOpen) return null
return (
@@ -146,7 +145,7 @@ const TaskEditModal: React.FC
= ({
- {mode === "edit" ? (
+ {mode === 'edit' ? (
) : (
@@ -154,12 +153,12 @@ const TaskEditModal: React.FC = ({
- {mode === "edit" ? "Görev Düzenle" : "Yeni Görev Oluştur"}
+ {mode === 'edit' ? 'Görev Düzenle' : 'Yeni Görev Oluştur'}
- {mode === "edit"
- ? "Mevcut görev bilgilerini güncelleyin"
- : "Yeni bir görev tanımlayın"}
+ {mode === 'edit'
+ ? 'Mevcut görev bilgilerini güncelleyin'
+ : 'Yeni bir görev tanımlayın'}
@@ -217,15 +216,11 @@ const TaskEditModal: React.FC
= ({
disabled={!formData.projectId}
>
- {formData.projectId
- ? "Aşama seçin..."
- : "Önce proje seçin"}
+ {formData.projectId ? 'Aşama seçin...' : 'Önce proje seçin'}
{formData.projectId &&
mockProjectPhases
- .filter(
- (phase) => phase.projectId === formData.projectId
- )
+ .filter((phase) => phase.projectId === formData.projectId)
.map((phase) => (
{phase.code} - {phase.name}
@@ -250,9 +245,7 @@ const TaskEditModal: React.FC = ({
-
- Açıklama
-
+ Açıklama
-
- Öncelik
-
+ Öncelik
- Düşük
- Normal
- Yüksek
- Acil
+ {Object.values(PriorityEnum).map((priority) => (
+
+ {getPriorityText(priority)}
+
+ ))}
-
- Durum
-
+ Durum
-
- Başlanmadı
-
-
- Devam Ediyor
-
-
- Tamamlandı
-
- Beklemede
-
- İptal Edildi
-
+ {Object.values(TaskStatusEnum).map((status) => (
+
+ {getTaskStatusText(status)}
+
+ ))}
@@ -363,9 +340,7 @@ const TaskEditModal: React.FC = ({
-
- E-posta
-
+
E-posta
= ({
{formData.assignedTo &&
(() => {
const selectedEmployee = mockEmployees.find(
- (emp) => emp.id === formData.assignedTo
- );
+ (emp) => emp.id === formData.assignedTo,
+ )
return selectedEmployee ? (
@@ -400,7 +375,7 @@ const TaskEditModal: React.FC = ({
- ) : null;
+ ) : null
})()}
@@ -448,7 +423,7 @@ const TaskEditModal: React.FC = ({
/>
- {mode === "edit" && (
+ {mode === 'edit' && (
İlerleme (%)
@@ -484,7 +459,7 @@ const TaskEditModal: React.FC = ({
Görev Kodu:
- {mode === "edit" ? task?.taskCode : generateTaskCode()}
+ {mode === 'edit' ? task?.taskCode : generateTaskCode()}
@@ -506,13 +481,13 @@ const TaskEditModal: React.FC = ({
className="px-3 py-1 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors flex items-center gap-1.5 shadow-md hover:shadow-lg"
>
- {mode === "edit" ? "Güncelle" : "Oluştur"}
+ {mode === 'edit' ? 'Güncelle' : 'Oluştur'}
- );
-};
+ )
+}
-export default TaskEditModal;
+export default TaskEditModal
diff --git a/ui/src/views/supplychain/components/ApprovalWorkflowModal.tsx b/ui/src/views/supplychain/components/ApprovalWorkflowModal.tsx
index c35c649e..1d8836f8 100644
--- a/ui/src/views/supplychain/components/ApprovalWorkflowModal.tsx
+++ b/ui/src/views/supplychain/components/ApprovalWorkflowModal.tsx
@@ -8,6 +8,7 @@ import {
} from '../../../types/mm'
import MultiSelectEmployee from '../../../components/common/MultiSelectEmployee'
import { mockDepartments } from '../../../mocks/mockDepartments'
+import { getApprovalLevelText, getRequestTypeText } from '@/utils/erp'
interface ApprovalWorkflowModalProps {
isOpen: boolean
@@ -195,10 +196,11 @@ const ApprovalWorkflowModal: React.FC = ({
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Malzeme
- Hizmet
- İş Merkezi
- Bakım
+ {Object.values(RequestTypeEnum).map((type) => (
+
+ {getRequestTypeText(type)}
+
+ ))}
@@ -276,14 +278,11 @@ const ApprovalWorkflowModal: React.FC = ({
disabled={isReadOnly}
className="mt-1 block w-full text-sm border border-gray-300 rounded-md px-2 py-1 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Süpervizör
- Müdür
- Direktör
- Genel Müdür
-
- Mali İşler Müdürü
-
- Teknik Müdür
+ {Object.values(ApprovalLevelEnum).map((lvl) => (
+
+ {getApprovalLevelText(lvl)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/DeliveryTracking.tsx b/ui/src/views/supplychain/components/DeliveryTracking.tsx
index 2d46b9e7..6c393a85 100644
--- a/ui/src/views/supplychain/components/DeliveryTracking.tsx
+++ b/ui/src/views/supplychain/components/DeliveryTracking.tsx
@@ -210,15 +210,11 @@ const DeliveryTracking: React.FC = () => {
className="pl-10 pr-4 py-1.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm"
>
Tüm Durumlar
- Hazırlanıyor
- Kargoya Verildi
- Yolda
- Dağıtımda
- Teslim Edildi
- Kısmi Teslim
- Gecikmeli
- İade Edildi
- İptal Edildi
+ {Object.values(DeliveryStatusEnum).map((status) => (
+
+ {getDeliveryStatusText(status)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/DeliveryTrackingModal.tsx b/ui/src/views/supplychain/components/DeliveryTrackingModal.tsx
index b989ae59..e4f12268 100644
--- a/ui/src/views/supplychain/components/DeliveryTrackingModal.tsx
+++ b/ui/src/views/supplychain/components/DeliveryTrackingModal.tsx
@@ -6,6 +6,9 @@ import {
QualityStatusEnum,
MmGoodsReceiptItem,
} from '../../../types/mm'
+import { mock } from 'node:test'
+import { mockWarehouses } from '@/mocks/mockWarehouses'
+import { getQualityStatusText, getReceiptStatusText } from '@/utils/erp'
interface DeliveryTrackingModalProps {
isOpen: boolean
@@ -226,10 +229,11 @@ const DeliveryTrackingModal: React.FC = ({
required
>
Depo Seçiniz
- Ana Depo
- Hammadde Deposu
- Mamul Deposu
- Yedek Parça Deposu
+ {mockWarehouses.map((wh) => (
+
+ {wh.name}
+
+ ))}
@@ -242,10 +246,11 @@ const DeliveryTrackingModal: React.FC = ({
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Beklemede
- İşlemde
- Tamamlandı
- Bekletildi
+ {Object.values(ReceiptStatusEnum).map((status) => (
+
+ {getReceiptStatusText(status)}
+
+ ))}
@@ -402,10 +407,11 @@ const DeliveryTrackingModal: React.FC = ({
disabled={isReadOnly}
className="mt-1 block w-full text-sm border border-gray-300 rounded-md px-2 py-1 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Beklemede
- Kabul
- Red
- Koşullu
+ {Object.values(QualityStatusEnum).map((status) => (
+
+ {getQualityStatusText(status)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/MaterialTypeModal.tsx b/ui/src/views/supplychain/components/MaterialTypeModal.tsx
index 01a87ee3..2316d8a5 100644
--- a/ui/src/views/supplychain/components/MaterialTypeModal.tsx
+++ b/ui/src/views/supplychain/components/MaterialTypeModal.tsx
@@ -1,4 +1,5 @@
import { MaterialTypeEnum, MmMaterialType } from '@/types/mm'
+import { getMaterialTypeText } from '@/utils/erp'
import { useState } from 'react'
interface MaterialTypeModalProps {
@@ -43,12 +44,11 @@ const MaterialTypeModal: React.FC = ({ type, onSave, onC
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-transparent"
required
>
- Hammadde
- Yarı Mamul
- Mamul
- Sarf Malzemesi
- Hizmet
- Yedek Parça
+ {Object.values(MaterialTypeEnum).map((value) => (
+
+ {getMaterialTypeText(value)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/MaterialTypes.tsx b/ui/src/views/supplychain/components/MaterialTypes.tsx
index a8d7a2b1..62c48fde 100644
--- a/ui/src/views/supplychain/components/MaterialTypes.tsx
+++ b/ui/src/views/supplychain/components/MaterialTypes.tsx
@@ -2,7 +2,7 @@ import React, { useState } from 'react'
import { FaPlus, FaEdit, FaTrash, FaSearch, FaTh, FaList } from 'react-icons/fa'
import { MmMaterialType, MaterialTypeEnum } from '../../../types/mm'
import { mockMaterialTypes } from '../../../mocks/mockMaterialTypes'
-import { getMaterialTypeDisplay } from '../../../utils/erp'
+import { getMaterialTypeText } from '../../../utils/erp'
import { Container } from '@/components/shared'
import MaterialTypeModal from './MaterialTypeModal'
@@ -151,7 +151,7 @@ const MaterialTypes: React.FC = () => {
- {getMaterialTypeDisplay(type.code)}
+ {getMaterialTypeText(type.code)}
@@ -206,7 +206,7 @@ const MaterialTypes: React.FC = () => {
- {getMaterialTypeDisplay(type.code)}
+ {getMaterialTypeText(type.code)}
diff --git a/ui/src/views/supplychain/components/OrderManagement.tsx b/ui/src/views/supplychain/components/OrderManagement.tsx
index 53b030f6..1de16b00 100644
--- a/ui/src/views/supplychain/components/OrderManagement.tsx
+++ b/ui/src/views/supplychain/components/OrderManagement.tsx
@@ -195,15 +195,11 @@ const OrderManagement: React.FC = () => {
className="pl-10 pr-4 py-1.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
>
Tüm Durumlar
- Taslak
- Beklemede
- Onaylandı
- Gönderildi
- Onaylandı
- Kısmi Teslim
- Teslim Edildi
- Tamamlandı
- İptal Edildi
+ {Object.values(OrderStatusEnum).map((status) => (
+
+ {getOrderStatusText(status)}
+
+ ))}
@@ -559,14 +555,11 @@ const OrderManagement: React.FC = () => {
defaultValue=""
>
Durum Seçiniz
- Beklemede
- Onaylandı
- Gönderildi
- Onaylandı
- Kısmi Teslim
- Teslim Edildi
- Tamamlandı
- İptal Edildi
+ {Object.values(OrderStatusEnum).map((status) => (
+
+ {getOrderStatusText(status)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/OrderManagementForm.tsx b/ui/src/views/supplychain/components/OrderManagementForm.tsx
index 3fc6fe45..7c253994 100644
--- a/ui/src/views/supplychain/components/OrderManagementForm.tsx
+++ b/ui/src/views/supplychain/components/OrderManagementForm.tsx
@@ -19,6 +19,8 @@ import { mockPurchaseOrders } from '../../../mocks/mockPurchaseOrders'
import { Address, PaymentTerms } from '../../../types/common'
import { Container } from '@/components/shared'
import { ROUTES_ENUM } from '@/routes/route.constant'
+import { getOrderStatusText, getPaymentTermsText } from '@/utils/erp'
+import { mockCurrencies } from '@/mocks/mockCurrencies'
const OrderManagementForm: React.FC = () => {
const { id } = useParams<{ id: string }>()
@@ -318,14 +320,11 @@ const OrderManagementForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- 15 Gün Vadeli
- 30 Gün Vadeli
- 45 Gün Vadeli
- 60 Gün Vadeli
- 90 Gün Vadeli
- Kapıda Ödeme
- Peşin
- Nakit
+ {Object.values(PaymentTerms).map((term) => (
+
+ {getPaymentTermsText(term)}
+
+ ))}
@@ -338,9 +337,11 @@ const OrderManagementForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- TRY
- USD
- EUR
+ {mockCurrencies.map((currency) => (
+
+ {currency.value} - {currency.label}
+
+ ))}
@@ -654,14 +655,11 @@ const OrderManagementForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Taslak
- Gönderildi
- Onaylandı
- Kısmi Teslim
- Teslim Alındı
- Faturalandı
- Kapatıldı
- İptal Edildi
+ {Object.values(OrderStatusEnum).map((status) => (
+
+ {getOrderStatusText(status)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/PurchaseRequestForm.tsx b/ui/src/views/supplychain/components/PurchaseRequestForm.tsx
index fa999714..d815f3bb 100644
--- a/ui/src/views/supplychain/components/PurchaseRequestForm.tsx
+++ b/ui/src/views/supplychain/components/PurchaseRequestForm.tsx
@@ -21,6 +21,8 @@ import { mockPurchaseRequests } from '../../../mocks/mockPurchaseRequests'
import { PriorityEnum } from '../../../types/common'
import { Container } from '@/components/shared'
import { ROUTES_ENUM } from '@/routes/route.constant'
+import { getPriorityText, getRequestStatusText, getRequestTypeText } from '@/utils/erp'
+import { mockCurrencies } from '@/mocks/mockCurrencies'
const PurchaseRequestForm: React.FC = () => {
const { id } = useParams<{ id: string }>()
@@ -198,10 +200,11 @@ const PurchaseRequestForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Malzeme
- Hizmet
- İş Merkezi
- Bakım
+ {Object.values(RequestTypeEnum).map((type) => (
+
+ {getRequestTypeText(type)}
+
+ ))}
@@ -294,10 +297,11 @@ const PurchaseRequestForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Düşük
- Normal
- Yüksek
- Acil
+ {Object.values(PriorityEnum).map((priority) => (
+
+ {getPriorityText(priority)}
+
+ ))}
@@ -310,9 +314,11 @@ const PurchaseRequestForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- TRY
- USD
- EUR
+ {mockCurrencies.map((currency) => (
+
+ {currency.value} - {currency.label}
+
+ ))}
@@ -500,12 +506,11 @@ const PurchaseRequestForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Taslak
- Gönderildi
- İncelemede
- Onaylandı
- Reddedildi
- İptal Edildi
+ {Object.values(RequestStatusEnum).map((status) => (
+
+ {getRequestStatusText(status)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/PurchaseRequests.tsx b/ui/src/views/supplychain/components/PurchaseRequests.tsx
index 3e33083e..f72131b8 100644
--- a/ui/src/views/supplychain/components/PurchaseRequests.tsx
+++ b/ui/src/views/supplychain/components/PurchaseRequests.tsx
@@ -96,23 +96,24 @@ const PurchaseRequests: React.FC = () => {
onChange={(e) => setFilterStatus(e.target.value as RequestStatusEnum | 'ALL')}
className="px-3 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
>
- Tüm Durumlar
- Taslak
- Gönderildi
- İnceleniyor
- Onaylandı
- Reddedildi
+ Tüm Durumlar
+ {Object.values(RequestStatusEnum).map((status) => (
+
+ {getRequestStatusText(status)}
+
+ ))}
setFilterType(e.target.value as RequestTypeEnum | 'ALL')}
className="px-3 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
>
- Tüm Türler
- Malzeme
- Hizmet
- İş Merkezi
- Bakım
+ Tüm Türler
+ {Object.values(RequestTypeEnum).map((type) => (
+
+ {getRequestTypeText(type)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/PurchaseRequisitionList.tsx b/ui/src/views/supplychain/components/PurchaseRequisitionList.tsx
index 0bf25850..5172765f 100644
--- a/ui/src/views/supplychain/components/PurchaseRequisitionList.tsx
+++ b/ui/src/views/supplychain/components/PurchaseRequisitionList.tsx
@@ -141,11 +141,11 @@ const PurchaseRequisitionList: React.FC = () => {
className="w-full border border-gray-300 rounded-lg px-3 py-1.5 focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tümü
- Taslak
- Gönderildi
- Onayda
- Onaylandı
- Reddedildi
+ {Object.values(RequisitionStatusEnum).map((status) => (
+
+ {getRequisitionStatusText(status)}
+
+ ))}
@@ -157,10 +157,11 @@ const PurchaseRequisitionList: React.FC = () => {
className="w-full border border-gray-300 rounded-lg px-3 py-1.5 focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tümü
- Düşük
- Normal
- Yüksek
- Acil
+ {Object.values(PriorityEnum).map((priority) => (
+
+ {getPriorityText(priority)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/QuotationForm.tsx b/ui/src/views/supplychain/components/QuotationForm.tsx
index 6f3dca54..7e8a2b21 100644
--- a/ui/src/views/supplychain/components/QuotationForm.tsx
+++ b/ui/src/views/supplychain/components/QuotationForm.tsx
@@ -22,6 +22,8 @@ import { mockMaterials } from '../../../mocks/mockMaterials'
import { mockBusinessParties } from '../../../mocks/mockBusinessParties'
import { Container } from '@/components/shared'
import { ROUTES_ENUM } from '@/routes/route.constant'
+import { getQuotationStatusText, getRequestTypeText } from '@/utils/erp'
+import { mockCurrencies } from '@/mocks/mockCurrencies'
const QuotationForm: React.FC = () => {
const { id } = useParams<{ id: string }>()
@@ -238,10 +240,11 @@ const QuotationForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Malzeme
- Hizmet
- İş Merkezi
- Bakım
+ {Object.values(RequestTypeEnum).map((type) => (
+
+ {getRequestTypeText(type)}
+
+ ))}
@@ -324,9 +327,11 @@ const QuotationForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- TRY
- USD
- EUR
+ {mockCurrencies.map((currency) => (
+
+ {currency.value} - {currency.label}
+
+ ))}
@@ -595,13 +600,11 @@ const QuotationForm: React.FC = () => {
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Taslak
- Beklemede
- İncelemede
- Gönderildi
- Onaylandı
- Reddedildi
- Süresi Doldu
+ {Object.values(QuotationStatusEnum).map((status) => (
+
+ {getQuotationStatusText(status)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/QuotationManagement.tsx b/ui/src/views/supplychain/components/QuotationManagement.tsx
index b54e2a68..f87cb868 100644
--- a/ui/src/views/supplychain/components/QuotationManagement.tsx
+++ b/ui/src/views/supplychain/components/QuotationManagement.tsx
@@ -27,6 +27,7 @@ import {
} from '../../../utils/erp'
import { Container } from '@/components/shared'
import { ROUTES_ENUM } from '@/routes/route.constant'
+import { mockCurrencies } from '@/mocks/mockCurrencies'
const QuotationManagement: React.FC = () => {
const navigate = useNavigate()
@@ -159,13 +160,11 @@ const QuotationManagement: React.FC = () => {
className="pl-10 pr-4 py-1.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
>
Tüm Durumlar
- Taslak
- Beklemede
- İnceleme
- Sunuldu
- Onaylandı
- Reddedildi
- Süresi Doldu
+ {Object.values(QuotationStatusEnum).map((status) => (
+
+ {getQuotationStatusText(status)}
+
+ ))}
@@ -670,9 +669,11 @@ const QuotationManagement: React.FC = () => {
Para Birimi
- TRY
- USD
- EUR
+ {mockCurrencies.map((currency) => (
+
+ {currency.value} - {currency.label}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/SupplierCardModal.tsx b/ui/src/views/supplychain/components/SupplierCardModal.tsx
index e705145a..8ed2288c 100644
--- a/ui/src/views/supplychain/components/SupplierCardModal.tsx
+++ b/ui/src/views/supplychain/components/SupplierCardModal.tsx
@@ -3,6 +3,7 @@ import { FaTimes, FaSave, FaCreditCard, FaStar } from 'react-icons/fa'
import { SupplierCardTypeEnum, SupplierTypeEnum } from '../../../types/mm'
import { mockBusinessPartyNew } from '../../../mocks/mockBusinessParties'
import { BusinessParty, PartyType, PaymentTerms } from '../../../types/common'
+import { getPaymentTermsText, getSupplierCardTypeText } from '@/utils/erp'
interface SupplierCardModalProps {
isOpen: boolean
@@ -82,7 +83,7 @@ const SupplierCardModal: React.FC = ({
},
creationTime: supplierCard?.creationTime || new Date(),
lastModificationTime: new Date(),
- supplierType: SupplierTypeEnum.Material,
+ supplierType: SupplierTypeEnum.Distributor,
name: '',
currency: '',
certifications: [],
@@ -158,10 +159,11 @@ const SupplierCardModal: React.FC = ({
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- Standart
- Premium
- Stratejik
- Tercihli
+ {Object.values(SupplierCardTypeEnum).map((type) => (
+
+ {getSupplierCardTypeText(type)}
+
+ ))}
@@ -237,14 +239,11 @@ const SupplierCardModal: React.FC = ({
disabled={isReadOnly}
className="mt-1 block w-full border border-gray-300 rounded-md px-2.5 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-blue-500"
>
- 15 Gün Vadeli
- 30 Gün Vadeli
- 45 Gün Vadeli
- 60 Gün Vadeli
- 90 Gün Vadeli
- Kapıda Ödeme
- Peşin
- Nakit
+ {Object.values(PaymentTerms).map((term) => (
+
+ {getPaymentTermsText(term)}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/SupplierForm.tsx b/ui/src/views/supplychain/components/SupplierForm.tsx
index 02394ba9..60344376 100644
--- a/ui/src/views/supplychain/components/SupplierForm.tsx
+++ b/ui/src/views/supplychain/components/SupplierForm.tsx
@@ -13,9 +13,12 @@ import {
} from 'react-icons/fa'
import LoadingSpinner from '../../../components/common/LoadingSpinner'
import { mockBusinessParties, mockBusinessPartyNew } from '../../../mocks/mockBusinessParties'
-import { BusinessParty } from '../../../types/common'
+import { BusinessParty, PaymentTerms } from '../../../types/common'
import { Container } from '@/components/shared'
import { ROUTES_ENUM } from '@/routes/route.constant'
+import { mockCurrencies } from '@/mocks/mockCurrencies'
+import { getPaymentTermsText, getSupplierTypeText } from '@/utils/erp'
+import { SupplierTypeEnum } from '@/types/mm'
interface ValidationErrors {
[key: string]: string
@@ -212,11 +215,11 @@ const SupplierForm: React.FC = () => {
}`}
>
Tip seçin
- Üretici
- Distribütör
- Toptancı
- Hizmet Sağlayıcı
- Diğer
+ {Object.values(SupplierTypeEnum).map((type) => (
+
+ {getSupplierTypeText(type)}
+
+ ))}
{errors.supplierType && (
{errors.supplierType}
@@ -547,11 +550,11 @@ const SupplierForm: React.FC = () => {
}`}
>
Ödeme koşulu seçin
- Nakit
- Net 15 Gün
- Net 30 Gün
- Net 60 Gün
- Net 90 Gün
+ {Object.values(PaymentTerms).map((term) => (
+
+ {getPaymentTermsText(term)}
+
+ ))}
{errors.paymentTerms && (
{errors.paymentTerms}
@@ -567,9 +570,11 @@ const SupplierForm: React.FC = () => {
onChange={(e) => handleInputChange('currency', e.target.value)}
className="block w-full px-2.5 py-1.5 border border-gray-300 rounded-md shadow-sm text-sm focus:outline-none focus:ring-1 focus:border-blue-500 focus:ring-blue-500"
>
- Türk Lirası (TRY)
- Amerikan Doları (USD)
- Euro (EUR)
+ {mockCurrencies.map((currency) => (
+
+ {currency.value} - {currency.label}
+
+ ))}
diff --git a/ui/src/views/supplychain/components/SupplierList.tsx b/ui/src/views/supplychain/components/SupplierList.tsx
index e8cab76c..866d9541 100644
--- a/ui/src/views/supplychain/components/SupplierList.tsx
+++ b/ui/src/views/supplychain/components/SupplierList.tsx
@@ -139,9 +139,11 @@ const SupplierList: React.FC = () => {
className="w-full border border-gray-300 rounded-lg px-3 py-1.5 focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tümü
- Malzeme
- Hizmet
- Karma
+ {Object.values(SupplierTypeEnum).map((type) => (
+
+ {getSupplierTypeText(type)}
+
+ ))}
diff --git a/ui/src/views/warehouse/components/InventoryTracking.tsx b/ui/src/views/warehouse/components/InventoryTracking.tsx
index 8c1ea583..ea7f595e 100644
--- a/ui/src/views/warehouse/components/InventoryTracking.tsx
+++ b/ui/src/views/warehouse/components/InventoryTracking.tsx
@@ -20,7 +20,12 @@ import { mockUnits } from '../../../mocks/mockUnits'
import { mockBusinessParties } from '../../../mocks/mockBusinessParties'
import Widget from '../../../components/common/Widget'
import { PartyType } from '../../../types/common'
-import { getQualityStatusInfo, getSerialStatusInfo } from '../../../utils/erp'
+import {
+ getQualityStatusColor,
+ getQualityStatusText,
+ getSerialStatusColor,
+ getSerialStatusText,
+} from '../../../utils/erp'
import { Container } from '@/components/shared'
const InventoryTracking: React.FC = () => {
@@ -199,7 +204,6 @@ const InventoryTracking: React.FC = () => {
{filteredLots.map((lot) => {
- const qualityInfo = getQualityStatusInfo(lot.qualityStatus)
const isExpiringSoon =
lot.expiryDate &&
new Date(lot.expiryDate).getTime() - new Date().getTime() <
@@ -252,9 +256,9 @@ const InventoryTracking: React.FC = () => {
- {qualityInfo.label}
+ {getQualityStatusText(lot.qualityStatus)}
@@ -347,7 +351,6 @@ const InventoryTracking: React.FC = () => {
{filteredSerials.map((serial) => {
- const statusInfo = getSerialStatusInfo(serial.status)
const isWarrantyExpiring =
serial.warrantyExpiryDate &&
new Date(serial.warrantyExpiryDate).getTime() - new Date().getTime() <
@@ -413,9 +416,9 @@ const InventoryTracking: React.FC = () => {
- {statusInfo.label}
+ {getSerialStatusText(serial.status)}
diff --git a/ui/src/views/warehouse/components/LotForm.tsx b/ui/src/views/warehouse/components/LotForm.tsx
index 01de046a..70b4dd5d 100644
--- a/ui/src/views/warehouse/components/LotForm.tsx
+++ b/ui/src/views/warehouse/components/LotForm.tsx
@@ -4,6 +4,7 @@ import * as Yup from 'yup'
import { FaSave, FaTimes } from 'react-icons/fa'
import { QualityStatusEnum, MmLotNumber, MmUnit, MmMaterial } from '../../../types/mm'
import { BusinessParty } from '../../../types/common'
+import { getQualityStatusText } from '@/utils/erp'
const validationSchema = Yup.object({
materialId: Yup.string().required('Malzeme seçimi zorunlu'),
@@ -231,10 +232,11 @@ const LotForm: React.FC = ({
{...formik.getFieldProps('qualityStatus')}
className="w-full border rounded-md px-2 py-1 text-sm"
>
- Beklemede
- Onaylandı
- Reddedildi
- Karantina
+ {Object.values(QualityStatusEnum).map((status) => (
+
+ {getQualityStatusText(status)}
+
+ ))}
diff --git a/ui/src/views/warehouse/components/MaterialMovements.tsx b/ui/src/views/warehouse/components/MaterialMovements.tsx
index 3e1ee87b..18fc14e1 100644
--- a/ui/src/views/warehouse/components/MaterialMovements.tsx
+++ b/ui/src/views/warehouse/components/MaterialMovements.tsx
@@ -3,10 +3,11 @@ import { useParams } from 'react-router-dom'
import { FaDownload, FaCalendar, FaBox } from 'react-icons/fa'
import { MmStockMovement, MovementTypeEnum } from '../../../types/mm'
import { FaRepeat } from 'react-icons/fa6'
-import { getMovementTypeInfo } from '../../../utils/erp'
+import { getMovementTypeColor, getMovementTypeIcon, getMovementTypeText } from '../../../utils/erp'
import { mockStockMovements } from '../../../mocks/mockStockMovements'
import Widget, { colorType } from '../../../components/common/Widget'
import { Container } from '@/components/shared'
+import { mockWarehouses } from '@/mocks/mockWarehouses'
const MaterialMovements: React.FC<{ materialId?: string }> = ({ materialId }) => {
const params = useParams>()
@@ -162,9 +163,11 @@ const MaterialMovements: React.FC<{ materialId?: string }> = ({ materialId }) =>
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tümü
- Mal Girişi
- Mal Çıkışı
- Transfer
+ {Object.values(MovementTypeEnum).map((type) => (
+
+ {getMovementTypeText(type)}
+
+ ))}
@@ -176,9 +179,11 @@ const MaterialMovements: React.FC<{ materialId?: string }> = ({ materialId }) =>
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
Tümü
- Ana Depo
- Üretim Deposu
- Satış Deposu
+ {mockWarehouses.map((wh) => (
+
+ {wh.code} - {wh.name}
+
+ ))}
@@ -232,8 +237,7 @@ const MaterialMovements: React.FC<{ materialId?: string }> = ({ materialId }) =>
{movementsWithBalance.map((movement) => {
- const typeInfo = getMovementTypeInfo(movement.movementType)
- const Icon = typeInfo.icon
+ const Icon = getMovementTypeIcon(movement.movementType)
return (