-
-
-
-
-
-
-
-
-
-
+
+
-
- Tüm filtreleri temizle
-
+ Tüm filtreleri temizle
-
-
-
- Toplam Görünen Sipariş Tutarı (USD):
-
- {{ store.totalVisibleUSD.toLocaleString('tr-TR', { minimumFractionDigits: 2 }) }}
- USD
-
+
+ Toplam USD:
+
+ {{ store.totalVisibleUSD.toLocaleString('tr-TR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }}
+
+
+
+ Paketlenen USD:
+
+ {{ store.totalPackedVisibleUSD.toLocaleString('tr-TR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }}
+
+
+
+ Paketlenme %:
+
+ {{ store.packedVisibleRatePct.toLocaleString('tr-TR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }}
+
+
-
-
-
-
-
-
-
-
-
{{ formatDate(props.row.OrderDate) }}
@@ -149,27 +139,65 @@
-
+
+
+ {{ Number(props.row.PackedAmount || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) }}
+ {{ props.row.DocCurrencyCode }}
+
+
+
+
+
+ {{ Number(props.row.PackedUSD || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) }} USD
+
+
+
+
+
+ {{ Number(props.row.PackedRatePct || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) }} %
+
+
+
-
- {{ props.value }}
+
+ {{ props.value }}
+
+ {{ props.value }}
+
+
+
+
+
+
+ {{ props.value }}
+
+ {{ props.value }}
+
+
+
+
+
+
+ {{ props.value }}
{{ props.value }}
-
-
- {{ props.value }}
+
+ {{ props.value }}
{{ props.value }}
-
-
-
- ❌ {{ store.error }}
+ Hata: {{ store.error }}
+
+
+
+ Bu modüle erişim yetkiniz yok.
+
@@ -199,47 +230,28 @@
import { onMounted, watch } from 'vue'
import { useRouter } from 'vue-router'
import { useQuasar } from 'quasar'
-
import { useOrderListStore } from 'src/stores/OrdernewListStore'
import { useAuthStore } from 'src/stores/authStore'
import { usePermission } from 'src/composables/usePermission'
-const { canRead, canWrite, canUpdate } = usePermission()
-
-const canReadOrder = canRead('order')
-const canWriteOrder = canWrite('order')
-const canUpdateOrder = canUpdate('order')
-
-/* =========================
- INIT
-========================= */
+const { canRead } = usePermission()
+const canReadOrder = canRead('order')
const router = useRouter()
const $q = useQuasar()
-
-// ⚠️ ÖNCE store tanımlanır
const store = useOrderListStore()
-/* =========================
- SEARCH DEBOUNCE
-========================= */
-
let searchTimer = null
-
watch(
() => store.filters.search,
() => {
clearTimeout(searchTimer)
-
searchTimer = setTimeout(() => {
store.fetchOrders()
}, 400)
}
)
-/* =========================
- HELPERS
-========================= */
function exportExcel () {
const auth = useAuthStore()
@@ -276,80 +288,85 @@ function exportExcel () {
function formatDate (s) {
if (!s) return ''
- const [y, m, d] = s.split('-')
+ const [y, m, d] = String(s).split('-')
+ if (!y || !m || !d) return s
return `${d}.${m}.${y}`
}
-/* =========================
- TABLE COLUMNS
-========================= */
+function packRateClass (value) {
+ const pct = Number(value || 0)
+ if (pct <= 50) return 'pack-rate-danger'
+ if (pct < 100) return 'pack-rate-warn'
+ return 'pack-rate-ok'
+}
const columns = [
{ name: 'select', label: '', field: 'select', align: 'center', sortable: false },
-
- { name: 'OrderNumber', label: 'Sipariş No', field: 'OrderNumber', align: 'left', sortable: true },
- { name: 'OrderDate', label: 'Tarih', field: 'OrderDate', align: 'center', sortable: true },
-
- { name: 'CurrAccCode', label: 'Cari Kod', field: 'CurrAccCode', align: 'left', sortable: true },
-
- {
- name: 'CurrAccDescription',
- label: 'Cari Adı',
- field: 'CurrAccDescription',
- align: 'left',
- sortable: true,
- classes: 'ol-col-cari',
- headerClasses: 'ol-col-cari',
- style: 'max-width:200px'
- },
-
- { name: 'MusteriTemsilcisi', label: 'Temsilci', field: 'MusteriTemsilcisi', align: 'left', sortable: true },
- { name: 'Piyasa', label: 'Piyasa', field: 'Piyasa', align: 'left', sortable: true },
-
- { name: 'CreditableConfirmedDate', label: 'Onay', field: 'CreditableConfirmedDate', align: 'center', sortable: true },
- { name: 'DocCurrencyCode', label: 'PB', field: 'DocCurrencyCode', align: 'center', sortable: true },
-
+ { name: 'OrderNumber', label: 'Sipariş No', field: 'OrderNumber', align: 'left', sortable: true, style: 'min-width:108px;white-space:nowrap', headerStyle: 'min-width:108px;white-space:nowrap' },
+ { name: 'OrderDate', label: 'Tarih', field: 'OrderDate', align: 'center', sortable: true, style: 'min-width:82px;white-space:nowrap', headerStyle: 'min-width:82px;white-space:nowrap' },
+ { name: 'CurrAccCode', label: 'Cari Kod', field: 'CurrAccCode', align: 'left', sortable: true, style: 'min-width:82px;white-space:nowrap', headerStyle: 'min-width:82px;white-space:nowrap' },
+ { name: 'CurrAccDescription', label: 'Cari Adı', field: 'CurrAccDescription', align: 'left', sortable: true, classes: 'ol-col-cari', headerClasses: 'ol-col-cari', style: 'width:160px;max-width:160px', headerStyle: 'width:160px;max-width:160px' },
+ { name: 'MusteriTemsilcisi', label: 'Temsilci', field: 'MusteriTemsilcisi', align: 'left', sortable: true, classes: 'ol-col-short', headerClasses: 'ol-col-short', style: 'width:88px;max-width:88px', headerStyle: 'width:88px;max-width:88px' },
+ { name: 'Piyasa', label: 'Piyasa', field: 'Piyasa', align: 'left', sortable: true, classes: 'ol-col-short', headerClasses: 'ol-col-short', style: 'width:72px;max-width:72px', headerStyle: 'width:72px;max-width:72px' },
+ { name: 'CreditableConfirmedDate', label: 'Onay', field: 'CreditableConfirmedDate', align: 'center', sortable: true, style: 'min-width:86px;white-space:nowrap', headerStyle: 'min-width:86px;white-space:nowrap' },
+ { name: 'DocCurrencyCode', label: 'PB', field: 'DocCurrencyCode', align: 'center', sortable: true, style: 'min-width:46px;white-space:nowrap', headerStyle: 'min-width:46px;white-space:nowrap' },
{
name: 'TotalAmount',
label: 'Tutar',
field: 'TotalAmount',
align: 'right',
sortable: true,
- format: (val, row) =>
- Number(val || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) +
- ' ' + row.DocCurrencyCode
+ style: 'min-width:120px;white-space:nowrap',
+ headerStyle: 'min-width:120px;white-space:nowrap',
+ format: (val, row) => Number(val || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) + ' ' + row.DocCurrencyCode
},
-
{
name: 'TotalAmountUSD',
label: 'Tutar (USD)',
field: 'TotalAmountUSD',
align: 'right',
sortable: true,
- format: val =>
- Number(val || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) + ' USD'
+ style: 'min-width:120px;white-space:nowrap',
+ headerStyle: 'min-width:120px;white-space:nowrap',
+ format: val => Number(val || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) + ' USD'
},
-
- { name: 'IsCreditableConfirmed', label: 'Durum', field: 'IsCreditableConfirmed', align: 'center', sortable: true },
-
{
- name: 'Description',
- label: 'Açıklama',
- field: 'Description',
- align: 'left',
- sortable: false,
- classes: 'ol-col-desc',
- headerClasses: 'ol-col-desc',
- style: 'max-width:220px'
+ name: 'PackedAmount',
+ label: 'Paketlenen',
+ field: 'PackedAmount',
+ align: 'right',
+ sortable: true,
+ style: 'min-width:120px;white-space:nowrap',
+ headerStyle: 'min-width:120px;white-space:nowrap',
+ format: (val, row) => Number(val || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) + ' ' + row.DocCurrencyCode
},
-
+ {
+ name: 'PackedUSD',
+ label: 'Paketlenen (USD)',
+ field: 'PackedUSD',
+ align: 'right',
+ sortable: true,
+ style: 'min-width:120px;white-space:nowrap',
+ headerStyle: 'min-width:120px;white-space:nowrap',
+ format: val => Number(val || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) + ' USD'
+ },
+ {
+ name: 'PackedRatePct',
+ label: 'Paketlenme %',
+ field: 'PackedRatePct',
+ align: 'right',
+ sortable: true,
+ classes: 'ol-pack-rate-cell',
+ headerClasses: 'ol-pack-rate-cell',
+ style: 'min-width:96px;white-space:nowrap',
+ headerStyle: 'min-width:96px;white-space:nowrap',
+ format: val => Number(val || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) + ' %'
+ },
+ { name: 'IsCreditableConfirmed', label: 'Durum', field: 'IsCreditableConfirmed', align: 'center', sortable: true },
+ { name: 'Description', label: 'Açıklama', field: 'Description', align: 'left', sortable: false, classes: 'ol-col-desc', headerClasses: 'ol-col-desc', style: 'width:160px;max-width:160px', headerStyle: 'width:160px;max-width:160px' },
{ name: 'pdf', label: 'PDF', field: 'pdf', align: 'center', sortable: false }
]
-/* =========================
- ACTIONS
-========================= */
-
function selectOrder (row) {
if (!row?.OrderHeaderID) {
$q.notify({ type: 'warning', message: 'OrderHeaderID bulunamadı' })
@@ -397,12 +414,151 @@ function clearFilters () {
})
}
-/* =========================
- INIT LOAD
-========================= */
-
onMounted(() => {
store.fetchOrders()
})
+
diff --git a/ui/src/pages/RoleDepartmentPermissionPage.vue b/ui/src/pages/RoleDepartmentPermissionPage.vue
index 867153a..8d2b0ad 100644
--- a/ui/src/pages/RoleDepartmentPermissionPage.vue
+++ b/ui/src/pages/RoleDepartmentPermissionPage.vue
@@ -68,6 +68,13 @@
Rol + Departman Yetkilendirme
+