Project Management ve Title

This commit is contained in:
Sedat Öztürk 2025-09-16 00:02:48 +03:00
parent 2217722243
commit 8b88970fe2
100 changed files with 525 additions and 593 deletions

View file

@ -36,7 +36,7 @@ export const KickParticipantModal: React.FC<KickParticipantModalProps> = ({
</div> </div>
<div> <div>
<h3 className="text-lg font-semibold text-gray-900">Katılımcıyı Çıkar</h3> <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>
</div> </div>

View file

@ -1,11 +1,8 @@
import React from 'react' import React from 'react'
import { import { FaCheckCircle, FaArrowLeft } from 'react-icons/fa'
FaCheckCircle,
FaArrowLeft
} from 'react-icons/fa';
import { useNavigate } from 'react-router-dom' import { useNavigate } from 'react-router-dom'
import { ROUTES_ENUM } from '@/routes/route.constant' import { ROUTES_ENUM } from '@/routes/route.constant'
import { useLocalization } from '@/utils/hooks/useLocalization'; import { useLocalization } from '@/utils/hooks/useLocalization'
interface OrderSuccessProps { interface OrderSuccessProps {
orderId: string orderId: string
@ -15,20 +12,26 @@ interface OrderSuccessProps {
export const OrderSuccess: React.FC<OrderSuccessProps> = ({ orderId, onBackToShop }) => { export const OrderSuccess: React.FC<OrderSuccessProps> = ({ orderId, onBackToShop }) => {
const navigate = useNavigate() const navigate = useNavigate()
const { translate } = useLocalization() const { translate } = useLocalization()
return ( return (
<div className="max-w-2xl mx-auto text-center"> <div className="max-w-2xl mx-auto text-center">
<div className="bg-white rounded-xl shadow-lg border border-gray-200 p-8"> <div className="bg-white rounded-xl shadow-lg border border-gray-200 p-8">
<div className="mb-6"> <div className="mb-6">
<FaCheckCircle className="w-16 h-16 text-green-500 mx-auto mb-4" /> <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"> <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> </p>
</div> </div>
<div className="bg-green-50 border border-green-200 rounded-lg p-4 mb-6"> <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"> <ul className="text-sm text-green-700 space-y-1 text-left">
<li> {translate('::Public.order.success.step1')}</li> <li> {translate('::Public.order.success.step1')}</li>
<li> {translate('::Public.order.success.step2')}</li> <li> {translate('::Public.order.success.step2')}</li>

View file

@ -171,9 +171,9 @@ export const ProductCatalog: React.FC<ProductCatalogProps> = ({
<div className="text-gray-400 mb-2"> <div className="text-gray-400 mb-2">
<FaFilter className="w-12 h-12 mx-auto" /> <FaFilter className="w-12 h-12 mx-auto" />
</div> </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')} {translate('::Public.products.empty.title')}
</h3> </h2>
<p className="text-gray-600">{translate('::Public.products.empty.description')}</p> <p className="text-gray-600">{translate('::Public.products.empty.description')}</p>
</div> </div>
)} )}

View file

@ -134,9 +134,9 @@ export const ReportViewer: React.FC = () => {
<div className="min-h-screen bg-gray-50 flex items-center justify-center"> <div className="min-h-screen bg-gray-50 flex items-center justify-center">
<div className="text-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> <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')} {translate('::App.Reports.ReportViewer.LoadingTitle')}
</h1> </h2>
<p className="text-gray-600">{translate('::App.Reports.ReportViewer.LoadingSubtitle')}</p> <p className="text-gray-600">{translate('::App.Reports.ReportViewer.LoadingSubtitle')}</p>
</div> </div>
</div> </div>

View file

@ -462,8 +462,8 @@ const BankManagement: React.FC<BankManagementProps> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Banka Yönetimi</h2> <h2 className="text-2xl font-bold text-gray-900">Banka Yönetimi</h2>
<p className="text-sm text-gray-500"> <p className="text-gray-600">
Banka hesapları ve EFT/Havale işlemleri Banka hesapları ve EFT/Havale işlemleri
</p> </p>
</div> </div>

View file

@ -69,7 +69,7 @@ const CashAccountDetails: React.FC<CashAccountDetailsProps> = ({
<h2 className="text-lg font-semibold text-gray-900"> <h2 className="text-lg font-semibold text-gray-900">
Kasa Hesabı Detayları Kasa Hesabı Detayları
</h2> </h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{account.name} ({account.accountCode}) {account.name} ({account.accountCode})
</p> </p>
</div> </div>

View file

@ -340,8 +340,8 @@ const CashManagement: React.FC<CashManagementProps> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Kasa Yönetimi</h2> <h2 className="text-2xl font-bold text-gray-900">Kasa Yönetimi</h2>
<p className="text-sm text-gray-500"> <p className="text-gray-600">
Nakit giriş-çıkış işlemleri yönetimi Nakit giriş-çıkış işlemleri yönetimi
</p> </p>
</div> </div>

View file

@ -666,8 +666,8 @@ const CheckNoteManagement: React.FC<CheckNoteManagementProps> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Çek & Senet Takibi</h2> <h2 className="text-2xl 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> <p className="text-gray-600">Alınan ve verilen çek & senet yönetimi</p>
</div> </div>
<div className="flex gap-2 text-sm"> <div className="flex gap-2 text-sm">
<button <button

View file

@ -534,10 +534,10 @@ const CurrentAccountManagement: React.FC<CurrentAccountManagementProps> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
Cari Hesap Yönetimi Cari Hesap Yönetimi
</h2> </h2>
<p className="text-sm text-gray-500"> <p className="text-gray-600">
Müşteri ve tedarikçi cari hesaplarının yönetimi Müşteri ve tedarikçi cari hesaplarının yönetimi
</p> </p>
</div> </div>

View file

@ -315,8 +315,8 @@ const InvoiceManagement: React.FC<InvoiceManagementProps> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Fatura Yönetimi</h2> <h2 className="text-2xl font-bold text-gray-900">Fatura Yönetimi</h2>
<p className="text-sm text-gray-500"> <p className="text-gray-600">
Alış ve satış faturaları yönetimi Alış ve satış faturaları yönetimi
</p> </p>
</div> </div>

View file

@ -76,7 +76,7 @@ const WaybillDetails: React.FC<WaybillDetailsProps> = ({
<h2 className="text-lg font-semibold text-gray-900"> <h2 className="text-lg font-semibold text-gray-900">
İrsaliye Detayları İrsaliye Detayları
</h2> </h2>
<p className="text-sm text-gray-600">{waybill.waybillNumber}</p> <p className="text-gray-600">{waybill.waybillNumber}</p>
</div> </div>
</div> </div>
<div className="flex items-center gap-1"> <div className="flex items-center gap-1">

View file

@ -314,8 +314,8 @@ const WaybillManagement: React.FC<WaybillManagementProps> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">İrsaliye Yönetimi</h2> <h2 className="text-2xl font-bold text-gray-900">İrsaliye Yönetimi</h2>
<p className="text-sm text-gray-500"> <p className="text-gray-600">
Giriş ve çıkış irsaliyeleri yönetimi Giriş ve çıkış irsaliyeleri yönetimi
</p> </p>
</div> </div>

View file

@ -50,7 +50,7 @@ const ActivityDetails: React.FC<ActivityDetailsProps> = ({ isOpen, onClose, onEd
</div> </div>
<div> <div>
<h2 className="text-lg font-semibold text-gray-900">{activity.subject}</h2> <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> </div>
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">

View file

@ -257,8 +257,8 @@ const ActivityRecords: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Görüşme / Aktivite Kayıtları</h2> <h2 className="text-2xl 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> <p className="text-gray-600">Müşteri etkileşimleri ve aktivite takibi</p>
</div> </div>
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
<button <button

View file

@ -201,7 +201,7 @@ const CustomerEdit: React.FC = () => {
</div> </div>
<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> <p className="text-sm text-gray-600">{customer.name}</p>
</div> </div>
</div> </div>

View file

@ -130,7 +130,7 @@ const CustomerForm: React.FC = () => {
<h2 className="text-lg font-semibold text-gray-900"> <h2 className="text-lg font-semibold text-gray-900">
{isEdit ? 'Müşteri Düzenle' : 'Yeni Müşteri'} {isEdit ? 'Müşteri Düzenle' : 'Yeni Müşteri'}
</h2> </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'} {isEdit ? 'Mevcut müşteri bilgilerini güncelleyin' : 'Yeni müşteri bilgilerini girin'}
</p> </p>
</div> </div>

View file

@ -128,7 +128,7 @@ const CustomerForm: React.FC = () => {
<h2 className="text-lg font-semibold text-gray-900"> <h2 className="text-lg font-semibold text-gray-900">
{isEdit ? 'Müşteri Düzenle' : 'Yeni Müşteri'} {isEdit ? 'Müşteri Düzenle' : 'Yeni Müşteri'}
</h2> </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'} {isEdit ? 'Mevcut müşteri bilgilerini güncelleyin' : 'Yeni müşteri bilgilerini girin'}
</p> </p>
</div> </div>

View file

@ -16,8 +16,8 @@ const CustomerListWithToggle: React.FC = () => {
{/* Header with View Toggle */} {/* Header with View Toggle */}
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3"> <div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3">
<div> <div>
<h1 className="text-xl font-bold text-gray-900">Müşteri Listesi</h1> <h2 className="text-2xl font-bold text-gray-900">Müşteri Listesi</h2>
<p className="text-sm text-gray-600 mt-1">Müşteri listesi ve detay bilgileri</p> <p className="text-gray-600">Müşteri listesi ve detay bilgileri</p>
</div> </div>
{/* View Mode Toggle */} {/* View Mode Toggle */}

View file

@ -157,7 +157,7 @@ const CustomerView: React.FC = () => {
<div> <div>
<div className="flex items-center space-x-3"> <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 <span
className={classNames( className={classNames(
'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium border', '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" /> <FaUser className="w-8 h-8 text-blue-600" />
</div> </div>
<div> <div>
<h4 className="text-xl font-semibold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
{customer.primaryContact?.fullName} {customer.primaryContact?.fullName}
</h4> </h4>
<p className="text-gray-600"> <p className="text-gray-600">

View file

@ -225,8 +225,8 @@ const LossReasons: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-lg font-bold text-gray-900">Kayıp Nedenleri</h2> <h2 className="text-2xl font-bold text-gray-900">Kayıp Nedenleri</h2>
<p className="text-sm text-gray-600">Fırsat kaybı nedenlerini analiz edin</p> <p className="text-gray-600">Fırsat kaybı nedenlerini analiz edin</p>
</div> </div>
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<button <button

View file

@ -51,7 +51,7 @@ const OpportunityDetails: React.FC<OpportunityDetailsProps> = ({
</div> </div>
<div> <div>
<h2 className="text-lg font-semibold text-gray-900">{opportunity.title}</h2> <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> </div>
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">

View file

@ -241,8 +241,8 @@ const OpportunityManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Teklif & Fırsat Yönetimi</h2> <h2 className="text-2xl 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> <p className="text-gray-600">Satış fırsatları ve teklif takibi</p>
</div> </div>
<button <button
onClick={handleAdd} onClick={handleAdd}

View file

@ -250,10 +250,10 @@ const SalesOrderForm: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <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'} {isEdit ? 'Satış Siparişi Düzenle' : 'Yeni Satış Siparişi'}
</h2> </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>
<div className="flex gap-2"> <div className="flex gap-2">
<button <button

View file

@ -207,8 +207,8 @@ const SalesOrders: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Satış Siparişleri</h2> <h2 className="text-2xl font-bold text-gray-900">Satış Siparişleri</h2>
<p className="text-sm text-gray-600">Müşteri siparişleri ve teslimat takibi</p> <p className="text-gray-600">Müşteri siparişleri ve teslimat takibi</p>
</div> </div>
<button <button
onClick={handleAdd} onClick={handleAdd}
@ -266,12 +266,12 @@ const SalesOrders: React.FC = () => {
<div className="grid grid-cols-1 md:grid-cols-3 gap-4"> <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
<div className="text-center"> <div className="text-center">
<div className="text-2xl font-bold text-blue-600 mb-1">{currentMonthOrders}</div> <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>
<div className="text-center"> <div className="text-center">
<div className="text-2xl font-bold text-gray-600 mb-1">{previousMonthOrders}</div> <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>
<div className="text-center"> <div className="text-center">

View file

@ -144,8 +144,8 @@ const SalesTeamCreate: React.FC = () => {
<FaArrowLeft className="w-5 h-5" /> <FaArrowLeft className="w-5 h-5" />
</button> </button>
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Yeni Satış Ekibi</h2> <h2 className="text-2xl font-bold text-gray-900">Yeni Satış Ekibi</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Yeni satış ekibi oluşturun ve ekip üyelerini atayın Yeni satış ekibi oluşturun ve ekip üyelerini atayın
</p> </p>
</div> </div>

View file

@ -192,8 +192,8 @@ const SalesTeamEdit: React.FC = () => {
<FaArrowLeft className="w-5 h-5" /> <FaArrowLeft className="w-5 h-5" />
</button> </button>
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Satış Ekibi Düzenle</h2> <h2 className="text-2xl 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> <p className="text-gray-600">{team.name} ekibini düzenleyin</p>
</div> </div>
</div> </div>

View file

@ -83,8 +83,8 @@ const SalesTeamView: React.FC = () => {
<FaArrowLeft className="w-5 h-5" /> <FaArrowLeft className="w-5 h-5" />
</button> </button>
<div> <div>
<h2 className="text-xl font-bold text-gray-900">{team.name}</h2> <h2 className="text-2xl font-bold text-gray-900">{team.name}</h2>
<p className="text-gray-600 mt-1">{team.code} Satış ekibi detayları</p> <p className="text-gray-600">{team.code} Satış ekibi detayları</p>
</div> </div>
</div> </div>

View file

@ -205,8 +205,8 @@ const SalesTeams: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Satış Ekipleri</h2> <h2 className="text-2xl font-bold text-gray-900">Satış Ekipleri</h2>
<p className="text-gray-600 mt-1">Satış ekipleri ve performans yönetimi</p> <p className="text-gray-600">Satış ekipleri ve performans yönetimi</p>
</div> </div>
<button <button
onClick={handleAdd} onClick={handleAdd}

View file

@ -110,7 +110,7 @@ const BadgeAssignmentModal: React.FC<BadgeAssignmentModalProps> = ({
</div> </div>
<div> <div>
<h3 className="text-xl font-bold text-gray-900">Rozet Ata</h3> <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 Personele başarı rozeti atayın
</p> </p>
</div> </div>

View file

@ -137,7 +137,7 @@ const BadgeEditModal: React.FC<BadgeEditModalProps> = ({
<h3 className="text-xl font-bold text-gray-900"> <h3 className="text-xl font-bold text-gray-900">
{mode === "edit" ? "Rozet Düzenle" : "Yeni Rozet Oluştur"} {mode === "edit" ? "Rozet Düzenle" : "Yeni Rozet Oluştur"}
</h3> </h3>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{mode === "edit" {mode === "edit"
? "Mevcut rozet bilgilerini güncelleyin" ? "Mevcut rozet bilgilerini güncelleyin"
: "Yeni bir başarı rozeti tanımlayın"} : "Yeni bir başarı rozeti tanımlayın"}

View file

@ -292,8 +292,8 @@ const BadgeManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between mb-2"> <div className="flex items-center justify-between mb-2">
<div> <div>
<h2 className="text-lg font-bold text-gray-900">Rozet Yönetimi</h2> <h2 className="text-2xl font-bold text-gray-900">Rozet Yönetimi</h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
Personel başarı rozetleri ve ödüllendirme sistemi Personel başarı rozetleri ve ödüllendirme sistemi
</p> </p>
</div> </div>

View file

@ -235,7 +235,7 @@ const CostCenterManagement: React.FC = () => {
<div className="flex items-start justify-between mb-4"> <div className="flex items-start justify-between mb-4">
<div> <div>
<h3 className="text-lg font-semibold text-gray-900 mb-1">{costCenter.name}</h3> <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> </div>
<span <span
className={`px-2 py-0.5 text-xs font-medium rounded-full ${getCostCenterTypeColor( className={`px-2 py-0.5 text-xs font-medium rounded-full ${getCostCenterTypeColor(
@ -323,8 +323,8 @@ const CostCenterManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4"> <div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Maliyet Merkezi Yönetimi</h2> <h2 className="text-2xl font-bold text-gray-900">Maliyet Merkezi Yönetimi</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Maliyet merkezlerini ve bütçe takibini yönetin Maliyet merkezlerini ve bütçe takibini yönetin
</p> </p>
</div> </div>

View file

@ -733,8 +733,8 @@ const Degree360Evaluation: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex justify-between items-center"> <div className="flex justify-between items-center">
<div> <div>
<h1 className="text-xl font-bold text-gray-900">360° Değerlendirme Sistemi</h1> <h2 className="text-2xl font-bold text-gray-900">360° Değerlendirme Sistemi</h2>
<p className="text-gray-600 mt-1">Çok yönlü performans değerlendirme sistemi</p> <p className="text-gray-600">Çok yönlü performans değerlendirme sistemi</p>
</div> </div>
</div> </div>
@ -1453,7 +1453,7 @@ const Degree360Evaluation: React.FC = () => {
<div className="flex justify-between items-center"> <div className="flex justify-between items-center">
<div> <div>
<h4 className="font-medium text-gray-900">{campaign.name}</h4> <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"> <div className="flex items-center gap-2 mt-2">
<span <span
className={`inline-block px-2 py-1 text-xs rounded-full ${getCampaignStatusColor( 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 className="flex justify-between items-center">
<div> <div>
<h4 className="font-medium text-gray-900">{employee.fullName}</h4> <h4 className="font-medium text-gray-900">{employee.fullName}</h4>
<p className="text-sm text-gray-600">{employee.jobPosition?.name}</p> <p className="text-gray-600">{employee.jobPosition?.name}</p>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{mockDepartments.find((d) => d.id === employee.departmantId)?.name} {mockDepartments.find((d) => d.id === employee.departmantId)?.name}
</p> </p>
</div> </div>
@ -1571,7 +1571,7 @@ const Degree360Evaluation: React.FC = () => {
<h4 className="font-medium text-gray-900"> <h4 className="font-medium text-gray-900">
{getAssessorTypeText(assessorType)} {getAssessorTypeText(assessorType)}
</h4> </h4>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{getAssessorTypeDescription(assessorType)} {getAssessorTypeDescription(assessorType)}
</p> </p>
{getEvaluatorsByType(evaluationTarget, assessorType).length > 0 && ( {getEvaluatorsByType(evaluationTarget, assessorType).length > 0 && (
@ -1683,7 +1683,7 @@ const Degree360Evaluation: React.FC = () => {
<div className="flex justify-between items-center"> <div className="flex justify-between items-center">
<div> <div>
<h4 className="font-medium text-gray-900">{evaluator.name}</h4> <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"> <span className="inline-block mt-1 px-2 py-1 text-xs rounded-full bg-purple-100 text-purple-800">
{evaluator.department} {evaluator.department}
</span> </span>
@ -1719,7 +1719,7 @@ const Degree360Evaluation: React.FC = () => {
<div className="flex justify-between items-center"> <div className="flex justify-between items-center">
<div> <div>
<h4 className="font-medium text-gray-900">{evaluator.name}</h4> <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"> <span className="inline-block mt-1 px-2 py-1 text-xs rounded-full bg-purple-100 text-purple-800">
{evaluator.department} {evaluator.department}
</span> </span>
@ -2057,7 +2057,7 @@ const Degree360Evaluation: React.FC = () => {
<h5 className="font-medium text-gray-800"> <h5 className="font-medium text-gray-800">
{group.groupName} {group.groupName}
</h5> </h5>
<p className="text-sm text-gray-600">{group.description}</p> <p className="text-gray-600">{group.description}</p>
</div> </div>
<div className="space-y-2.5"> <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 key={group.id} className="border rounded-lg p-2">
<div className="mb-3"> <div className="mb-3">
<h4 className="font-medium text-gray-900 text-sm">{group.groupName}</h4> <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"> <div className="flex items-center gap-2 mt-2">
<span className="text-xs text-gray-500">ırlık: %{group.weight}</span> <span className="text-xs text-gray-500">ırlık: %{group.weight}</span>
<span className="text-xs text-gray-500"></span> <span className="text-xs text-gray-500"></span>

View file

@ -273,8 +273,8 @@ const Degree360Templates: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4"> <div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">360° Şablonlar</h2> <h2 className="text-2xl font-bold text-gray-900">360° Şablonlar</h2>
<p className="text-gray-600 mt-1">360 derece değerlendirme şablonlarını yönetin</p> <p className="text-gray-600">360 derece değerlendirme şablonlarını yönetin</p>
</div> </div>
<button <button
@ -459,7 +459,7 @@ const Degree360Templates: React.FC = () => {
<div> <div>
<h4 className="font-medium">{group.groupName}</h4> <h4 className="font-medium">{group.groupName}</h4>
<p className="text-sm text-gray-600">{group.description}</p> <p className="text-sm text-gray-600">{group.description}</p>
<p className="text-sm text-gray-600">ırlık: {group.weight}%</p> <p className="text-gray-600">ırlık: {group.weight}%</p>
</div> </div>
{isEditMode && ( {isEditMode && (
<div className="flex gap-2"> <div className="flex gap-2">

View file

@ -218,8 +218,8 @@ const DepartmentManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-3"> <div className="flex flex-col sm:flex-row sm:items-center justify-between gap-3">
<div> <div>
<h2 className="text-lg font-bold text-gray-900">Departman Yönetimi</h2> <h2 className="text-2xl font-bold text-gray-900">Departman Yönetimi</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Organizasyon yapısını ve departmanları yönetin Organizasyon yapısını ve departmanları yönetin
</p> </p>
</div> </div>
@ -348,7 +348,7 @@ const DepartmentManagement: React.FC = () => {
<h3 className="font-semibold text-sm text-gray-900 truncate"> <h3 className="font-semibold text-sm text-gray-900 truncate">
{department.name} {department.name}
</h3> </h3>
<p className="text-sm text-gray-600">{department.code}</p> <p className="text-gray-600">{department.code}</p>
</div> </div>
</div> </div>
<span <span

View file

@ -236,10 +236,10 @@ const EmployeeForm: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <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'} {isEdit ? 'Personel Düzenle' : 'Yeni Personel'}
</h2> </h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{isEdit {isEdit
? 'Mevcut personel bilgilerini güncelleyin' ? 'Mevcut personel bilgilerini güncelleyin'
: 'Yeni personel bilgilerini girin'} : 'Yeni personel bilgilerini girin'}

View file

@ -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"> <div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4">
{/* Title & Description */} {/* Title & Description */}
<div> <div>
<h2 className="text-lg font-bold text-gray-900">Personel Listesi</h2> <h2 className="text-2xl font-bold text-gray-900">Personel Listesi</h2>
<p className="text-sm text-gray-600">Şirket çalışanlarının listesi</p> <p className="text-gray-600">Şirket çalışanlarının listesi</p>
</div> </div>
{/* Header Actions */} {/* Header Actions */}

View file

@ -48,8 +48,8 @@ const EmploymentTypes: React.FC = () => {
<div className="flex flex-col gap-4"> <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 className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">İstihdam Türleri</h2> <h2 className="text-2xl 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> <p className="text-gray-600">Personel istihdam türleri ve dağılımı</p>
</div> </div>
{/* New Button - Visible on larger screens */} {/* New Button - Visible on larger screens */}

View file

@ -30,10 +30,10 @@ const JobPositionViewModal: React.FC<JobPositionViewModalProps> = ({
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<FaBriefcase className="w-6 h-6 text-blue-600" /> <FaBriefcase 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">
{position.name} {position.name}
</h2> </h2>
<p className="text-sm text-gray-500">{position.code}</p> <p className="text-gray-600">{position.code}</p>
</div> </div>
</div> </div>
<button <button

View file

@ -335,8 +335,8 @@ const JobPositions: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4"> <div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">İş Pozisyonları</h2> <h2 className="text-2xl font-bold text-gray-900">İş Pozisyonları</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Şirket pozisyonları ve tanımları yönetimi Şirket pozisyonları ve tanımları yönetimi
</p> </p>
</div> </div>

View file

@ -440,8 +440,8 @@ const LeaveManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">İzin Yönetimi</h2> <h2 className="text-2xl 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> <p className="text-gray-600">Personel izin talepleri ve onay süreçleri</p>
</div> </div>
<div className="flex gap-2"> <div className="flex gap-2">
<button <button

View file

@ -360,8 +360,8 @@ const OrganizationChart: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Organizasyon Şeması</h2> <h2 className="text-2xl 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> <p className="text-gray-600">Kurumsal hiyerarşi ve raporlama yapısı</p>
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">

View file

@ -460,8 +460,8 @@ const OvertimeManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Mesai Yönetimi</h2> <h2 className="text-2xl 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> <p className="text-gray-600">Personel mesai talepleri ve onay süreçleri</p>
</div> </div>
<div className="flex gap-2"> <div className="flex gap-2">
<button <button

View file

@ -432,8 +432,8 @@ const PayrollManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Maaş, Prim, Bordro Yönetimi</h2> <h2 className="text-2xl 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> <p className="text-gray-600">Personel ödemelerini hesaplayın ve yönetin</p>
</div> </div>
<div className="flex gap-2"> <div className="flex gap-2">
<button <button

View file

@ -80,8 +80,8 @@ const AssignWorkOrderModal: React.FC<AssignWorkOrderModalProps> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between p-3 border-b border-gray-200"> <div className="flex items-center justify-between p-3 border-b border-gray-200">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">İş Emri Atama</h2> <h2 className="text-2xl font-bold text-gray-900">İş Emri Atama</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Seçili ekiplere ({selectedTeams.length}) bakım planları atayın Seçili ekiplere ({selectedTeams.length}) bakım planları atayın
</p> </p>
</div> </div>
@ -142,7 +142,7 @@ const AssignWorkOrderModal: React.FC<AssignWorkOrderModalProps> = ({
<h4 className="font-medium text-sm text-gray-900"> <h4 className="font-medium text-sm text-gray-900">
{team.name} {team.name}
</h4> </h4>
<p className="text-sm text-gray-600">{team.code}</p> <p className="text-gray-600">{team.code}</p>
</div> </div>
</div> </div>
))} ))}
@ -172,7 +172,7 @@ const AssignWorkOrderModal: React.FC<AssignWorkOrderModalProps> = ({
<h4 className="font-medium text-gray-900"> <h4 className="font-medium text-gray-900">
{plan.planCode} {plan.planCode}
</h4> </h4>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{plan.description} {plan.description}
</p> </p>
<div className="flex items-center space-x-4 mt-1 text-xs text-gray-500"> <div className="flex items-center space-x-4 mt-1 text-xs text-gray-500">

View file

@ -209,10 +209,10 @@ const FaultNotifications: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
Arıza Bildirimleri Arıza Bildirimleri
</h2> </h2>
<p className="text-gray-600 mt-1"> <p className="text-gray-600">
İş merkezi arızalarını takip edin ve yönetin İş merkezi arızalarını takip edin ve yönetin
</p> </p>
</div> </div>

View file

@ -282,8 +282,8 @@ const MaintenanceCalendar: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Bakım Takvimi</h2> <h2 className="text-2xl font-bold text-gray-900">Bakım Takvimi</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Bakım planları ve emirlerini takip edin. Yeni planlama için Bakım planları ve emirlerini takip edin. Yeni planlama için
gün/saat seçin. gün/saat seçin.
</p> </p>

View file

@ -151,8 +151,8 @@ const MaintenancePlans: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Bakım Planları</h2> <h2 className="text-2xl font-bold text-gray-900">Bakım Planları</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Periyodik ve düzeltici bakım planlarını yönetin Periyodik ve düzeltici bakım planlarını yönetin
</p> </p>
</div> </div>

View file

@ -151,8 +151,8 @@ const MaintenanceTeams: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Bakım Ekipleri</h2> <h2 className="text-2xl font-bold text-gray-900">Bakım Ekipleri</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Bakım ekiplerini ve üyelerini yönetin Bakım ekiplerini ve üyelerini yönetin
</p> </p>
</div> </div>

View file

@ -242,8 +242,8 @@ const MaintenanceWorkOrders: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Bakım İş Emirleri</h2> <h2 className="text-2xl font-bold text-gray-900">Bakım İş Emirleri</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Bakım emirlerini takip edin ve yönetin Bakım emirlerini takip edin ve yönetin
</p> </p>
</div> </div>

View file

@ -69,10 +69,10 @@ const PlanStatusChangeModal: React.FC<PlanStatusChangeModalProps> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between p-4 border-b border-gray-200"> <div className="flex items-center justify-between p-4 border-b border-gray-200">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
Plan Durumu Değiştir Plan Durumu Değiştir
</h2> </h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{selectedPlans.length} plan için durum değişikliği {selectedPlans.length} plan için durum değişikliği
</p> </p>
</div> </div>

View file

@ -83,10 +83,10 @@ const TeamStatusChangeModal: React.FC<TeamStatusChangeModalProps> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between p-4 border-b border-gray-200"> <div className="flex items-center justify-between p-4 border-b border-gray-200">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
Ekip Durumu Değiştir Ekip Durumu Değiştir
</h2> </h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{selectedTeams.length} ekibin durumunu değiştirin {selectedTeams.length} ekibin durumunu değiştirin
</p> </p>
</div> </div>

View file

@ -152,8 +152,8 @@ const WorkCenterCards: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">İş Merkezleri</h2> <h2 className="text-2xl font-bold text-gray-900">İş Merkezleri</h2>
<p className="text-gray-600 mt-1">Tüm merkezlerini yönetin ve takip edin</p> <p className="text-gray-600">Tüm merkezlerini yönetin ve takip edin</p>
</div> </div>
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
{/* View Toggle */} {/* View Toggle */}

View file

@ -81,8 +81,8 @@ const BOMManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Ürün Ağaçları (BOM)</h2> <h2 className="text-2xl font-bold text-gray-900">Ürün Ağaçları (BOM)</h2>
<p className="text-sm text-gray-600 mt-0.5"> <p className="text-gray-600">
Ürün bileşenlerini ve üretim operasyonlarını yönetin Ürün bileşenlerini ve üretim operasyonlarını yönetin
</p> </p>
</div> </div>

View file

@ -72,7 +72,7 @@ const CompleteWorkOrderModal: React.FC<CompleteWorkOrderModalProps> = ({
<h3 className="font-medium text-gray-900 mb-2"> <h3 className="font-medium text-gray-900 mb-2">
{workOrder.workOrderNumber} {workOrder.workOrderNumber}
</h3> </h3>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
Kalan Miktar:{" "} Kalan Miktar:{" "}
<span className="font-medium">{remainingQuantity}</span> <span className="font-medium">{remainingQuantity}</span>
</p> </p>

View file

@ -518,8 +518,8 @@ const DemandPlanning: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Talep Planlama</h2> <h2 className="text-2xl font-bold text-gray-900">Talep Planlama</h2>
<p className="text-sm text-gray-600 mt-0.5"> <p className="text-gray-600">
Talep tahmini ve malzeme ihtiyaç hesaplama Talep tahmini ve malzeme ihtiyaç hesaplama
</p> </p>
</div> </div>

View file

@ -62,8 +62,8 @@ const OperationDefinitions: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Operasyon Tanımları</h2> <h2 className="text-2xl font-bold text-gray-900">Operasyon Tanımları</h2>
<p className="text-sm text-gray-600 mt-0.5"> <p className="text-gray-600">
İş merkezlerinde gerçekleştirilen operasyonları tanımlayın İş merkezlerinde gerçekleştirilen operasyonları tanımlayın
</p> </p>
</div> </div>

View file

@ -52,8 +52,8 @@ const OperationTypes: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Operasyon Türleri</h2> <h2 className="text-2xl font-bold text-gray-900">Operasyon Türleri</h2>
<p className="text-sm text-gray-600 mt-0.5"> <p className="text-gray-600">
İş merkezlerinde kullanılacak operasyon türlerini tanımlayın İş merkezlerinde kullanılacak operasyon türlerini tanımlayın
</p> </p>
</div> </div>

View file

@ -507,10 +507,10 @@ const PlanningGantt: React.FC<PlanningGanttProps> = ({
<div className="mb-3"> <div className="mb-3">
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
Planlama Gantt Şeması Planlama Gantt Şeması
</h2> </h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Üretim ve emirlerinizi zaman çizelgesinde yönetin. Üretim ve emirlerinizi zaman çizelgesinde yönetin.
</p> </p>
</div> </div>

View file

@ -206,9 +206,9 @@ const ProductionOrderForm: React.FC = () => {
Geri Geri
</button> </button>
<div> <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'} {id === 'new' ? 'Yeni Üretim Emri' : 'Üretim Emri Düzenle'}
</h1> </h2>
<p className="text-gray-600 mt-0.5 text-sm"> <p className="text-gray-600 mt-0.5 text-sm">
{id === 'new' {id === 'new'
? 'Yeni üretim emri oluşturun' ? 'Yeni üretim emri oluşturun'

View file

@ -212,7 +212,7 @@ const ProductionOrderList: React.FC = () => {
return ( return (
<div className="space-y-2"> <div className="space-y-2">
<h3 className="text-lg font-semibold text-gray-900">ık Satış Siparişleri (Step 1)</h3> <h3 className="text-lg font-semibold text-gray-900">ı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. Üretim emri oluşturmak için malzeme satırlarını seçin.
</p> </p>
@ -319,7 +319,7 @@ const ProductionOrderList: React.FC = () => {
return ( return (
<div className="space-y-2"> <div className="space-y-2">
<h3 className="text-lg font-semibold text-gray-900">BOM Seçimi</h3> <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 && ( {missingBOMs.length > 0 && (
<div className="bg-yellow-50 border border-yellow-200 rounded-lg p-2 mb-3"> <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?.code} {' - '}
{material?.name || materialId} {material?.name || materialId}
</h4> </h4>
<p className="text-sm text-gray-600">Toplam Miktar: {totalQuantity}</p> <p className="text-gray-600">Toplam Miktar: {totalQuantity}</p>
</div> </div>
<div className="space-y-3"> <div className="space-y-3">
@ -439,7 +439,7 @@ const ProductionOrderList: React.FC = () => {
return ( return (
<div className="space-y-2"> <div className="space-y-2">
<h3 className="text-lg font-semibold text-gray-900">İş Merkezi Seçimi</h3> <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 merkezini seçin.</p> <p className="text-gray-600">Her operasyon için uygun merkezini seçin.</p>
<div className="space-y-2 mt-2 overflow-y-auto max-h-[350px]"> <div className="space-y-2 mt-2 overflow-y-auto max-h-[350px]">
{selectedBOMsList.map((bom) => ( {selectedBOMsList.map((bom) => (
@ -498,7 +498,7 @@ const ProductionOrderList: React.FC = () => {
return ( return (
<div className="space-y-2"> <div className="space-y-2">
<h3 className="text-lg font-semibold text-gray-900">Özet ve Onay</h3> <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 merkezi atamalarını gözden geçirin. Seçilen malzemeler, BOM'lar ve merkezi atamalarını gözden geçirin.
</p> </p>
@ -597,8 +597,8 @@ const ProductionOrderList: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Üretim Emirleri</h2> <h2 className="text-2xl font-bold text-gray-900">Üretim Emirleri</h2>
<p className="text-gray-600 mt-1">Üretim süreçlerinizi yönetin ve izleyin</p> <p className="text-gray-600">Üretim süreçlerinizi yönetin ve izleyin</p>
</div> </div>
<div className="flex items-center space-x-3"> <div className="flex items-center space-x-3">
<button <button

View file

@ -82,8 +82,8 @@ const Requirements: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Malzeme İhtiyaçları</h2> <h2 className="text-2xl font-bold text-gray-900">Malzeme İhtiyaçları</h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
Malzeme ihtiyaç hesaplama ve satın alma önerileri Malzeme ihtiyaç hesaplama ve satın alma önerileri
</p> </p>
</div> </div>

View file

@ -322,8 +322,8 @@ const WorkOrders: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">İş Emirleri</h2> <h2 className="text-2xl font-bold text-gray-900">İş Emirleri</h2>
<p className="text-sm text-gray-600">Üretim operasyonlarının detaylı takibi</p> <p className="text-gray-600">Üretim operasyonlarının detaylı takibi</p>
</div> </div>
<button <button
onClick={handleAdd} onClick={handleAdd}

View file

@ -165,8 +165,8 @@ const ActivityTypes: React.FC = () => {
<div className="space-y-2"> <div className="space-y-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Aktivite Türleri</h2> <h2 className="text-2xl 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> <p className="text-gray-600">Proje ve görev aktivitelerinin türlerini yönetin</p>
</div> </div>
<div className="flex gap-1.5"> <div className="flex gap-1.5">
<div className="flex border border-gray-300 rounded-lg overflow-hidden"> <div className="flex border border-gray-300 rounded-lg overflow-hidden">

View file

@ -1,4 +1,4 @@
import React, { useState } from "react"; import React, { useState } from 'react'
import { import {
FaSearch, FaSearch,
FaDollarSign, FaDollarSign,
@ -7,78 +7,64 @@ import {
FaClock, FaClock,
FaChartBar, FaChartBar,
FaDownload, FaDownload,
} from "react-icons/fa"; } from 'react-icons/fa'
import { PsProjectCostTracking } from "../../../types/ps"; import { PsProjectCostTracking } from '../../../types/ps'
import { mockProjectCostTracking } from "../../../mocks/mockProjectCostTracking"; import { mockProjectCostTracking } from '../../../mocks/mockProjectCostTracking'
import Widget from "../../../components/common/Widget"; import Widget from '../../../components/common/Widget'
import { import {
getCostTimeTrackingStatusColor, getCostTimeTrackingStatusColor,
getCostTimeTrackingStatusIcon, getCostTimeTrackingStatusIcon,
getCostTimeTrackingStatusText, getCostTimeTrackingStatusText,
} from "../../../utils/erp"; } from '../../../utils/erp'
import { Container } from '@/components/shared'
const CostTimeTracking: React.FC = () => { const CostTimeTracking: React.FC = () => {
const [searchTerm, setSearchTerm] = useState(""); const [searchTerm, setSearchTerm] = useState('')
const [statusFilter, setStatusFilter] = useState<string>(""); const [statusFilter, setStatusFilter] = useState<string>('')
const [selectedProject, setSelectedProject] = useState<string>(""); const [selectedProject, setSelectedProject] = useState<string>('')
const getBudgetVariance = (project: PsProjectCostTracking) => { const getBudgetVariance = (project: PsProjectCostTracking) => {
return ( return (
((project.actualCost - (project.plannedBudget * project.progress) / 100) / ((project.actualCost - (project.plannedBudget * project.progress) / 100) /
project.plannedBudget) * project.plannedBudget) *
100 100
); )
}; }
const getScheduleVariance = (project: PsProjectCostTracking) => { const getScheduleVariance = (project: PsProjectCostTracking) => {
if (!project.actualDuration) return 0; if (!project.actualDuration) return 0
const plannedDurationAtProgress = const plannedDurationAtProgress = (project.plannedDuration * project.progress) / 100
(project.plannedDuration * project.progress) / 100; return ((project.actualDuration - plannedDurationAtProgress) / project.plannedDuration) * 100
return ( }
((project.actualDuration - plannedDurationAtProgress) /
project.plannedDuration) *
100
);
};
const filteredProjects = mockProjectCostTracking.filter((project) => { const filteredProjects = mockProjectCostTracking.filter((project) => {
const matchesSearch = const matchesSearch =
project.projectName.toLowerCase().includes(searchTerm.toLowerCase()) || project.projectName.toLowerCase().includes(searchTerm.toLowerCase()) ||
project.projectCode.toLowerCase().includes(searchTerm.toLowerCase()); project.projectCode.toLowerCase().includes(searchTerm.toLowerCase())
const matchesStatus = const matchesStatus = statusFilter === '' || project.status === statusFilter
statusFilter === "" || project.status === statusFilter; return matchesSearch && matchesStatus
return matchesSearch && matchesStatus; })
});
const totalPlannedBudget = mockProjectCostTracking.reduce( const totalPlannedBudget = mockProjectCostTracking.reduce((sum, p) => sum + p.plannedBudget, 0)
(sum, p) => sum + p.plannedBudget, const totalActualCost = mockProjectCostTracking.reduce((sum, p) => sum + p.actualCost, 0)
0
);
const totalActualCost = mockProjectCostTracking.reduce(
(sum, p) => sum + p.actualCost,
0
);
const averageProgress = const averageProgress =
mockProjectCostTracking.reduce((sum, p) => sum + p.progress, 0) / mockProjectCostTracking.reduce((sum, p) => sum + p.progress, 0) / mockProjectCostTracking.length
mockProjectCostTracking.length;
const ProjectDetailModal = () => { const ProjectDetailModal = () => {
const project = mockProjectCostTracking.find( const project = mockProjectCostTracking.find((p) => p.id === selectedProject)
(p) => p.id === selectedProject
);
if (!selectedProject || !project) return null; if (!selectedProject || !project) return null
const StatusIcon = getCostTimeTrackingStatusIcon(project.status); const StatusIcon = getCostTimeTrackingStatusIcon(project.status)
const budgetVariance = getBudgetVariance(project); const budgetVariance = getBudgetVariance(project)
const scheduleVariance = getScheduleVariance(project); const scheduleVariance = getScheduleVariance(project)
return ( return (
<div className="fixed inset-0 z-50 overflow-y-auto"> <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="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div <div
className="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity" className="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity"
onClick={() => setSelectedProject("")} onClick={() => setSelectedProject('')}
></div> ></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"> <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> </h3>
</div> </div>
<button <button
onClick={() => setSelectedProject("")} onClick={() => setSelectedProject('')}
className="text-gray-400 hover:text-gray-600" className="text-gray-400 hover:text-gray-600"
> >
<svg <svg className="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
className="w-5 h-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path <path
strokeLinecap="round" strokeLinecap="round"
strokeLinejoin="round" strokeLinejoin="round"
@ -120,23 +101,17 @@ const CostTimeTracking: React.FC = () => {
<div className="space-y-3"> <div className="space-y-3">
<div className="flex justify-between"> <div className="flex justify-between">
<span>Planlanan Bütçe:</span> <span>Planlanan Bütçe:</span>
<span className="font-medium"> <span className="font-medium">{project.plannedBudget.toLocaleString()}</span>
{project.plannedBudget.toLocaleString()}
</span>
</div> </div>
<div className="flex justify-between"> <div className="flex justify-between">
<span>Gerçekleşen Maliyet:</span> <span>Gerçekleşen Maliyet:</span>
<span className="font-medium"> <span className="font-medium">{project.actualCost.toLocaleString()}</span>
{project.actualCost.toLocaleString()}
</span>
</div> </div>
<div className="flex justify-between"> <div className="flex justify-between">
<span>Kalan Bütçe:</span> <span>Kalan Bütçe:</span>
<span <span
className={`font-medium ${ className={`font-medium ${
project.remainingBudget >= 0 project.remainingBudget >= 0 ? 'text-green-600' : 'text-red-600'
? "text-green-600"
: "text-red-600"
}`} }`}
> >
{project.remainingBudget.toLocaleString()} {project.remainingBudget.toLocaleString()}
@ -145,20 +120,14 @@ const CostTimeTracking: React.FC = () => {
<div className="flex justify-between"> <div className="flex justify-between">
<span>Bütçe Kullanım Oranı:</span> <span>Bütçe Kullanım Oranı:</span>
<span className="font-medium"> <span className="font-medium">
% %{((project.actualCost / project.plannedBudget) * 100).toFixed(1)}
{(
(project.actualCost / project.plannedBudget) *
100
).toFixed(1)}
</span> </span>
</div> </div>
<div className="flex justify-between"> <div className="flex justify-between">
<span>Bütçe Varyansı:</span> <span>Bütçe Varyansı:</span>
<span <span
className={`font-medium flex items-center gap-1 ${ className={`font-medium flex items-center gap-1 ${
budgetVariance >= 0 budgetVariance >= 0 ? 'text-red-600' : 'text-green-600'
? "text-red-600"
: "text-green-600"
}`} }`}
> >
{budgetVariance >= 0 ? ( {budgetVariance >= 0 ? (
@ -181,15 +150,11 @@ const CostTimeTracking: React.FC = () => {
<div className="space-y-3"> <div className="space-y-3">
<div className="flex justify-between"> <div className="flex justify-between">
<span>Planlanan Süre:</span> <span>Planlanan Süre:</span>
<span className="font-medium"> <span className="font-medium">{project.plannedDuration} gün</span>
{project.plannedDuration} gün
</span>
</div> </div>
<div className="flex justify-between"> <div className="flex justify-between">
<span>Geçen Süre:</span> <span>Geçen Süre:</span>
<span className="font-medium"> <span className="font-medium">{project.actualDuration || 0} gün</span>
{project.actualDuration || 0} gün
</span>
</div> </div>
<div className="flex justify-between"> <div className="flex justify-between">
<span>İlerleme:</span> <span>İlerleme:</span>
@ -198,16 +163,14 @@ const CostTimeTracking: React.FC = () => {
<div className="flex justify-between"> <div className="flex justify-between">
<span>Planlanan Bitiş:</span> <span>Planlanan Bitiş:</span>
<span className="font-medium"> <span className="font-medium">
{project.plannedEndDate.toLocaleDateString("tr-TR")} {project.plannedEndDate.toLocaleDateString('tr-TR')}
</span> </span>
</div> </div>
<div className="flex justify-between"> <div className="flex justify-between">
<span>Süre Varyansı:</span> <span>Süre Varyansı:</span>
<span <span
className={`font-medium flex items-center gap-1 ${ className={`font-medium flex items-center gap-1 ${
scheduleVariance >= 0 scheduleVariance >= 0 ? 'text-red-600' : 'text-green-600'
? "text-red-600"
: "text-green-600"
}`} }`}
> >
{scheduleVariance >= 0 ? ( {scheduleVariance >= 0 ? (
@ -244,25 +207,20 @@ const CostTimeTracking: React.FC = () => {
<div className="flex justify-between text-sm mb-1"> <div className="flex justify-between text-sm mb-1">
<span>Bütçe Kullanımı</span> <span>Bütçe Kullanımı</span>
<span> <span>
% %{((project.actualCost / project.plannedBudget) * 100).toFixed(1)}
{(
(project.actualCost / project.plannedBudget) *
100
).toFixed(1)}
</span> </span>
</div> </div>
<div className="w-full bg-gray-200 rounded-full h-2"> <div className="w-full bg-gray-200 rounded-full h-2">
<div <div
className={`h-2 rounded-full ${ className={`h-2 rounded-full ${
project.actualCost > project.plannedBudget project.actualCost > project.plannedBudget
? "bg-red-600" ? 'bg-red-600'
: "bg-green-600" : 'bg-green-600'
}`} }`}
style={{ style={{
width: `${Math.min( width: `${Math.min(
(project.actualCost / project.plannedBudget) * (project.actualCost / project.plannedBudget) * 100,
100, 100,
100
)}%`, )}%`,
}} }}
></div> ></div>
@ -273,27 +231,20 @@ const CostTimeTracking: React.FC = () => {
<div className="flex justify-between text-sm mb-1"> <div className="flex justify-between text-sm mb-1">
<span>Süre Kullanımı</span> <span>Süre Kullanımı</span>
<span> <span>
% %{((project.actualDuration / project.plannedDuration) * 100).toFixed(1)}
{(
(project.actualDuration /
project.plannedDuration) *
100
).toFixed(1)}
</span> </span>
</div> </div>
<div className="w-full bg-gray-200 rounded-full h-2"> <div className="w-full bg-gray-200 rounded-full h-2">
<div <div
className={`h-2 rounded-full ${ className={`h-2 rounded-full ${
project.actualDuration > project.plannedDuration project.actualDuration > project.plannedDuration
? "bg-red-600" ? 'bg-red-600'
: "bg-green-600" : 'bg-green-600'
}`} }`}
style={{ style={{
width: `${Math.min( width: `${Math.min(
(project.actualDuration / (project.actualDuration / project.plannedDuration) * 100,
project.plannedDuration) * 100,
100,
100
)}%`, )}%`,
}} }}
></div> ></div>
@ -307,224 +258,210 @@ const CostTimeTracking: React.FC = () => {
</div> </div>
</div> </div>
</div> </div>
); )
}; }
return ( return (
<div className="space-y-2 pt-2"> <Container>
<div className="flex items-center justify-between"> <div className="space-y-2">
<div> <div className="flex items-center justify-between">
<h2 className="text-xl font-bold text-gray-900"> <div>
Proje Maliyet ve Süre Takibi <h2 className="text-2xl font-bold text-gray-900">Proje Maliyet ve Süre Takibi</h2>
</h2> <p className="text-gray-600">Projelerin bütçe ve zaman performansını analiz edin</p>
<p className="text-gray-600 mt-1"> </div>
Projelerin bütçe ve zaman performansını analiz edin <div className="flex gap-2">
</p> <button className="bg-green-600 text-white px-3 py-1.5 rounded-lg hover:bg-green-700 flex items-center gap-2">
<FaDownload className="w-4 h-4" />
Rapor İndir
</button>
</div>
</div> </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">
<FaDownload className="w-4 h-4" />
Rapor İndir
</button>
</div>
</div>
{/* Summary Cards */} {/* Summary Cards */}
<div className="grid grid-cols-1 md:grid-cols-4 gap-2"> <div className="grid grid-cols-1 md:grid-cols-4 gap-2">
<Widget <Widget
title="Toplam Planlanan Bütçe" title="Toplam Planlanan Bütçe"
value={`${(totalPlannedBudget / 1000000).toFixed(1)}M`} value={`${(totalPlannedBudget / 1000000).toFixed(1)}M`}
color="blue" color="blue"
icon="FaDollarSign" icon="FaDollarSign"
/> />
<Widget <Widget
title="Toplam Gerçekleşen" title="Toplam Gerçekleşen"
value={`${(totalActualCost / 1000000).toFixed(1)}M`} value={`${(totalActualCost / 1000000).toFixed(1)}M`}
color="orange" color="orange"
icon="FaArrowUp" icon="FaArrowUp"
/> />
<Widget <Widget
title="Ortalama İlerleme" title="Ortalama İlerleme"
value={`%${averageProgress.toFixed(0)}`} value={`%${averageProgress.toFixed(0)}`}
color="green" color="green"
icon="FaChartBar" icon="FaChartBar"
/> />
<Widget <Widget
title="Aktif Projeler" title="Aktif Projeler"
value={ value={mockProjectCostTracking.filter((p) => p.status !== 'COMPLETED').length}
mockProjectCostTracking.filter((p) => p.status !== "COMPLETED") color="purple"
.length icon="FaChartPie"
}
color="purple"
icon="FaChartPie"
/>
</div>
{/* Filters */}
<div className="flex flex-col sm:flex-row gap-2">
<div className="relative flex-1">
<FaSearch className="absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 w-4 h-4" />
<input
type="text"
placeholder="Proje ara..."
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
className="pl-10 pr-3 py-1.5 text-sm w-full border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
/> />
</div> </div>
<select
value={statusFilter}
onChange={(e) => setStatusFilter(e.target.value)}
className="px-3 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
>
<option value="">Tüm Durumlar</option>
<option value="ON_TRACK">Planında</option>
<option value="AT_RISK">Risk Altında</option>
<option value="DELAYED">Gecikmiş</option>
<option value="COMPLETED">Tamamlandı</option>
</select>
</div>
{/* Projects Table */} {/* Filters */}
<div className="bg-white rounded-lg shadow-sm border border-gray-200"> <div className="flex flex-col sm:flex-row gap-2">
<div className="overflow-x-auto"> <div className="relative flex-1">
<table className="min-w-full divide-y divide-gray-200"> <FaSearch className="absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 w-4 h-4" />
<thead className="bg-gray-50"> <input
<tr> type="text"
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> placeholder="Proje ara..."
Proje value={searchTerm}
</th> onChange={(e) => setSearchTerm(e.target.value)}
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> className="pl-10 pr-3 py-1.5 text-sm w-full border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
Bütçe Performansı />
</th> </div>
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> <select
Süre Performansı value={statusFilter}
</th> onChange={(e) => setStatusFilter(e.target.value)}
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> className="px-3 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
İlerleme >
</th> <option value="">Tüm Durumlar</option>
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> <option value="ON_TRACK">Planında</option>
Durum <option value="AT_RISK">Risk Altında</option>
</th> <option value="DELAYED">Gecikmiş</option>
<th className="px-2 py-1.5 text-right text-xs font-medium text-gray-500 uppercase tracking-wider"> <option value="COMPLETED">Tamamlandı</option>
İşlemler </select>
</th> </div>
</tr>
</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);
return ( {/* Projects Table */}
<tr key={project.id} className="hover:bg-gray-50 text-sm"> <div className="bg-white rounded-lg shadow-sm border border-gray-200">
<td className="px-2 py-1.5 whitespace-nowrap"> <div className="overflow-x-auto">
<div> <table className="min-w-full divide-y divide-gray-200">
<div className="text-sm font-medium text-gray-900"> <thead className="bg-gray-50">
{project.projectName} <tr>
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
Proje
</th>
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
Bütçe Performansı
</th>
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
Süre Performansı
</th>
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
İlerleme
</th>
<th className="px-2 py-1.5 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
Durum
</th>
<th className="px-2 py-1.5 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">
İşlemler
</th>
</tr>
</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)
return (
<tr key={project.id} className="hover:bg-gray-50 text-sm">
<td className="px-2 py-1.5 whitespace-nowrap">
<div>
<div className="text-sm font-medium text-gray-900">
{project.projectName}
</div>
<div className="text-sm text-gray-500">{project.projectCode}</div>
</div> </div>
<div className="text-sm text-gray-500"> </td>
{project.projectCode} <td className="px-2 py-1.5 whitespace-nowrap">
</div> <div className="text-sm">
</div> <div className="font-medium text-gray-900">
</td> {project.actualCost.toLocaleString()} /
<td className="px-2 py-1.5 whitespace-nowrap"> {project.plannedBudget.toLocaleString()}
<div className="text-sm"> </div>
<div className="font-medium text-gray-900">
{project.actualCost.toLocaleString()} /
{project.plannedBudget.toLocaleString()}
</div>
<div
className={`flex items-center gap-1 ${
budgetVariance >= 0
? "text-red-600"
: "text-green-600"
}`}
>
{budgetVariance >= 0 ? (
<FaArrowUp className="w-3 h-3" />
) : (
<FaArrowDown className="w-3 h-3" />
)}
<span className="text-xs">
%{Math.abs(budgetVariance).toFixed(1)} varyans
</span>
</div>
</div>
</td>
<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
</div>
<div
className={`flex items-center gap-1 ${
scheduleVariance >= 0
? "text-red-600"
: "text-green-600"
}`}
>
{scheduleVariance >= 0 ? (
<FaArrowUp className="w-3 h-3" />
) : (
<FaArrowDown className="w-3 h-3" />
)}
<span className="text-xs">
%{Math.abs(scheduleVariance).toFixed(1)} varyans
</span>
</div>
</div>
</td>
<td className="px-2 py-1.5 whitespace-nowrap">
<div className="flex items-center">
<div className="w-16 bg-gray-200 rounded-full h-2 mr-2">
<div <div
className="bg-blue-600 h-2 rounded-full" className={`flex items-center gap-1 ${
style={{ width: `${project.progress}%` }} budgetVariance >= 0 ? 'text-red-600' : 'text-green-600'
></div> }`}
>
{budgetVariance >= 0 ? (
<FaArrowUp className="w-3 h-3" />
) : (
<FaArrowDown className="w-3 h-3" />
)}
<span className="text-xs">
%{Math.abs(budgetVariance).toFixed(1)} varyans
</span>
</div>
</div> </div>
<span className="text-sm font-medium text-gray-900"> </td>
%{project.progress} <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
</div>
<div
className={`flex items-center gap-1 ${
scheduleVariance >= 0 ? 'text-red-600' : 'text-green-600'
}`}
>
{scheduleVariance >= 0 ? (
<FaArrowUp className="w-3 h-3" />
) : (
<FaArrowDown className="w-3 h-3" />
)}
<span className="text-xs">
%{Math.abs(scheduleVariance).toFixed(1)} varyans
</span>
</div>
</div>
</td>
<td className="px-2 py-1.5 whitespace-nowrap">
<div className="flex items-center">
<div className="w-16 bg-gray-200 rounded-full h-2 mr-2">
<div
className="bg-blue-600 h-2 rounded-full"
style={{ width: `${project.progress}%` }}
></div>
</div>
<span className="text-sm font-medium text-gray-900">
%{project.progress}
</span>
</div>
</td>
<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,
)}`}
>
<StatusIcon className="w-3 h-3 mr-1" />
{getCostTimeTrackingStatusText(project.status)}
</span> </span>
</div> </td>
</td> <td className="px-2 py-1.5 whitespace-nowrap text-right text-sm font-medium">
<td className="px-2 py-1.5 whitespace-nowrap"> <button
<span onClick={() => setSelectedProject(project.id)}
className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getCostTimeTrackingStatusColor( className="text-blue-600 hover:text-blue-900"
project.status >
)}`} Detaylar
> </button>
<StatusIcon className="w-3 h-3 mr-1" /> </td>
{getCostTimeTrackingStatusText(project.status)} </tr>
</span> )
</td> })}
<td className="px-2 py-1.5 whitespace-nowrap text-right text-sm font-medium"> </tbody>
<button </table>
onClick={() => setSelectedProject(project.id)} </div>
className="text-blue-600 hover:text-blue-900"
>
Detaylar
</button>
</td>
</tr>
);
})}
</tbody>
</table>
</div> </div>
</div> </div>
{/* Project Detail Modal */} {/* Project Detail Modal */}
<ProjectDetailModal /> <ProjectDetailModal />
</div> </Container>
); )
}; }
export default CostTimeTracking; export default CostTimeTracking

View file

@ -38,7 +38,7 @@ const PhaseViewModal: React.FC<PhaseViewModalProps> = ({
<h3 className="text-base font-semibold text-gray-900"> <h3 className="text-base font-semibold text-gray-900">
Proje Aşamaları Proje Aşamaları
</h3> </h3>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{project.name} - {project.code} {project.name} - {project.code}
</p> </p>
</div> </div>

View file

@ -630,10 +630,10 @@ const ProjectForm: React.FC = () => {
<FaFolder className="w-6 h-6 text-blue-600" /> <FaFolder className="w-6 h-6 text-blue-600" />
</div> </div>
<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'} {isEdit ? formData.code : 'Yeni Proje'}
</h1> </h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{isEdit ? formData.name : 'Proje bilgilerini girin'} {isEdit ? formData.name : 'Proje bilgilerini girin'}
</p> </p>
</div> </div>

View file

@ -545,8 +545,8 @@ const ProjectGantt: React.FC<ProjectGanttProps> = ({ employeeId }) => {
<div className="space-y-2"> <div className="space-y-2">
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">İş Yükü ve Proje Takibi</h2> <h2 className="text-2xl font-bold text-gray-900">İş Yükü ve Proje Takibi</h2>
<p className="text-gray-600 mt-1"> <p className="text-gray-600">
Tüm görevlerinizi merkezi bir noktadan yönetin. Tüm görevlerinizi merkezi bir noktadan yönetin.
</p> </p>
</div> </div>

View file

@ -110,8 +110,8 @@ const ProjectList: React.FC = () => {
<div className="space-y-2"> <div className="space-y-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Proje Listesi</h2> <h2 className="text-2xl font-bold text-gray-900">Proje Listesi</h2>
<p className="text-gray-600 mt-1">Proje listesinizi yönetin</p> <p className="text-gray-600">Proje listesinizi yönetin</p>
</div> </div>
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
{/* View Toggle */} {/* View Toggle */}

View file

@ -166,7 +166,7 @@ const ProjectPhases: React.FC = () => {
<div className="flex-1"> <div className="flex-1">
<div className="flex items-center gap-3 mb-2"> <div className="flex items-center gap-3 mb-2">
<div> <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> <p className="text-gray-600">Proje İlerleme Yönetimi</p>
</div> </div>
</div> </div>

View file

@ -171,7 +171,7 @@ const ProjectTasks: React.FC = () => {
<div className="space-y-2"> <div className="space-y-2">
<div className="flex items-center justify-between mb-4"> <div className="flex items-center justify-between mb-4">
<div> <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"> <p className="text-gray-600">
Proje görevlerinizi oluşturun, düzenleyin ve takip edin Proje görevlerinizi oluşturun, düzenleyin ve takip edin
</p> </p>
@ -470,7 +470,7 @@ const ProjectTasks: React.FC = () => {
<h3 className="text-lg font-bold text-gray-900"> <h3 className="text-lg font-bold text-gray-900">
{selectedTask.taskCode} - {selectedTask.name} {selectedTask.taskCode} - {selectedTask.name}
</h3> </h3>
<p className="text-sm text-gray-600">Görev detayları</p> <p className="text-gray-600">Görev detayları</p>
</div> </div>
</div> </div>
<button <button

View file

@ -100,7 +100,7 @@ const ProjectView: React.FC = () => {
</div> </div>
<div> <div>
<h1 className="text-lg font-bold text-gray-900">{project.code}</h1> <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> </div>
</div> </div>
@ -307,7 +307,7 @@ const ProjectView: React.FC = () => {
<h4 className="font-medium text-gray-900"> <h4 className="font-medium text-gray-900">
{project.projectManager.fullName} {project.projectManager.fullName}
</h4> </h4>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{project.projectManager.jobPosition?.name || 'Proje Yöneticisi'} {project.projectManager.jobPosition?.name || 'Proje Yöneticisi'}
</p> </p>
<div className="flex items-center mt-1 text-sm text-gray-500"> <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"> <h4 className="font-medium text-gray-900">
{project.customer.name} {project.customer.name}
</h4> </h4>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{project.customer.primaryContact?.firstName}{' '} {project.customer.primaryContact?.firstName}{' '}
{project.customer.primaryContact?.lastName} {project.customer.primaryContact?.lastName}
</p> </p>

View file

@ -147,96 +147,88 @@ const TaskDailyUpdates: React.FC = () => {
<Container> <Container>
<div className="space-y-2"> <div className="space-y-2">
{/* Header */} {/* Header */}
<div className="mb-4 mt-2"> <div className="flex items-center justify-between mb-3">
<div className="flex items-center justify-between mb-3"> <div>
<div> <h2 className="text-2xl font-bold text-gray-900">Günlük Aktivite Takibi</h2>
<h2 className="text-lg font-bold text-gray-900">Günlük Aktivite Takibi</h2> <p className="text-gray-600">
<p className="text-gray-600"> Günlük işlerinizi planlayın, tamamlanan görevleri işaretleyin
Günlük işlerinizi planlayın, tamamlanan görevleri işaretleyin </p>
</p> </div>
</div> <button
<button onClick={() => setIsModalVisible(true)}
onClick={() => setIsModalVisible(true)} className="bg-blue-600 text-white px-3 py-1.5 text-sm rounded-lg hover:bg-blue-700 flex items-center gap-2 transition-colors shadow-sm"
className="bg-blue-600 text-white px-3 py-1.5 text-sm rounded-lg hover:bg-blue-700 flex items-center gap-2 transition-colors shadow-sm" >
<FaPlus className="w-4 h-4" />
Yeni Günlük Rapor
</button>
</div>
{/* Stats */}
<div className="grid grid-cols-4 gap-2">
<Widget title="Bugün Toplam" value={`${todayTotalHours}h`} color="blue" icon="FaClock" />
<Widget
title="Onaylanan"
value={
filteredUpdates.filter((update) => update.status === DailyUpdateStatusEnum.Approved)
.length
}
color="green"
icon="FaCheckCircle"
/>
<Widget
title="Beklemede"
value={
filteredUpdates.filter((update) => update.status === DailyUpdateStatusEnum.Submitted)
.length
}
color="yellow"
icon="FaHourglassHalf"
/>
<Widget
title="Taslak Rapor"
value={
filteredUpdates.filter((update) => update.status === DailyUpdateStatusEnum.Draft)
.length
}
color="gray"
icon="FaFileAlt"
/>
</div>
{/* Filters */}
<div className="bg-white grid grid-cols-6 gap-2 p-2 rounded-lg shadow-sm border border-gray-200 mt-3 mb-3">
<div className="col-span-2">
<select
value={selectedEmployee}
onChange={(e) => setSelectedEmployee(e.target.value)}
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
> >
<FaPlus className="w-4 h-4" /> {mockEmployees.map((employee) => (
Yeni Günlük Rapor <option key={employee.id} value={employee.id}>
</button> {employee.firstName} {employee.lastName}
</option>
))}
</select>
</div> </div>
<div className="col-span-3">
{/* Stats */} <input
<div className="grid grid-cols-4 gap-2"> type="text"
<Widget placeholder="Açıklama, görev veya çalışan adı..."
title="Bugün Toplam" value={searchQuery}
value={`${todayTotalHours}h`} onChange={(e) => setSearchQuery(e.target.value)}
color="blue" className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
icon="FaClock"
/>
<Widget
title="Onaylanan"
value={
filteredUpdates.filter((update) => update.status === DailyUpdateStatusEnum.Approved)
.length
}
color="green"
icon="FaCheckCircle"
/>
<Widget
title="Beklemede"
value={
filteredUpdates.filter(
(update) => update.status === DailyUpdateStatusEnum.Submitted,
).length
}
color="yellow"
icon="FaHourglassHalf"
/>
<Widget
title="Taslak Rapor"
value={
filteredUpdates.filter((update) => update.status === DailyUpdateStatusEnum.Draft)
.length
}
color="gray"
icon="FaFileAlt"
/> />
</div> </div>
<div className="col-span-1">
{/* Filters */} <input
<div className="bg-white grid grid-cols-6 gap-2 p-2 rounded-lg shadow-sm border border-gray-200 mt-3 mb-3"> type="date"
<div className="col-span-2"> value={selectedDate}
<select onChange={(e) => setSelectedDate(e.target.value)}
value={selectedEmployee} className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
onChange={(e) => setSelectedEmployee(e.target.value)} />
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
>
{mockEmployees.map((employee) => (
<option key={employee.id} value={employee.id}>
{employee.firstName} {employee.lastName}
</option>
))}
</select>
</div>
<div className="col-span-3">
<input
type="text"
placeholder="Açıklama, görev veya çalışan adı..."
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
/>
</div>
<div className="col-span-1">
<input
type="date"
value={selectedDate}
onChange={(e) => setSelectedDate(e.target.value)}
className="w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
/>
</div>
</div> </div>
</div> </div>

View file

@ -122,7 +122,7 @@ const TaskViewModal: React.FC<TaskViewModalProps> = ({
<h3 className="text-lg font-semibold text-gray-900"> <h3 className="text-lg font-semibold text-gray-900">
Proje Görevleri Proje Görevleri
</h3> </h3>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{project.name} - {project.code} {project.name} - {project.code}
</p> </p>
</div> </div>

View file

@ -80,7 +80,7 @@ const Contact: React.FC = () => {
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12"> <div className="grid grid-cols-1 lg:grid-cols-2 gap-12">
<div className="space-y-4"> <div className="space-y-4">
<div className="bg-white rounded-xl shadow-lg p-8"> <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')} {translate('::Public.contact.info.title')}
</h2> </h2>
<div className="space-y-4"> <div className="space-y-4">

View file

@ -184,7 +184,7 @@ const Home: React.FC = () => {
className="p-8 bg-white rounded-xl shadow-lg hover:shadow-xl transition-shadow" className="p-8 bg-white rounded-xl shadow-lg hover:shadow-xl transition-shadow"
> >
<div className="mb-6">{feature.icon}</div> <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> <p className="text-gray-600">{feature.description}</p>
</div> </div>
))} ))}

View file

@ -94,8 +94,8 @@ const ApprovalWorkflows: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Onay Süreçleri</h2> <h2 className="text-2xl font-bold text-gray-900">Onay Süreçleri</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Departman bazlı satınalma onay süreçlerini yönetin Departman bazlı satınalma onay süreçlerini yönetin
</p> </p>
</div> </div>

View file

@ -164,8 +164,8 @@ const DeliveryTracking: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Teslimat Takibi</h2> <h2 className="text-2xl font-bold text-gray-900">Teslimat Takibi</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Sipariş teslimatlarını takip edin ve yönetin Sipariş teslimatlarını takip edin ve yönetin
</p> </p>
</div> </div>

View file

@ -66,10 +66,10 @@ const MaterialCard: React.FC = () => {
<FaBox className="w-6 h-6 text-blue-600" /> <FaBox className="w-6 h-6 text-blue-600" />
</div> </div>
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
{material.code} {material.code}
</h2> </h2>
<p className="text-sm text-gray-600">{material.name}</p> <p className="text-gray-600">{material.name}</p>
</div> </div>
</div> </div>
<div className="flex items-center space-x-1.5"> <div className="flex items-center space-x-1.5">

View file

@ -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="bg-white rounded-lg shadow-sm border border-gray-200 p-2.5">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <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"} {isEdit ? "Malzeme Düzenle" : "Yeni Malzeme Ekle"}
</h2> </h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{isEdit {isEdit
? "Mevcut malzeme bilgilerini güncelleyin" ? "Mevcut malzeme bilgilerini güncelleyin"
: "Yeni malzeme kartı oluşturun"} : "Yeni malzeme kartı oluşturun"}

View file

@ -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"> <div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3">
{/* Title & Description */} {/* Title & Description */}
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Malzeme Grupları</h2> <h2 className="text-2xl font-bold text-gray-900">Malzeme Grupları</h2>
<p className="text-sm text-gray-600">Malzeme gruplarını yönetin</p> <p className="text-gray-600">Malzeme gruplarını yönetin</p>
</div> </div>
{/* Header Actions */} {/* Header Actions */}

View file

@ -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"> <div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3">
{/* Title & Description */} {/* Title & Description */}
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Malzeme Listesi</h2> <h2 className="text-2xl font-bold text-gray-900">Malzeme Listesi</h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
Toplam {totalCount} malzeme bulundu Toplam {totalCount} malzeme bulundu
</p> </p>
</div> </div>

View file

@ -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"> <div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3">
{/* Title & Description */} {/* Title & Description */}
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Malzeme Türleri</h2> <h2 className="text-2xl font-bold text-gray-900">Malzeme Türleri</h2>
<p className="text-sm text-gray-600">Malzeme türlerini yönetin</p> <p className="text-gray-600">Malzeme türlerini yönetin</p>
</div> </div>
{/* Header Actions */} {/* Header Actions */}

View file

@ -147,10 +147,10 @@ const OrderManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
Satınalma Siparişleri Satınalma Siparişleri
</h2> </h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
Satınalma siparişlerini oluşturun ve takip edin Satınalma siparişlerini oluşturun ve takip edin
</p> </p>
</div> </div>

View file

@ -209,7 +209,7 @@ const OrderManagementForm: React.FC = () => {
> >
<FaArrowLeft /> <FaArrowLeft />
</button> </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>
<div className="flex space-x-2"> <div className="flex space-x-2">
<button <button

View file

@ -148,7 +148,7 @@ const PurchaseRequestForm: React.FC = () => {
> >
<FaArrowLeft /> <FaArrowLeft />
</button> </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>
<div className="flex space-x-2"> <div className="flex space-x-2">
<button <button

View file

@ -64,8 +64,8 @@ const PurchaseRequests: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Satınalma Talepleri</h2> <h2 className="text-2xl font-bold text-gray-900">Satınalma Talepleri</h2>
<p className="text-sm text-gray-600">Malzeme, hizmet ve merkezi taleplerini yönetin</p> <p className="text-gray-600">Malzeme, hizmet ve merkezi taleplerini yönetin</p>
</div> </div>
<button <button
onClick={handleAddNew} onClick={handleAddNew}

View file

@ -167,7 +167,7 @@ const QuotationForm: React.FC = () => {
> >
<FaArrowLeft /> <FaArrowLeft />
</button> </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>
<div className="flex space-x-2"> <div className="flex space-x-2">
<button <button

View file

@ -120,8 +120,8 @@ const QuotationManagement: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Teklif Yönetimi</h2> <h2 className="text-2xl font-bold text-gray-900">Teklif Yönetimi</h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
Tedarikçi tekliflerini yönetin ve karşılaştırın Tedarikçi tekliflerini yönetin ve karşılaştırın
</p> </p>
</div> </div>

View file

@ -96,8 +96,8 @@ const SupplierCards: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Tedarikçiler</h2> <h2 className="text-2xl font-bold text-gray-900">Tedarikçiler</h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
Tedarikçi kredi limitleri, özel şartlar ve performans metriklerini Tedarikçi kredi limitleri, özel şartlar ve performans metriklerini
yönetin yönetin
</p> </p>

View file

@ -63,8 +63,8 @@ const InventoryTracking: React.FC = () => {
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Envanter Takibi</h2> <h2 className="text-2xl font-bold text-gray-900">Envanter Takibi</h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
Lot ve seri numarası takiplerini yönetin Lot ve seri numarası takiplerini yönetin
</p> </p>
</div> </div>

View file

@ -477,10 +477,10 @@ const LocationTracking: React.FC = () => {
<div className="space-y-4 pt-2"> <div className="space-y-4 pt-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
Raf/Lokasyon Bazlı Takip Raf/Lokasyon Bazlı Takip
</h2> </h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Lokasyonlardaki stok durumunu takip edin Lokasyonlardaki stok durumunu takip edin
</p> </p>
</div> </div>

View file

@ -111,14 +111,14 @@ const LotForm: React.FC<LotFormProps> = ({
<form onSubmit={formik.handleSubmit} className="space-y-2 p-3"> <form onSubmit={formik.handleSubmit} className="space-y-2 p-3">
<div className="flex items-center justify-between p-2 border-b"> <div className="flex items-center justify-between p-2 border-b">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
{mode === "create" {mode === "create"
? "Yeni Lot Kaydı" ? "Yeni Lot Kaydı"
: mode === "edit" : mode === "edit"
? "Lot Düzenle" ? "Lot Düzenle"
: "Lot Detayı"} : "Lot Detayı"}
</h2> </h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{mode === "create" {mode === "create"
? "Lot bilgilerini girin" ? "Lot bilgilerini girin"
: mode === "edit" : mode === "edit"

View file

@ -73,10 +73,10 @@ const MaterialMovements: React.FC<{ materialId?: string }> = ({
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <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"} {materialId ? "Stok Hareketleri" : "Tüm Stok Hareketleri"}
</h2> </h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
{materialId {materialId
? `${materialId} kodlu malzeme için` ? `${materialId} kodlu malzeme için`
: "Tüm malzemeler için"}{" "} : "Tüm malzemeler için"}{" "}

View file

@ -318,10 +318,10 @@ const PutawayRules: React.FC = () => {
<div className="space-y-4 pt-2"> <div className="space-y-4 pt-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
Yerleştirme Kuralları Yerleştirme Kuralları
</h2> </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 Malzeme yerleştirme kurallarını tanımlayın ve yönetin
</p> </p>
</div> </div>

View file

@ -2632,10 +2632,10 @@ const StockLevelsInventory: React.FC = () => {
<div className="space-y-4 pt-2"> <div className="space-y-4 pt-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900"> <h2 className="text-2xl font-bold text-gray-900">
Stok Durumu & Stok Sayımı Stok Durumu & Stok Sayımı
</h2> </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 Stok seviyelerini izleyin ve envanter sayımlarını yönetin
</p> </p>
</div> </div>

View file

@ -234,7 +234,7 @@ const WarehouseDefinitions: React.FC = () => {
<h3 className="font-medium text-sm text-gray-900"> <h3 className="font-medium text-sm text-gray-900">
{warehouse.name} {warehouse.name}
</h3> </h3>
<p className="text-sm text-gray-600">{warehouse.code}</p> <p className="text-gray-600">{warehouse.code}</p>
</div> </div>
</div> </div>
{warehouse.isMainWarehouse && ( {warehouse.isMainWarehouse && (
@ -543,7 +543,7 @@ const WarehouseDefinitions: React.FC = () => {
<h3 className="font-medium text-sm text-gray-900"> <h3 className="font-medium text-sm text-gray-900">
{zone.name} {zone.name}
</h3> </h3>
<p className="text-sm text-gray-600">{zone.zoneCode}</p> <p className="text-gray-600">{zone.zoneCode}</p>
</div> </div>
</div> </div>
<span className="inline-flex px-2 py-1 text-xs font-medium rounded-full bg-blue-100 text-blue-800"> <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="space-y-4 pt-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-lg font-bold text-gray-900">Depo Tanımları</h2> <h2 className="text-2xl font-bold text-gray-900">Depo Tanımları</h2>
<p className="text-sm text-gray-600"> <p className="text-gray-600">
Depolar, bölgeler ve lokasyonları yönetin Depolar, bölgeler ve lokasyonları yönetin
</p> </p>
</div> </div>

View file

@ -1028,8 +1028,8 @@ const WarehouseIssue: React.FC = () => {
<div className="space-y-4 pt-2"> <div className="space-y-4 pt-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Stok Çıkış</h2> <h2 className="text-2xl font-bold text-gray-900">Stok Çıkış</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Depodan malzeme çıkış hareketlerini yönetin Depodan malzeme çıkış hareketlerini yönetin
</p> </p>
</div> </div>

View file

@ -492,8 +492,8 @@ const WarehouseReceipt: React.FC = () => {
<div className="space-y-4 pt-2"> <div className="space-y-4 pt-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Stok Giriş</h2> <h2 className="text-2xl font-bold text-gray-900">Stok Giriş</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Depoya malzeme giriş hareketlerini yönetin Depoya malzeme giriş hareketlerini yönetin
</p> </p>
</div> </div>

View file

@ -547,8 +547,8 @@ const WarehouseTransfer: React.FC = () => {
<div className="space-y-4 pt-2"> <div className="space-y-4 pt-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h2 className="text-xl font-bold text-gray-900">Stok Transfer</h2> <h2 className="text-2xl font-bold text-gray-900">Stok Transfer</h2>
<p className="text-sm text-gray-600 mt-1"> <p className="text-gray-600">
Depolar arası malzeme transfer hareketlerini yönetin Depolar arası malzeme transfer hareketlerini yönetin
</p> </p>
</div> </div>