Project Management ve Title
This commit is contained in:
parent
2217722243
commit
8b88970fe2
100 changed files with 525 additions and 593 deletions
|
|
@ -36,7 +36,7 @@ export const KickParticipantModal: React.FC<KickParticipantModalProps> = ({
|
|||
</div>
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-gray-900">Katılımcıyı Çıkar</h3>
|
||||
<p className="text-sm text-gray-600">Bu işlem geri alınamaz</p>
|
||||
<p className="text-gray-600">Bu işlem geri alınamaz</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
import React from 'react'
|
||||
import {
|
||||
FaCheckCircle,
|
||||
FaArrowLeft
|
||||
} from 'react-icons/fa';
|
||||
import { FaCheckCircle, FaArrowLeft } from 'react-icons/fa'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
import { ROUTES_ENUM } from '@/routes/route.constant'
|
||||
import { useLocalization } from '@/utils/hooks/useLocalization';
|
||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||
|
||||
interface OrderSuccessProps {
|
||||
orderId: string
|
||||
|
|
@ -21,14 +18,20 @@ export const OrderSuccess: React.FC<OrderSuccessProps> = ({ orderId, onBackToSho
|
|||
<div className="bg-white rounded-xl shadow-lg border border-gray-200 p-8">
|
||||
<div className="mb-6">
|
||||
<FaCheckCircle className="w-16 h-16 text-green-500 mx-auto mb-4" />
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-2">{translate('::Public.order.success.title')}</h2>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
{translate('::Public.order.success.title')}
|
||||
</h2>
|
||||
|
||||
<p className="text-gray-600">
|
||||
{translate('::Public.order.success.number')} <span className="font-semibold text-blue-600">#{orderId}</span>
|
||||
{translate('::Public.order.success.number')}{' '}
|
||||
<span className="font-semibold text-blue-600">#{orderId}</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-green-50 border border-green-200 rounded-lg p-4 mb-6">
|
||||
<h3 className="font-semibold text-green-800 mb-2">{translate('::Public.order.success.nextSteps')}</h3>
|
||||
<h3 className="font-semibold text-green-800 mb-2">
|
||||
{translate('::Public.order.success.nextSteps')}
|
||||
</h3>
|
||||
<ul className="text-sm text-green-700 space-y-1 text-left">
|
||||
<li>• {translate('::Public.order.success.step1')}</li>
|
||||
<li>• {translate('::Public.order.success.step2')}</li>
|
||||
|
|
|
|||
|
|
@ -171,9 +171,9 @@ export const ProductCatalog: React.FC<ProductCatalogProps> = ({
|
|||
<div className="text-gray-400 mb-2">
|
||||
<FaFilter className="w-12 h-12 mx-auto" />
|
||||
</div>
|
||||
<h3 className="text-lg font-medium text-gray-900 mb-2">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-2">
|
||||
{translate('::Public.products.empty.title')}
|
||||
</h3>
|
||||
</h2>
|
||||
<p className="text-gray-600">{translate('::Public.products.empty.description')}</p>
|
||||
</div>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -134,9 +134,9 @@ export const ReportViewer: React.FC = () => {
|
|||
<div className="min-h-screen bg-gray-50 flex items-center justify-center">
|
||||
<div className="text-center">
|
||||
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"></div>
|
||||
<h1 className="text-xl font-semibold text-gray-900 mb-2">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{translate('::App.Reports.ReportViewer.LoadingTitle')}
|
||||
</h1>
|
||||
</h2>
|
||||
<p className="text-gray-600">{translate('::App.Reports.ReportViewer.LoadingSubtitle')}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -462,8 +462,8 @@ const BankManagement: React.FC<BankManagementProps> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Banka Yönetimi</h2>
|
||||
<p className="text-sm text-gray-500">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Banka Yönetimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Banka hesapları ve EFT/Havale işlemleri
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ const CashAccountDetails: React.FC<CashAccountDetailsProps> = ({
|
|||
<h2 className="text-lg font-semibold text-gray-900">
|
||||
Kasa Hesabı Detayları
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{account.name} ({account.accountCode})
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -340,8 +340,8 @@ const CashManagement: React.FC<CashManagementProps> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Kasa Yönetimi</h2>
|
||||
<p className="text-sm text-gray-500">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Kasa Yönetimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Nakit giriş-çıkış işlemleri yönetimi
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -666,8 +666,8 @@ const CheckNoteManagement: React.FC<CheckNoteManagementProps> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Çek & Senet Takibi</h2>
|
||||
<p className="text-sm text-gray-500">Alınan ve verilen çek & senet yönetimi</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Çek & Senet Takibi</h2>
|
||||
<p className="text-gray-600">Alınan ve verilen çek & senet yönetimi</p>
|
||||
</div>
|
||||
<div className="flex gap-2 text-sm">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -534,10 +534,10 @@ const CurrentAccountManagement: React.FC<CurrentAccountManagementProps> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
Cari Hesap Yönetimi
|
||||
</h2>
|
||||
<p className="text-sm text-gray-500">
|
||||
<p className="text-gray-600">
|
||||
Müşteri ve tedarikçi cari hesaplarının yönetimi
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -315,8 +315,8 @@ const InvoiceManagement: React.FC<InvoiceManagementProps> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Fatura Yönetimi</h2>
|
||||
<p className="text-sm text-gray-500">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Fatura Yönetimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Alış ve satış faturaları yönetimi
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ const WaybillDetails: React.FC<WaybillDetailsProps> = ({
|
|||
<h2 className="text-lg font-semibold text-gray-900">
|
||||
İrsaliye Detayları
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">{waybill.waybillNumber}</p>
|
||||
<p className="text-gray-600">{waybill.waybillNumber}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center gap-1">
|
||||
|
|
|
|||
|
|
@ -314,8 +314,8 @@ const WaybillManagement: React.FC<WaybillManagementProps> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">İrsaliye Yönetimi</h2>
|
||||
<p className="text-sm text-gray-500">
|
||||
<h2 className="text-2xl font-bold text-gray-900">İrsaliye Yönetimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Giriş ve çıkış irsaliyeleri yönetimi
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ const ActivityDetails: React.FC<ActivityDetailsProps> = ({ isOpen, onClose, onEd
|
|||
</div>
|
||||
<div>
|
||||
<h2 className="text-lg font-semibold text-gray-900">{activity.subject}</h2>
|
||||
<p className="text-sm text-gray-600">{getActivityTypeText(activity.activityType)}</p>
|
||||
<p className="text-gray-600">{getActivityTypeText(activity.activityType)}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center gap-3">
|
||||
|
|
|
|||
|
|
@ -257,8 +257,8 @@ const ActivityRecords: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Görüşme / Aktivite Kayıtları</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">Müşteri etkileşimleri ve aktivite takibi</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Görüşme / Aktivite Kayıtları</h2>
|
||||
<p className="text-gray-600">Müşteri etkileşimleri ve aktivite takibi</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-4">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -201,7 +201,7 @@ const CustomerEdit: React.FC = () => {
|
|||
</div>
|
||||
|
||||
<div>
|
||||
<h1 className="text-xl font-bold text-gray-900">Müşteri Düzenle</h1>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Müşteri Düzenle</h2>
|
||||
<p className="text-sm text-gray-600">{customer.name}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ const CustomerForm: React.FC = () => {
|
|||
<h2 className="text-lg font-semibold text-gray-900">
|
||||
{isEdit ? 'Müşteri Düzenle' : 'Yeni Müşteri'}
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{isEdit ? 'Mevcut müşteri bilgilerini güncelleyin' : 'Yeni müşteri bilgilerini girin'}
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ const CustomerForm: React.FC = () => {
|
|||
<h2 className="text-lg font-semibold text-gray-900">
|
||||
{isEdit ? 'Müşteri Düzenle' : 'Yeni Müşteri'}
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{isEdit ? 'Mevcut müşteri bilgilerini güncelleyin' : 'Yeni müşteri bilgilerini girin'}
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ const CustomerListWithToggle: React.FC = () => {
|
|||
{/* Header with View Toggle */}
|
||||
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3">
|
||||
<div>
|
||||
<h1 className="text-xl font-bold text-gray-900">Müşteri Listesi</h1>
|
||||
<p className="text-sm text-gray-600 mt-1">Müşteri listesi ve detay bilgileri</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Müşteri Listesi</h2>
|
||||
<p className="text-gray-600">Müşteri listesi ve detay bilgileri</p>
|
||||
</div>
|
||||
|
||||
{/* View Mode Toggle */}
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ const CustomerView: React.FC = () => {
|
|||
|
||||
<div>
|
||||
<div className="flex items-center space-x-3">
|
||||
<h1 className="text-xl font-bold text-gray-900">{customer.name}</h1>
|
||||
<h2 className="text-2xl font-bold text-gray-900">{customer.name}</h2>
|
||||
<span
|
||||
className={classNames(
|
||||
'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium border',
|
||||
|
|
@ -518,7 +518,7 @@ const CustomerView: React.FC = () => {
|
|||
<FaUser className="w-8 h-8 text-blue-600" />
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="text-xl font-semibold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{customer.primaryContact?.fullName}
|
||||
</h4>
|
||||
<p className="text-gray-600">
|
||||
|
|
|
|||
|
|
@ -225,8 +225,8 @@ const LossReasons: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-lg font-bold text-gray-900">Kayıp Nedenleri</h2>
|
||||
<p className="text-sm text-gray-600">Fırsat kaybı nedenlerini analiz edin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Kayıp Nedenleri</h2>
|
||||
<p className="text-gray-600">Fırsat kaybı nedenlerini analiz edin</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-3">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ const OpportunityDetails: React.FC<OpportunityDetailsProps> = ({
|
|||
</div>
|
||||
<div>
|
||||
<h2 className="text-lg font-semibold text-gray-900">{opportunity.title}</h2>
|
||||
<p className="text-sm text-gray-600">{opportunity.opportunityNumber}</p>
|
||||
<p className="text-gray-600">{opportunity.opportunityNumber}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center gap-3">
|
||||
|
|
|
|||
|
|
@ -241,8 +241,8 @@ const OpportunityManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Teklif & Fırsat Yönetimi</h2>
|
||||
<p className="text-sm text-gray-600">Satış fırsatları ve teklif takibi</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Teklif & Fırsat Yönetimi</h2>
|
||||
<p className="text-gray-600">Satış fırsatları ve teklif takibi</p>
|
||||
</div>
|
||||
<button
|
||||
onClick={handleAdd}
|
||||
|
|
|
|||
|
|
@ -250,10 +250,10 @@ const SalesOrderForm: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{isEdit ? 'Satış Siparişi Düzenle' : 'Yeni Satış Siparişi'}
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">Müşteri siparişi oluştur ve yönet</p>
|
||||
<p className="text-gray-600">Müşteri siparişi oluştur ve yönet</p>
|
||||
</div>
|
||||
<div className="flex gap-2">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -207,8 +207,8 @@ const SalesOrders: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Satış Siparişleri</h2>
|
||||
<p className="text-sm text-gray-600">Müşteri siparişleri ve teslimat takibi</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Satış Siparişleri</h2>
|
||||
<p className="text-gray-600">Müşteri siparişleri ve teslimat takibi</p>
|
||||
</div>
|
||||
<button
|
||||
onClick={handleAdd}
|
||||
|
|
@ -266,12 +266,12 @@ const SalesOrders: React.FC = () => {
|
|||
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
||||
<div className="text-center">
|
||||
<div className="text-2xl font-bold text-blue-600 mb-1">{currentMonthOrders}</div>
|
||||
<p className="text-sm text-gray-600">Bu Ay</p>
|
||||
<p className="text-gray-600">Bu Ay</p>
|
||||
</div>
|
||||
|
||||
<div className="text-center">
|
||||
<div className="text-2xl font-bold text-gray-600 mb-1">{previousMonthOrders}</div>
|
||||
<p className="text-sm text-gray-600">Geçen Ay</p>
|
||||
<p className="text-gray-600">Geçen Ay</p>
|
||||
</div>
|
||||
|
||||
<div className="text-center">
|
||||
|
|
|
|||
|
|
@ -144,8 +144,8 @@ const SalesTeamCreate: React.FC = () => {
|
|||
<FaArrowLeft className="w-5 h-5" />
|
||||
</button>
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Yeni Satış Ekibi</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Yeni Satış Ekibi</h2>
|
||||
<p className="text-gray-600">
|
||||
Yeni satış ekibi oluşturun ve ekip üyelerini atayın
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -192,8 +192,8 @@ const SalesTeamEdit: React.FC = () => {
|
|||
<FaArrowLeft className="w-5 h-5" />
|
||||
</button>
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Satış Ekibi Düzenle</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">{team.name} ekibini düzenleyin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Satış Ekibi Düzenle</h2>
|
||||
<p className="text-gray-600">{team.name} ekibini düzenleyin</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -83,8 +83,8 @@ const SalesTeamView: React.FC = () => {
|
|||
<FaArrowLeft className="w-5 h-5" />
|
||||
</button>
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">{team.name}</h2>
|
||||
<p className="text-gray-600 mt-1">{team.code} • Satış ekibi detayları</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">{team.name}</h2>
|
||||
<p className="text-gray-600">{team.code} • Satış ekibi detayları</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -205,8 +205,8 @@ const SalesTeams: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Satış Ekipleri</h2>
|
||||
<p className="text-gray-600 mt-1">Satış ekipleri ve performans yönetimi</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Satış Ekipleri</h2>
|
||||
<p className="text-gray-600">Satış ekipleri ve performans yönetimi</p>
|
||||
</div>
|
||||
<button
|
||||
onClick={handleAdd}
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ const BadgeAssignmentModal: React.FC<BadgeAssignmentModalProps> = ({
|
|||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-bold text-gray-900">Rozet Ata</h3>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
Personele başarı rozeti atayın
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ const BadgeEditModal: React.FC<BadgeEditModalProps> = ({
|
|||
<h3 className="text-xl font-bold text-gray-900">
|
||||
{mode === "edit" ? "Rozet Düzenle" : "Yeni Rozet Oluştur"}
|
||||
</h3>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{mode === "edit"
|
||||
? "Mevcut rozet bilgilerini güncelleyin"
|
||||
: "Yeni bir başarı rozeti tanımlayın"}
|
||||
|
|
|
|||
|
|
@ -292,8 +292,8 @@ const BadgeManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between mb-2">
|
||||
<div>
|
||||
<h2 className="text-lg font-bold text-gray-900">Rozet Yönetimi</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Rozet Yönetimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Personel başarı rozetleri ve ödüllendirme sistemi
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ const CostCenterManagement: React.FC = () => {
|
|||
<div className="flex items-start justify-between mb-4">
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-gray-900 mb-1">{costCenter.name}</h3>
|
||||
<p className="text-sm text-gray-600">{costCenter.code}</p>
|
||||
<p className="text-gray-600">{costCenter.code}</p>
|
||||
</div>
|
||||
<span
|
||||
className={`px-2 py-0.5 text-xs font-medium rounded-full ${getCostCenterTypeColor(
|
||||
|
|
@ -323,8 +323,8 @@ const CostCenterManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Maliyet Merkezi Yönetimi</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Maliyet Merkezi Yönetimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Maliyet merkezlerini ve bütçe takibini yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -733,8 +733,8 @@ const Degree360Evaluation: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex justify-between items-center">
|
||||
<div>
|
||||
<h1 className="text-xl font-bold text-gray-900">360° Değerlendirme Sistemi</h1>
|
||||
<p className="text-gray-600 mt-1">Çok yönlü performans değerlendirme sistemi</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">360° Değerlendirme Sistemi</h2>
|
||||
<p className="text-gray-600">Çok yönlü performans değerlendirme sistemi</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -1453,7 +1453,7 @@ const Degree360Evaluation: React.FC = () => {
|
|||
<div className="flex justify-between items-center">
|
||||
<div>
|
||||
<h4 className="font-medium text-gray-900">{campaign.name}</h4>
|
||||
<p className="text-sm text-gray-600">{campaign.description}</p>
|
||||
<p className="text-gray-600">{campaign.description}</p>
|
||||
<div className="flex items-center gap-2 mt-2">
|
||||
<span
|
||||
className={`inline-block px-2 py-1 text-xs rounded-full ${getCampaignStatusColor(
|
||||
|
|
@ -1515,8 +1515,8 @@ const Degree360Evaluation: React.FC = () => {
|
|||
<div className="flex justify-between items-center">
|
||||
<div>
|
||||
<h4 className="font-medium text-gray-900">{employee.fullName}</h4>
|
||||
<p className="text-sm text-gray-600">{employee.jobPosition?.name}</p>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">{employee.jobPosition?.name}</p>
|
||||
<p className="text-gray-600">
|
||||
{mockDepartments.find((d) => d.id === employee.departmantId)?.name}
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -1571,7 +1571,7 @@ const Degree360Evaluation: React.FC = () => {
|
|||
<h4 className="font-medium text-gray-900">
|
||||
{getAssessorTypeText(assessorType)}
|
||||
</h4>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{getAssessorTypeDescription(assessorType)}
|
||||
</p>
|
||||
{getEvaluatorsByType(evaluationTarget, assessorType).length > 0 && (
|
||||
|
|
@ -1683,7 +1683,7 @@ const Degree360Evaluation: React.FC = () => {
|
|||
<div className="flex justify-between items-center">
|
||||
<div>
|
||||
<h4 className="font-medium text-gray-900">{evaluator.name}</h4>
|
||||
<p className="text-sm text-gray-600">{evaluator.title}</p>
|
||||
<p className="text-gray-600">{evaluator.title}</p>
|
||||
<span className="inline-block mt-1 px-2 py-1 text-xs rounded-full bg-purple-100 text-purple-800">
|
||||
{evaluator.department}
|
||||
</span>
|
||||
|
|
@ -1719,7 +1719,7 @@ const Degree360Evaluation: React.FC = () => {
|
|||
<div className="flex justify-between items-center">
|
||||
<div>
|
||||
<h4 className="font-medium text-gray-900">{evaluator.name}</h4>
|
||||
<p className="text-sm text-gray-600">{evaluator.title}</p>
|
||||
<p className="text-gray-600">{evaluator.title}</p>
|
||||
<span className="inline-block mt-1 px-2 py-1 text-xs rounded-full bg-purple-100 text-purple-800">
|
||||
{evaluator.department}
|
||||
</span>
|
||||
|
|
@ -2057,7 +2057,7 @@ const Degree360Evaluation: React.FC = () => {
|
|||
<h5 className="font-medium text-gray-800">
|
||||
{group.groupName}
|
||||
</h5>
|
||||
<p className="text-sm text-gray-600">{group.description}</p>
|
||||
<p className="text-gray-600">{group.description}</p>
|
||||
</div>
|
||||
|
||||
<div className="space-y-2.5">
|
||||
|
|
@ -2386,7 +2386,7 @@ const Degree360Evaluation: React.FC = () => {
|
|||
<div key={group.id} className="border rounded-lg p-2">
|
||||
<div className="mb-3">
|
||||
<h4 className="font-medium text-gray-900 text-sm">{group.groupName}</h4>
|
||||
<p className="text-sm text-gray-600">{group.description}</p>
|
||||
<p className="text-gray-600">{group.description}</p>
|
||||
<div className="flex items-center gap-2 mt-2">
|
||||
<span className="text-xs text-gray-500">Ağırlık: %{group.weight}</span>
|
||||
<span className="text-xs text-gray-500">•</span>
|
||||
|
|
|
|||
|
|
@ -273,8 +273,8 @@ const Degree360Templates: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">360° Şablonlar</h2>
|
||||
<p className="text-gray-600 mt-1">360 derece değerlendirme şablonlarını yönetin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">360° Şablonlar</h2>
|
||||
<p className="text-gray-600">360 derece değerlendirme şablonlarını yönetin</p>
|
||||
</div>
|
||||
|
||||
<button
|
||||
|
|
@ -459,7 +459,7 @@ const Degree360Templates: React.FC = () => {
|
|||
<div>
|
||||
<h4 className="font-medium">{group.groupName}</h4>
|
||||
<p className="text-sm text-gray-600">{group.description}</p>
|
||||
<p className="text-sm text-gray-600">Ağırlık: {group.weight}%</p>
|
||||
<p className="text-gray-600">Ağırlık: {group.weight}%</p>
|
||||
</div>
|
||||
{isEditMode && (
|
||||
<div className="flex gap-2">
|
||||
|
|
|
|||
|
|
@ -218,8 +218,8 @@ const DepartmentManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-3">
|
||||
<div>
|
||||
<h2 className="text-lg font-bold text-gray-900">Departman Yönetimi</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Departman Yönetimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Organizasyon yapısını ve departmanları yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -348,7 +348,7 @@ const DepartmentManagement: React.FC = () => {
|
|||
<h3 className="font-semibold text-sm text-gray-900 truncate">
|
||||
{department.name}
|
||||
</h3>
|
||||
<p className="text-sm text-gray-600">{department.code}</p>
|
||||
<p className="text-gray-600">{department.code}</p>
|
||||
</div>
|
||||
</div>
|
||||
<span
|
||||
|
|
|
|||
|
|
@ -236,10 +236,10 @@ const EmployeeForm: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{isEdit ? 'Personel Düzenle' : 'Yeni Personel'}
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{isEdit
|
||||
? 'Mevcut personel bilgilerini güncelleyin'
|
||||
: 'Yeni personel bilgilerini girin'}
|
||||
|
|
|
|||
|
|
@ -110,8 +110,8 @@ const EmployeeList: React.FC = () => {
|
|||
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4">
|
||||
{/* Title & Description */}
|
||||
<div>
|
||||
<h2 className="text-lg font-bold text-gray-900">Personel Listesi</h2>
|
||||
<p className="text-sm text-gray-600">Şirket çalışanlarının listesi</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Personel Listesi</h2>
|
||||
<p className="text-gray-600">Şirket çalışanlarının listesi</p>
|
||||
</div>
|
||||
|
||||
{/* Header Actions */}
|
||||
|
|
|
|||
|
|
@ -48,8 +48,8 @@ const EmploymentTypes: React.FC = () => {
|
|||
<div className="flex flex-col gap-4">
|
||||
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">İstihdam Türleri</h2>
|
||||
<p className="text-gray-600 mt-1">Personel istihdam türleri ve dağılımı</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">İstihdam Türleri</h2>
|
||||
<p className="text-gray-600">Personel istihdam türleri ve dağılımı</p>
|
||||
</div>
|
||||
|
||||
{/* New Button - Visible on larger screens */}
|
||||
|
|
|
|||
|
|
@ -30,10 +30,10 @@ const JobPositionViewModal: React.FC<JobPositionViewModalProps> = ({
|
|||
<div className="flex items-center gap-3">
|
||||
<FaBriefcase className="w-6 h-6 text-blue-600" />
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{position.name}
|
||||
</h2>
|
||||
<p className="text-sm text-gray-500">{position.code}</p>
|
||||
<p className="text-gray-600">{position.code}</p>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -335,8 +335,8 @@ const JobPositions: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">İş Pozisyonları</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">İş Pozisyonları</h2>
|
||||
<p className="text-gray-600">
|
||||
Şirket pozisyonları ve iş tanımları yönetimi
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -440,8 +440,8 @@ const LeaveManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">İzin Yönetimi</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">Personel izin talepleri ve onay süreçleri</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">İzin Yönetimi</h2>
|
||||
<p className="text-gray-600">Personel izin talepleri ve onay süreçleri</p>
|
||||
</div>
|
||||
<div className="flex gap-2">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -360,8 +360,8 @@ const OrganizationChart: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Organizasyon Şeması</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">Kurumsal hiyerarşi ve raporlama yapısı</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Organizasyon Şeması</h2>
|
||||
<p className="text-gray-600">Kurumsal hiyerarşi ve raporlama yapısı</p>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-2">
|
||||
|
|
|
|||
|
|
@ -460,8 +460,8 @@ const OvertimeManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Mesai Yönetimi</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">Personel mesai talepleri ve onay süreçleri</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Mesai Yönetimi</h2>
|
||||
<p className="text-gray-600">Personel mesai talepleri ve onay süreçleri</p>
|
||||
</div>
|
||||
<div className="flex gap-2">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -432,8 +432,8 @@ const PayrollManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Maaş, Prim, Bordro Yönetimi</h2>
|
||||
<p className="text-gray-600 mt-1">Personel ödemelerini hesaplayın ve yönetin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Maaş, Prim, Bordro Yönetimi</h2>
|
||||
<p className="text-gray-600">Personel ödemelerini hesaplayın ve yönetin</p>
|
||||
</div>
|
||||
<div className="flex gap-2">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -80,8 +80,8 @@ const AssignWorkOrderModal: React.FC<AssignWorkOrderModalProps> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between p-3 border-b border-gray-200">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">İş Emri Atama</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">İş Emri Atama</h2>
|
||||
<p className="text-gray-600">
|
||||
Seçili ekiplere ({selectedTeams.length}) bakım planları atayın
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -142,7 +142,7 @@ const AssignWorkOrderModal: React.FC<AssignWorkOrderModalProps> = ({
|
|||
<h4 className="font-medium text-sm text-gray-900">
|
||||
{team.name}
|
||||
</h4>
|
||||
<p className="text-sm text-gray-600">{team.code}</p>
|
||||
<p className="text-gray-600">{team.code}</p>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
|
|
@ -172,7 +172,7 @@ const AssignWorkOrderModal: React.FC<AssignWorkOrderModalProps> = ({
|
|||
<h4 className="font-medium text-gray-900">
|
||||
{plan.planCode}
|
||||
</h4>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{plan.description}
|
||||
</p>
|
||||
<div className="flex items-center space-x-4 mt-1 text-xs text-gray-500">
|
||||
|
|
|
|||
|
|
@ -209,10 +209,10 @@ const FaultNotifications: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
Arıza Bildirimleri
|
||||
</h2>
|
||||
<p className="text-gray-600 mt-1">
|
||||
<p className="text-gray-600">
|
||||
İş merkezi arızalarını takip edin ve yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -282,8 +282,8 @@ const MaintenanceCalendar: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Bakım Takvimi</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Bakım Takvimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Bakım planları ve iş emirlerini takip edin. Yeni planlama için
|
||||
gün/saat seçin.
|
||||
</p>
|
||||
|
|
|
|||
|
|
@ -151,8 +151,8 @@ const MaintenancePlans: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Bakım Planları</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Bakım Planları</h2>
|
||||
<p className="text-gray-600">
|
||||
Periyodik ve düzeltici bakım planlarını yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -151,8 +151,8 @@ const MaintenanceTeams: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Bakım Ekipleri</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Bakım Ekipleri</h2>
|
||||
<p className="text-gray-600">
|
||||
Bakım ekiplerini ve üyelerini yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -242,8 +242,8 @@ const MaintenanceWorkOrders: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Bakım İş Emirleri</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Bakım İş Emirleri</h2>
|
||||
<p className="text-gray-600">
|
||||
Bakım iş emirlerini takip edin ve yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -69,10 +69,10 @@ const PlanStatusChangeModal: React.FC<PlanStatusChangeModalProps> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between p-4 border-b border-gray-200">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
Plan Durumu Değiştir
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{selectedPlans.length} plan için durum değişikliği
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -83,10 +83,10 @@ const TeamStatusChangeModal: React.FC<TeamStatusChangeModalProps> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between p-4 border-b border-gray-200">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
Ekip Durumu Değiştir
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{selectedTeams.length} ekibin durumunu değiştirin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -152,8 +152,8 @@ const WorkCenterCards: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">İş Merkezleri</h2>
|
||||
<p className="text-gray-600 mt-1">Tüm iş merkezlerini yönetin ve takip edin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">İş Merkezleri</h2>
|
||||
<p className="text-gray-600">Tüm iş merkezlerini yönetin ve takip edin</p>
|
||||
</div>
|
||||
<div className="flex items-center space-x-2">
|
||||
{/* View Toggle */}
|
||||
|
|
|
|||
|
|
@ -81,8 +81,8 @@ const BOMManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Ürün Ağaçları (BOM)</h2>
|
||||
<p className="text-sm text-gray-600 mt-0.5">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Ürün Ağaçları (BOM)</h2>
|
||||
<p className="text-gray-600">
|
||||
Ürün bileşenlerini ve üretim operasyonlarını yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ const CompleteWorkOrderModal: React.FC<CompleteWorkOrderModalProps> = ({
|
|||
<h3 className="font-medium text-gray-900 mb-2">
|
||||
{workOrder.workOrderNumber}
|
||||
</h3>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
Kalan Miktar:{" "}
|
||||
<span className="font-medium">{remainingQuantity}</span>
|
||||
</p>
|
||||
|
|
|
|||
|
|
@ -518,8 +518,8 @@ const DemandPlanning: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Talep Planlama</h2>
|
||||
<p className="text-sm text-gray-600 mt-0.5">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Talep Planlama</h2>
|
||||
<p className="text-gray-600">
|
||||
Talep tahmini ve malzeme ihtiyaç hesaplama
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -62,8 +62,8 @@ const OperationDefinitions: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Operasyon Tanımları</h2>
|
||||
<p className="text-sm text-gray-600 mt-0.5">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Operasyon Tanımları</h2>
|
||||
<p className="text-gray-600">
|
||||
İş merkezlerinde gerçekleştirilen operasyonları tanımlayın
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -52,8 +52,8 @@ const OperationTypes: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Operasyon Türleri</h2>
|
||||
<p className="text-sm text-gray-600 mt-0.5">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Operasyon Türleri</h2>
|
||||
<p className="text-gray-600">
|
||||
İş merkezlerinde kullanılacak operasyon türlerini tanımlayın
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -507,10 +507,10 @@ const PlanningGantt: React.FC<PlanningGanttProps> = ({
|
|||
<div className="mb-3">
|
||||
<div className="flex items-center gap-3">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
Planlama Gantt Şeması
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<p className="text-gray-600">
|
||||
Üretim ve iş emirlerinizi zaman çizelgesinde yönetin.
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -206,9 +206,9 @@ const ProductionOrderForm: React.FC = () => {
|
|||
Geri
|
||||
</button>
|
||||
<div>
|
||||
<h1 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{id === 'new' ? 'Yeni Üretim Emri' : 'Üretim Emri Düzenle'}
|
||||
</h1>
|
||||
</h2>
|
||||
<p className="text-gray-600 mt-0.5 text-sm">
|
||||
{id === 'new'
|
||||
? 'Yeni üretim emri oluşturun'
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ const ProductionOrderList: React.FC = () => {
|
|||
return (
|
||||
<div className="space-y-2">
|
||||
<h3 className="text-lg font-semibold text-gray-900">Açık Satış Siparişleri (Step 1)</h3>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
Üretim emri oluşturmak için malzeme satırlarını seçin.
|
||||
</p>
|
||||
|
||||
|
|
@ -319,7 +319,7 @@ const ProductionOrderList: React.FC = () => {
|
|||
return (
|
||||
<div className="space-y-2">
|
||||
<h3 className="text-lg font-semibold text-gray-900">BOM Seçimi</h3>
|
||||
<p className="text-sm text-gray-600">Her seçilen malzeme için uygun BOM'u seçin.</p>
|
||||
<p className="text-gray-600">Her seçilen malzeme için uygun BOM'u seçin.</p>
|
||||
|
||||
{missingBOMs.length > 0 && (
|
||||
<div className="bg-yellow-50 border border-yellow-200 rounded-lg p-2 mb-3">
|
||||
|
|
@ -361,7 +361,7 @@ const ProductionOrderList: React.FC = () => {
|
|||
{material?.code} {' - '}
|
||||
{material?.name || materialId}
|
||||
</h4>
|
||||
<p className="text-sm text-gray-600">Toplam Miktar: {totalQuantity}</p>
|
||||
<p className="text-gray-600">Toplam Miktar: {totalQuantity}</p>
|
||||
</div>
|
||||
|
||||
<div className="space-y-3">
|
||||
|
|
@ -439,7 +439,7 @@ const ProductionOrderList: React.FC = () => {
|
|||
return (
|
||||
<div className="space-y-2">
|
||||
<h3 className="text-lg font-semibold text-gray-900">İş Merkezi Seçimi</h3>
|
||||
<p className="text-sm text-gray-600">Her operasyon için uygun iş merkezini seçin.</p>
|
||||
<p className="text-gray-600">Her operasyon için uygun iş merkezini seçin.</p>
|
||||
|
||||
<div className="space-y-2 mt-2 overflow-y-auto max-h-[350px]">
|
||||
{selectedBOMsList.map((bom) => (
|
||||
|
|
@ -498,7 +498,7 @@ const ProductionOrderList: React.FC = () => {
|
|||
return (
|
||||
<div className="space-y-2">
|
||||
<h3 className="text-lg font-semibold text-gray-900">Özet ve Onay</h3>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
Seçilen malzemeler, BOM'lar ve iş merkezi atamalarını gözden geçirin.
|
||||
</p>
|
||||
|
||||
|
|
@ -597,8 +597,8 @@ const ProductionOrderList: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Üretim Emirleri</h2>
|
||||
<p className="text-gray-600 mt-1">Üretim süreçlerinizi yönetin ve izleyin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Üretim Emirleri</h2>
|
||||
<p className="text-gray-600">Üretim süreçlerinizi yönetin ve izleyin</p>
|
||||
</div>
|
||||
<div className="flex items-center space-x-3">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -82,8 +82,8 @@ const Requirements: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Malzeme İhtiyaçları</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Malzeme İhtiyaçları</h2>
|
||||
<p className="text-gray-600">
|
||||
Malzeme ihtiyaç hesaplama ve satın alma önerileri
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -322,8 +322,8 @@ const WorkOrders: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">İş Emirleri</h2>
|
||||
<p className="text-sm text-gray-600">Üretim operasyonlarının detaylı takibi</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">İş Emirleri</h2>
|
||||
<p className="text-gray-600">Üretim operasyonlarının detaylı takibi</p>
|
||||
</div>
|
||||
<button
|
||||
onClick={handleAdd}
|
||||
|
|
|
|||
|
|
@ -165,8 +165,8 @@ const ActivityTypes: React.FC = () => {
|
|||
<div className="space-y-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Aktivite Türleri</h2>
|
||||
<p className="text-gray-600 mt-1">Proje ve görev aktivitelerinin türlerini yönetin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Aktivite Türleri</h2>
|
||||
<p className="text-gray-600">Proje ve görev aktivitelerinin türlerini yönetin</p>
|
||||
</div>
|
||||
<div className="flex gap-1.5">
|
||||
<div className="flex border border-gray-300 rounded-lg overflow-hidden">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useState } from "react";
|
||||
import React, { useState } from 'react'
|
||||
import {
|
||||
FaSearch,
|
||||
FaDollarSign,
|
||||
|
|
@ -7,78 +7,64 @@ import {
|
|||
FaClock,
|
||||
FaChartBar,
|
||||
FaDownload,
|
||||
} from "react-icons/fa";
|
||||
import { PsProjectCostTracking } from "../../../types/ps";
|
||||
import { mockProjectCostTracking } from "../../../mocks/mockProjectCostTracking";
|
||||
import Widget from "../../../components/common/Widget";
|
||||
} from 'react-icons/fa'
|
||||
import { PsProjectCostTracking } from '../../../types/ps'
|
||||
import { mockProjectCostTracking } from '../../../mocks/mockProjectCostTracking'
|
||||
import Widget from '../../../components/common/Widget'
|
||||
import {
|
||||
getCostTimeTrackingStatusColor,
|
||||
getCostTimeTrackingStatusIcon,
|
||||
getCostTimeTrackingStatusText,
|
||||
} from "../../../utils/erp";
|
||||
} from '../../../utils/erp'
|
||||
import { Container } from '@/components/shared'
|
||||
|
||||
const CostTimeTracking: React.FC = () => {
|
||||
const [searchTerm, setSearchTerm] = useState("");
|
||||
const [statusFilter, setStatusFilter] = useState<string>("");
|
||||
const [selectedProject, setSelectedProject] = useState<string>("");
|
||||
const [searchTerm, setSearchTerm] = useState('')
|
||||
const [statusFilter, setStatusFilter] = useState<string>('')
|
||||
const [selectedProject, setSelectedProject] = useState<string>('')
|
||||
|
||||
const getBudgetVariance = (project: PsProjectCostTracking) => {
|
||||
return (
|
||||
((project.actualCost - (project.plannedBudget * project.progress) / 100) /
|
||||
project.plannedBudget) *
|
||||
100
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
const getScheduleVariance = (project: PsProjectCostTracking) => {
|
||||
if (!project.actualDuration) return 0;
|
||||
const plannedDurationAtProgress =
|
||||
(project.plannedDuration * project.progress) / 100;
|
||||
return (
|
||||
((project.actualDuration - plannedDurationAtProgress) /
|
||||
project.plannedDuration) *
|
||||
100
|
||||
);
|
||||
};
|
||||
if (!project.actualDuration) return 0
|
||||
const plannedDurationAtProgress = (project.plannedDuration * project.progress) / 100
|
||||
return ((project.actualDuration - plannedDurationAtProgress) / project.plannedDuration) * 100
|
||||
}
|
||||
|
||||
const filteredProjects = mockProjectCostTracking.filter((project) => {
|
||||
const matchesSearch =
|
||||
project.projectName.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||
project.projectCode.toLowerCase().includes(searchTerm.toLowerCase());
|
||||
const matchesStatus =
|
||||
statusFilter === "" || project.status === statusFilter;
|
||||
return matchesSearch && matchesStatus;
|
||||
});
|
||||
project.projectCode.toLowerCase().includes(searchTerm.toLowerCase())
|
||||
const matchesStatus = statusFilter === '' || project.status === statusFilter
|
||||
return matchesSearch && matchesStatus
|
||||
})
|
||||
|
||||
const totalPlannedBudget = mockProjectCostTracking.reduce(
|
||||
(sum, p) => sum + p.plannedBudget,
|
||||
0
|
||||
);
|
||||
const totalActualCost = mockProjectCostTracking.reduce(
|
||||
(sum, p) => sum + p.actualCost,
|
||||
0
|
||||
);
|
||||
const totalPlannedBudget = mockProjectCostTracking.reduce((sum, p) => sum + p.plannedBudget, 0)
|
||||
const totalActualCost = mockProjectCostTracking.reduce((sum, p) => sum + p.actualCost, 0)
|
||||
const averageProgress =
|
||||
mockProjectCostTracking.reduce((sum, p) => sum + p.progress, 0) /
|
||||
mockProjectCostTracking.length;
|
||||
mockProjectCostTracking.reduce((sum, p) => sum + p.progress, 0) / mockProjectCostTracking.length
|
||||
|
||||
const ProjectDetailModal = () => {
|
||||
const project = mockProjectCostTracking.find(
|
||||
(p) => p.id === selectedProject
|
||||
);
|
||||
const project = mockProjectCostTracking.find((p) => p.id === selectedProject)
|
||||
|
||||
if (!selectedProject || !project) return null;
|
||||
if (!selectedProject || !project) return null
|
||||
|
||||
const StatusIcon = getCostTimeTrackingStatusIcon(project.status);
|
||||
const budgetVariance = getBudgetVariance(project);
|
||||
const scheduleVariance = getScheduleVariance(project);
|
||||
const StatusIcon = getCostTimeTrackingStatusIcon(project.status)
|
||||
const budgetVariance = getBudgetVariance(project)
|
||||
const scheduleVariance = getScheduleVariance(project)
|
||||
|
||||
return (
|
||||
<div className="fixed inset-0 z-50 overflow-y-auto">
|
||||
<div className="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
|
||||
<div
|
||||
className="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity"
|
||||
onClick={() => setSelectedProject("")}
|
||||
onClick={() => setSelectedProject('')}
|
||||
></div>
|
||||
|
||||
<div className="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-2 sm:align-middle sm:max-w-3xl sm:w-full">
|
||||
|
|
@ -91,15 +77,10 @@ const CostTimeTracking: React.FC = () => {
|
|||
</h3>
|
||||
</div>
|
||||
<button
|
||||
onClick={() => setSelectedProject("")}
|
||||
onClick={() => setSelectedProject('')}
|
||||
className="text-gray-400 hover:text-gray-600"
|
||||
>
|
||||
<svg
|
||||
className="w-5 h-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<svg className="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
|
|
@ -120,23 +101,17 @@ const CostTimeTracking: React.FC = () => {
|
|||
<div className="space-y-3">
|
||||
<div className="flex justify-between">
|
||||
<span>Planlanan Bütçe:</span>
|
||||
<span className="font-medium">
|
||||
₺{project.plannedBudget.toLocaleString()}
|
||||
</span>
|
||||
<span className="font-medium">₺{project.plannedBudget.toLocaleString()}</span>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span>Gerçekleşen Maliyet:</span>
|
||||
<span className="font-medium">
|
||||
₺{project.actualCost.toLocaleString()}
|
||||
</span>
|
||||
<span className="font-medium">₺{project.actualCost.toLocaleString()}</span>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span>Kalan Bütçe:</span>
|
||||
<span
|
||||
className={`font-medium ${
|
||||
project.remainingBudget >= 0
|
||||
? "text-green-600"
|
||||
: "text-red-600"
|
||||
project.remainingBudget >= 0 ? 'text-green-600' : 'text-red-600'
|
||||
}`}
|
||||
>
|
||||
₺{project.remainingBudget.toLocaleString()}
|
||||
|
|
@ -145,20 +120,14 @@ const CostTimeTracking: React.FC = () => {
|
|||
<div className="flex justify-between">
|
||||
<span>Bütçe Kullanım Oranı:</span>
|
||||
<span className="font-medium">
|
||||
%
|
||||
{(
|
||||
(project.actualCost / project.plannedBudget) *
|
||||
100
|
||||
).toFixed(1)}
|
||||
%{((project.actualCost / project.plannedBudget) * 100).toFixed(1)}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span>Bütçe Varyansı:</span>
|
||||
<span
|
||||
className={`font-medium flex items-center gap-1 ${
|
||||
budgetVariance >= 0
|
||||
? "text-red-600"
|
||||
: "text-green-600"
|
||||
budgetVariance >= 0 ? 'text-red-600' : 'text-green-600'
|
||||
}`}
|
||||
>
|
||||
{budgetVariance >= 0 ? (
|
||||
|
|
@ -181,15 +150,11 @@ const CostTimeTracking: React.FC = () => {
|
|||
<div className="space-y-3">
|
||||
<div className="flex justify-between">
|
||||
<span>Planlanan Süre:</span>
|
||||
<span className="font-medium">
|
||||
{project.plannedDuration} gün
|
||||
</span>
|
||||
<span className="font-medium">{project.plannedDuration} gün</span>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span>Geçen Süre:</span>
|
||||
<span className="font-medium">
|
||||
{project.actualDuration || 0} gün
|
||||
</span>
|
||||
<span className="font-medium">{project.actualDuration || 0} gün</span>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span>İlerleme:</span>
|
||||
|
|
@ -198,16 +163,14 @@ const CostTimeTracking: React.FC = () => {
|
|||
<div className="flex justify-between">
|
||||
<span>Planlanan Bitiş:</span>
|
||||
<span className="font-medium">
|
||||
{project.plannedEndDate.toLocaleDateString("tr-TR")}
|
||||
{project.plannedEndDate.toLocaleDateString('tr-TR')}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span>Süre Varyansı:</span>
|
||||
<span
|
||||
className={`font-medium flex items-center gap-1 ${
|
||||
scheduleVariance >= 0
|
||||
? "text-red-600"
|
||||
: "text-green-600"
|
||||
scheduleVariance >= 0 ? 'text-red-600' : 'text-green-600'
|
||||
}`}
|
||||
>
|
||||
{scheduleVariance >= 0 ? (
|
||||
|
|
@ -244,25 +207,20 @@ const CostTimeTracking: React.FC = () => {
|
|||
<div className="flex justify-between text-sm mb-1">
|
||||
<span>Bütçe Kullanımı</span>
|
||||
<span>
|
||||
%
|
||||
{(
|
||||
(project.actualCost / project.plannedBudget) *
|
||||
100
|
||||
).toFixed(1)}
|
||||
%{((project.actualCost / project.plannedBudget) * 100).toFixed(1)}
|
||||
</span>
|
||||
</div>
|
||||
<div className="w-full bg-gray-200 rounded-full h-2">
|
||||
<div
|
||||
className={`h-2 rounded-full ${
|
||||
project.actualCost > project.plannedBudget
|
||||
? "bg-red-600"
|
||||
: "bg-green-600"
|
||||
? 'bg-red-600'
|
||||
: 'bg-green-600'
|
||||
}`}
|
||||
style={{
|
||||
width: `${Math.min(
|
||||
(project.actualCost / project.plannedBudget) *
|
||||
(project.actualCost / project.plannedBudget) * 100,
|
||||
100,
|
||||
100
|
||||
)}%`,
|
||||
}}
|
||||
></div>
|
||||
|
|
@ -273,27 +231,20 @@ const CostTimeTracking: React.FC = () => {
|
|||
<div className="flex justify-between text-sm mb-1">
|
||||
<span>Süre Kullanımı</span>
|
||||
<span>
|
||||
%
|
||||
{(
|
||||
(project.actualDuration /
|
||||
project.plannedDuration) *
|
||||
100
|
||||
).toFixed(1)}
|
||||
%{((project.actualDuration / project.plannedDuration) * 100).toFixed(1)}
|
||||
</span>
|
||||
</div>
|
||||
<div className="w-full bg-gray-200 rounded-full h-2">
|
||||
<div
|
||||
className={`h-2 rounded-full ${
|
||||
project.actualDuration > project.plannedDuration
|
||||
? "bg-red-600"
|
||||
: "bg-green-600"
|
||||
? 'bg-red-600'
|
||||
: 'bg-green-600'
|
||||
}`}
|
||||
style={{
|
||||
width: `${Math.min(
|
||||
(project.actualDuration /
|
||||
project.plannedDuration) *
|
||||
(project.actualDuration / project.plannedDuration) * 100,
|
||||
100,
|
||||
100
|
||||
)}%`,
|
||||
}}
|
||||
></div>
|
||||
|
|
@ -307,19 +258,16 @@ const CostTimeTracking: React.FC = () => {
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="space-y-2 pt-2">
|
||||
<Container>
|
||||
<div className="space-y-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
Proje Maliyet ve Süre Takibi
|
||||
</h2>
|
||||
<p className="text-gray-600 mt-1">
|
||||
Projelerin bütçe ve zaman performansını analiz edin
|
||||
</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Proje Maliyet ve Süre Takibi</h2>
|
||||
<p className="text-gray-600">Projelerin bütçe ve zaman performansını analiz edin</p>
|
||||
</div>
|
||||
<div className="flex gap-2">
|
||||
<button className="bg-green-600 text-white px-3 py-1.5 rounded-lg hover:bg-green-700 flex items-center gap-2">
|
||||
|
|
@ -354,10 +302,7 @@ const CostTimeTracking: React.FC = () => {
|
|||
|
||||
<Widget
|
||||
title="Aktif Projeler"
|
||||
value={
|
||||
mockProjectCostTracking.filter((p) => p.status !== "COMPLETED")
|
||||
.length
|
||||
}
|
||||
value={mockProjectCostTracking.filter((p) => p.status !== 'COMPLETED').length}
|
||||
color="purple"
|
||||
icon="FaChartPie"
|
||||
/>
|
||||
|
|
@ -416,11 +361,9 @@ const CostTimeTracking: React.FC = () => {
|
|||
</thead>
|
||||
<tbody className="bg-white divide-y divide-gray-200">
|
||||
{filteredProjects.map((project) => {
|
||||
const StatusIcon = getCostTimeTrackingStatusIcon(
|
||||
project.status
|
||||
);
|
||||
const budgetVariance = getBudgetVariance(project);
|
||||
const scheduleVariance = getScheduleVariance(project);
|
||||
const StatusIcon = getCostTimeTrackingStatusIcon(project.status)
|
||||
const budgetVariance = getBudgetVariance(project)
|
||||
const scheduleVariance = getScheduleVariance(project)
|
||||
|
||||
return (
|
||||
<tr key={project.id} className="hover:bg-gray-50 text-sm">
|
||||
|
|
@ -429,9 +372,7 @@ const CostTimeTracking: React.FC = () => {
|
|||
<div className="text-sm font-medium text-gray-900">
|
||||
{project.projectName}
|
||||
</div>
|
||||
<div className="text-sm text-gray-500">
|
||||
{project.projectCode}
|
||||
</div>
|
||||
<div className="text-sm text-gray-500">{project.projectCode}</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-2 py-1.5 whitespace-nowrap">
|
||||
|
|
@ -442,9 +383,7 @@ const CostTimeTracking: React.FC = () => {
|
|||
</div>
|
||||
<div
|
||||
className={`flex items-center gap-1 ${
|
||||
budgetVariance >= 0
|
||||
? "text-red-600"
|
||||
: "text-green-600"
|
||||
budgetVariance >= 0 ? 'text-red-600' : 'text-green-600'
|
||||
}`}
|
||||
>
|
||||
{budgetVariance >= 0 ? (
|
||||
|
|
@ -461,14 +400,11 @@ const CostTimeTracking: React.FC = () => {
|
|||
<td className="px-2 py-1.5 whitespace-nowrap">
|
||||
<div className="text-sm">
|
||||
<div className="font-medium text-gray-900">
|
||||
{project.actualDuration || 0} /{" "}
|
||||
{project.plannedDuration} gün
|
||||
{project.actualDuration || 0} / {project.plannedDuration} gün
|
||||
</div>
|
||||
<div
|
||||
className={`flex items-center gap-1 ${
|
||||
scheduleVariance >= 0
|
||||
? "text-red-600"
|
||||
: "text-green-600"
|
||||
scheduleVariance >= 0 ? 'text-red-600' : 'text-green-600'
|
||||
}`}
|
||||
>
|
||||
{scheduleVariance >= 0 ? (
|
||||
|
|
@ -498,7 +434,7 @@ const CostTimeTracking: React.FC = () => {
|
|||
<td className="px-2 py-1.5 whitespace-nowrap">
|
||||
<span
|
||||
className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getCostTimeTrackingStatusColor(
|
||||
project.status
|
||||
project.status,
|
||||
)}`}
|
||||
>
|
||||
<StatusIcon className="w-3 h-3 mr-1" />
|
||||
|
|
@ -514,17 +450,18 @@ const CostTimeTracking: React.FC = () => {
|
|||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
);
|
||||
)
|
||||
})}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Project Detail Modal */}
|
||||
<ProjectDetailModal />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
</Container>
|
||||
)
|
||||
}
|
||||
|
||||
export default CostTimeTracking;
|
||||
export default CostTimeTracking
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ const PhaseViewModal: React.FC<PhaseViewModalProps> = ({
|
|||
<h3 className="text-base font-semibold text-gray-900">
|
||||
Proje Aşamaları
|
||||
</h3>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{project.name} - {project.code}
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -630,10 +630,10 @@ const ProjectForm: React.FC = () => {
|
|||
<FaFolder className="w-6 h-6 text-blue-600" />
|
||||
</div>
|
||||
<div>
|
||||
<h1 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{isEdit ? formData.code : 'Yeni Proje'}
|
||||
</h1>
|
||||
<p className="text-sm text-gray-600">
|
||||
</h2>
|
||||
<p className="text-gray-600">
|
||||
{isEdit ? formData.name : 'Proje bilgilerini girin'}
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -545,8 +545,8 @@ const ProjectGantt: React.FC<ProjectGanttProps> = ({ employeeId }) => {
|
|||
<div className="space-y-2">
|
||||
<div className="flex items-center gap-3">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">İş Yükü ve Proje Takibi</h2>
|
||||
<p className="text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">İş Yükü ve Proje Takibi</h2>
|
||||
<p className="text-gray-600">
|
||||
Tüm görevlerinizi merkezi bir noktadan yönetin.
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -110,8 +110,8 @@ const ProjectList: React.FC = () => {
|
|||
<div className="space-y-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Proje Listesi</h2>
|
||||
<p className="text-gray-600 mt-1">Proje listesinizi yönetin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Proje Listesi</h2>
|
||||
<p className="text-gray-600">Proje listesinizi yönetin</p>
|
||||
</div>
|
||||
<div className="flex items-center space-x-2">
|
||||
{/* View Toggle */}
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ const ProjectPhases: React.FC = () => {
|
|||
<div className="flex-1">
|
||||
<div className="flex items-center gap-3 mb-2">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Proje Aşamaları</h2>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Proje Aşamaları</h2>
|
||||
<p className="text-gray-600">Proje İlerleme Yönetimi</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ const ProjectTasks: React.FC = () => {
|
|||
<div className="space-y-2">
|
||||
<div className="flex items-center justify-between mb-4">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Görev Yönetimi</h2>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Görev Yönetimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Proje görevlerinizi oluşturun, düzenleyin ve takip edin
|
||||
</p>
|
||||
|
|
@ -470,7 +470,7 @@ const ProjectTasks: React.FC = () => {
|
|||
<h3 className="text-lg font-bold text-gray-900">
|
||||
{selectedTask.taskCode} - {selectedTask.name}
|
||||
</h3>
|
||||
<p className="text-sm text-gray-600">Görev detayları</p>
|
||||
<p className="text-gray-600">Görev detayları</p>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ const ProjectView: React.FC = () => {
|
|||
</div>
|
||||
<div>
|
||||
<h1 className="text-lg font-bold text-gray-900">{project.code}</h1>
|
||||
<p className="text-sm text-gray-600">{project.name}</p>
|
||||
<p className="text-gray-600">{project.name}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -307,7 +307,7 @@ const ProjectView: React.FC = () => {
|
|||
<h4 className="font-medium text-gray-900">
|
||||
{project.projectManager.fullName}
|
||||
</h4>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{project.projectManager.jobPosition?.name || 'Proje Yöneticisi'}
|
||||
</p>
|
||||
<div className="flex items-center mt-1 text-sm text-gray-500">
|
||||
|
|
@ -339,7 +339,7 @@ const ProjectView: React.FC = () => {
|
|||
<h4 className="font-medium text-gray-900">
|
||||
{project.customer.name}
|
||||
</h4>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{project.customer.primaryContact?.firstName}{' '}
|
||||
{project.customer.primaryContact?.lastName}
|
||||
</p>
|
||||
|
|
|
|||
|
|
@ -147,10 +147,9 @@ const TaskDailyUpdates: React.FC = () => {
|
|||
<Container>
|
||||
<div className="space-y-2">
|
||||
{/* Header */}
|
||||
<div className="mb-4 mt-2">
|
||||
<div className="flex items-center justify-between mb-3">
|
||||
<div>
|
||||
<h2 className="text-lg font-bold text-gray-900">Günlük Aktivite Takibi</h2>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Günlük Aktivite Takibi</h2>
|
||||
<p className="text-gray-600">
|
||||
Günlük işlerinizi planlayın, tamamlanan görevleri işaretleyin
|
||||
</p>
|
||||
|
|
@ -166,12 +165,7 @@ const TaskDailyUpdates: React.FC = () => {
|
|||
|
||||
{/* Stats */}
|
||||
<div className="grid grid-cols-4 gap-2">
|
||||
<Widget
|
||||
title="Bugün Toplam"
|
||||
value={`${todayTotalHours}h`}
|
||||
color="blue"
|
||||
icon="FaClock"
|
||||
/>
|
||||
<Widget title="Bugün Toplam" value={`${todayTotalHours}h`} color="blue" icon="FaClock" />
|
||||
|
||||
<Widget
|
||||
title="Onaylanan"
|
||||
|
|
@ -186,9 +180,8 @@ const TaskDailyUpdates: React.FC = () => {
|
|||
<Widget
|
||||
title="Beklemede"
|
||||
value={
|
||||
filteredUpdates.filter(
|
||||
(update) => update.status === DailyUpdateStatusEnum.Submitted,
|
||||
).length
|
||||
filteredUpdates.filter((update) => update.status === DailyUpdateStatusEnum.Submitted)
|
||||
.length
|
||||
}
|
||||
color="yellow"
|
||||
icon="FaHourglassHalf"
|
||||
|
|
@ -238,7 +231,6 @@ const TaskDailyUpdates: React.FC = () => {
|
|||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Updates List */}
|
||||
<div className="bg-white rounded-lg shadow-sm border border-gray-200">
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ const TaskViewModal: React.FC<TaskViewModalProps> = ({
|
|||
<h3 className="text-lg font-semibold text-gray-900">
|
||||
Proje Görevleri
|
||||
</h3>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{project.name} - {project.code}
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ const Contact: React.FC = () => {
|
|||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12">
|
||||
<div className="space-y-4">
|
||||
<div className="bg-white rounded-xl shadow-lg p-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-6">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{translate('::Public.contact.info.title')}
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ const Home: React.FC = () => {
|
|||
className="p-8 bg-white rounded-xl shadow-lg hover:shadow-xl transition-shadow"
|
||||
>
|
||||
<div className="mb-6">{feature.icon}</div>
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-4">{feature.title}</h3>
|
||||
<h2 className="text-2xl font-bold text-gray-900">{feature.title}</h2>
|
||||
<p className="text-gray-600">{feature.description}</p>
|
||||
</div>
|
||||
))}
|
||||
|
|
|
|||
|
|
@ -94,8 +94,8 @@ const ApprovalWorkflows: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Onay Süreçleri</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Onay Süreçleri</h2>
|
||||
<p className="text-gray-600">
|
||||
Departman bazlı satınalma onay süreçlerini yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -164,8 +164,8 @@ const DeliveryTracking: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Teslimat Takibi</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Teslimat Takibi</h2>
|
||||
<p className="text-gray-600">
|
||||
Sipariş teslimatlarını takip edin ve yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -66,10 +66,10 @@ const MaterialCard: React.FC = () => {
|
|||
<FaBox className="w-6 h-6 text-blue-600" />
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{material.code}
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">{material.name}</p>
|
||||
<p className="text-gray-600">{material.name}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center space-x-1.5">
|
||||
|
|
|
|||
|
|
@ -337,10 +337,10 @@ const MaterialForm: React.FC = () => {
|
|||
<div className="bg-white rounded-lg shadow-sm border border-gray-200 p-2.5">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{isEdit ? "Malzeme Düzenle" : "Yeni Malzeme Ekle"}
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{isEdit
|
||||
? "Mevcut malzeme bilgilerini güncelleyin"
|
||||
: "Yeni malzeme kartı oluşturun"}
|
||||
|
|
|
|||
|
|
@ -103,8 +103,8 @@ const MaterialGroups: React.FC = () => {
|
|||
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3">
|
||||
{/* Title & Description */}
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Malzeme Grupları</h2>
|
||||
<p className="text-sm text-gray-600">Malzeme gruplarını yönetin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Malzeme Grupları</h2>
|
||||
<p className="text-gray-600">Malzeme gruplarını yönetin</p>
|
||||
</div>
|
||||
|
||||
{/* Header Actions */}
|
||||
|
|
|
|||
|
|
@ -365,8 +365,8 @@ const MaterialList: React.FC = () => {
|
|||
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3">
|
||||
{/* Title & Description */}
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Malzeme Listesi</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Malzeme Listesi</h2>
|
||||
<p className="text-gray-600">
|
||||
Toplam {totalCount} malzeme bulundu
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -72,8 +72,8 @@ const MaterialTypes: React.FC = () => {
|
|||
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3">
|
||||
{/* Title & Description */}
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Malzeme Türleri</h2>
|
||||
<p className="text-sm text-gray-600">Malzeme türlerini yönetin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Malzeme Türleri</h2>
|
||||
<p className="text-gray-600">Malzeme türlerini yönetin</p>
|
||||
</div>
|
||||
|
||||
{/* Header Actions */}
|
||||
|
|
|
|||
|
|
@ -147,10 +147,10 @@ const OrderManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
Satınalma Siparişleri
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
Satınalma siparişlerini oluşturun ve takip edin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ const OrderManagementForm: React.FC = () => {
|
|||
>
|
||||
<FaArrowLeft />
|
||||
</button>
|
||||
<h1 className="text-xl font-bold text-gray-900">{pageTitle}</h1>
|
||||
<h2 className="text-2xl font-bold text-gray-900">{pageTitle}</h2>
|
||||
</div>
|
||||
<div className="flex space-x-2">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ const PurchaseRequestForm: React.FC = () => {
|
|||
>
|
||||
<FaArrowLeft />
|
||||
</button>
|
||||
<h1 className="text-xl font-bold text-gray-900">{pageTitle}</h1>
|
||||
<h2 className="text-2xl font-bold text-gray-900">{pageTitle}</h2>
|
||||
</div>
|
||||
<div className="flex space-x-2">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -64,8 +64,8 @@ const PurchaseRequests: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Satınalma Talepleri</h2>
|
||||
<p className="text-sm text-gray-600">Malzeme, hizmet ve iş merkezi taleplerini yönetin</p>
|
||||
<h2 className="text-2xl font-bold text-gray-900">Satınalma Talepleri</h2>
|
||||
<p className="text-gray-600">Malzeme, hizmet ve iş merkezi taleplerini yönetin</p>
|
||||
</div>
|
||||
<button
|
||||
onClick={handleAddNew}
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ const QuotationForm: React.FC = () => {
|
|||
>
|
||||
<FaArrowLeft />
|
||||
</button>
|
||||
<h1 className="text-xl font-bold text-gray-900">{pageTitle}</h1>
|
||||
<h2 className="text-2xl font-bold text-gray-900">{pageTitle}</h2>
|
||||
</div>
|
||||
<div className="flex space-x-2">
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -120,8 +120,8 @@ const QuotationManagement: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Teklif Yönetimi</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Teklif Yönetimi</h2>
|
||||
<p className="text-gray-600">
|
||||
Tedarikçi tekliflerini yönetin ve karşılaştırın
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -96,8 +96,8 @@ const SupplierCards: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Tedarikçiler</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Tedarikçiler</h2>
|
||||
<p className="text-gray-600">
|
||||
Tedarikçi kredi limitleri, özel şartlar ve performans metriklerini
|
||||
yönetin
|
||||
</p>
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@ const InventoryTracking: React.FC = () => {
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Envanter Takibi</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Envanter Takibi</h2>
|
||||
<p className="text-gray-600">
|
||||
Lot ve seri numarası takiplerini yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -477,10 +477,10 @@ const LocationTracking: React.FC = () => {
|
|||
<div className="space-y-4 pt-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
Raf/Lokasyon Bazlı Takip
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<p className="text-gray-600">
|
||||
Lokasyonlardaki stok durumunu takip edin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -111,14 +111,14 @@ const LotForm: React.FC<LotFormProps> = ({
|
|||
<form onSubmit={formik.handleSubmit} className="space-y-2 p-3">
|
||||
<div className="flex items-center justify-between p-2 border-b">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{mode === "create"
|
||||
? "Yeni Lot Kaydı"
|
||||
: mode === "edit"
|
||||
? "Lot Düzenle"
|
||||
: "Lot Detayı"}
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{mode === "create"
|
||||
? "Lot bilgilerini girin"
|
||||
: mode === "edit"
|
||||
|
|
|
|||
|
|
@ -73,10 +73,10 @@ const MaterialMovements: React.FC<{ materialId?: string }> = ({
|
|||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
{materialId ? "Stok Hareketleri" : "Tüm Stok Hareketleri"}
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<p className="text-gray-600">
|
||||
{materialId
|
||||
? `${materialId} kodlu malzeme için`
|
||||
: "Tüm malzemeler için"}{" "}
|
||||
|
|
|
|||
|
|
@ -318,10 +318,10 @@ const PutawayRules: React.FC = () => {
|
|||
<div className="space-y-4 pt-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
Yerleştirme Kuralları
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<p className="text-gray-600">
|
||||
Malzeme yerleştirme kurallarını tanımlayın ve yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -2632,10 +2632,10 @@ const StockLevelsInventory: React.FC = () => {
|
|||
<div className="space-y-4 pt-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">
|
||||
<h2 className="text-2xl font-bold text-gray-900">
|
||||
Stok Durumu & Stok Sayımı
|
||||
</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<p className="text-gray-600">
|
||||
Stok seviyelerini izleyin ve envanter sayımlarını yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ const WarehouseDefinitions: React.FC = () => {
|
|||
<h3 className="font-medium text-sm text-gray-900">
|
||||
{warehouse.name}
|
||||
</h3>
|
||||
<p className="text-sm text-gray-600">{warehouse.code}</p>
|
||||
<p className="text-gray-600">{warehouse.code}</p>
|
||||
</div>
|
||||
</div>
|
||||
{warehouse.isMainWarehouse && (
|
||||
|
|
@ -543,7 +543,7 @@ const WarehouseDefinitions: React.FC = () => {
|
|||
<h3 className="font-medium text-sm text-gray-900">
|
||||
{zone.name}
|
||||
</h3>
|
||||
<p className="text-sm text-gray-600">{zone.zoneCode}</p>
|
||||
<p className="text-gray-600">{zone.zoneCode}</p>
|
||||
</div>
|
||||
</div>
|
||||
<span className="inline-flex px-2 py-1 text-xs font-medium rounded-full bg-blue-100 text-blue-800">
|
||||
|
|
@ -1104,8 +1104,8 @@ const WarehouseDefinitions: React.FC = () => {
|
|||
<div className="space-y-4 pt-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-lg font-bold text-gray-900">Depo Tanımları</h2>
|
||||
<p className="text-sm text-gray-600">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Depo Tanımları</h2>
|
||||
<p className="text-gray-600">
|
||||
Depolar, bölgeler ve lokasyonları yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1028,8 +1028,8 @@ const WarehouseIssue: React.FC = () => {
|
|||
<div className="space-y-4 pt-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Stok Çıkış</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Stok Çıkış</h2>
|
||||
<p className="text-gray-600">
|
||||
Depodan malzeme çıkış hareketlerini yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -492,8 +492,8 @@ const WarehouseReceipt: React.FC = () => {
|
|||
<div className="space-y-4 pt-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Stok Giriş</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Stok Giriş</h2>
|
||||
<p className="text-gray-600">
|
||||
Depoya malzeme giriş hareketlerini yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -547,8 +547,8 @@ const WarehouseTransfer: React.FC = () => {
|
|||
<div className="space-y-4 pt-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 className="text-xl font-bold text-gray-900">Stok Transfer</h2>
|
||||
<p className="text-sm text-gray-600 mt-1">
|
||||
<h2 className="text-2xl font-bold text-gray-900">Stok Transfer</h2>
|
||||
<p className="text-gray-600">
|
||||
Depolar arası malzeme transfer hareketlerini yönetin
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in a new issue