diff --git a/src/layouts/admin-inc/SideMenu.vue b/src/layouts/admin-inc/SideMenu.vue
index b11ba43..88d9932 100644
--- a/src/layouts/admin-inc/SideMenu.vue
+++ b/src/layouts/admin-inc/SideMenu.vue
@@ -142,6 +142,10 @@
title: 'Piyango Listesi',
to: '/muhasebe/piyango-listesi'
},
+ {
+ title: 'İzin Bedel Oranı',
+ to: '/muhasebe/izin-bedel-orani'
+ },
{
title: 'Ayarlar',
to: '/muhasebe/ayarlar'
diff --git a/src/module/muhasebe/components/TabIzinBedelOraniForm.vue b/src/module/muhasebe/components/TabIzinBedelOraniForm.vue
new file mode 100644
index 0000000..4c25f42
--- /dev/null
+++ b/src/module/muhasebe/components/TabIzinBedelOraniForm.vue
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/src/module/muhasebe/components/TabIzinBedelOraniListe.vue b/src/module/muhasebe/components/TabIzinBedelOraniListe.vue
new file mode 100644
index 0000000..8a02ce2
--- /dev/null
+++ b/src/module/muhasebe/components/TabIzinBedelOraniListe.vue
@@ -0,0 +1,141 @@
+
+
+
+
diff --git a/src/module/muhasebe/components/form/FormIzinBedelOrani.vue b/src/module/muhasebe/components/form/FormIzinBedelOrani.vue
new file mode 100644
index 0000000..eeea1af
--- /dev/null
+++ b/src/module/muhasebe/components/form/FormIzinBedelOrani.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/module/muhasebe/components/form/FormMuhasebeAyarlari.vue b/src/module/muhasebe/components/form/FormMuhasebeAyarlari.vue
index 1c46d55..55f5d2e 100644
--- a/src/module/muhasebe/components/form/FormMuhasebeAyarlari.vue
+++ b/src/module/muhasebe/components/form/FormMuhasebeAyarlari.vue
@@ -6,17 +6,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
{
+ const dataStore = useDataStore()
+ const izinBedelOraniStore = useIzinBedelOraniStore()
+ const izinBedelOraniValidationStore = useIzinBedelOraniValidationStore()
+
+ const loaded = ref(false)
+
+ const SaveIzinBedelOrani = async (panelData: Record, isUpdate: boolean = false) => {
+ if (izinBedelOraniValidationStore.FormCheck(panelData)) {
+ var res: any
+
+ if (!isUpdate) {
+ res = await dataStore.dataPost('IzinBedelOrani', {
+ data: {
+ adi: panelData.ad,
+ oran: panelData.oran,
+ aciklama: panelData.aciklama,
+ aktif: panelData.aktif
+ }
+ })
+ } else {
+ res = await dataStore.dataPut('IzinBedelOrani/' + panelData.id, {
+ data: {
+ id: panelData.id,
+ adi: panelData.ad,
+ oran: panelData.oran,
+ aciklama: panelData.aciklama,
+ aktif: panelData.aktif
+ }
+ })
+ }
+
+ if (res !== 'errorfalse') {
+ return true
+ }
+ }
+ return false
+ }
+
+ const DeleteIzinBedelOrani = async (id: number | string) => {
+ var res = await dataStore.dataDelete('IzinBedelOrani/' + id)
+ return res !== 'errorfalse'
+ }
+
+ const GetIzinBedelOraniList = async () => {
+ var res = await dataStore.dataGet('IzinBedelOrani')
+ if (res !== 'errorfalse') {
+ izinBedelOraniStore.izinBedelOraniList = res
+ return res
+ }
+ return []
+ }
+
+ const GetIzinBedelOraniById = async (id: number | string) => {
+ var res = await dataStore.dataGet('IzinBedelOrani/' + id)
+ if (res !== 'errorfalse') {
+ return res
+ }
+ return null
+ }
+
+ const GetAktifIzinBedelOraniList = async () => {
+ var res = await dataStore.dataGet('IzinBedelOrani/Aktif')
+ if (res !== 'errorfalse') {
+ izinBedelOraniStore.aktifIzinBedelOraniList = res
+ return res
+ }
+ return []
+ }
+
+ const UpdateIzinBedelOraniStatus = async (id: number | string, aktif: boolean) => {
+ var res = await dataStore.dataPut('IzinBedelOrani/' + id + '/Status', {
+ data: {
+ Aktif: aktif
+ }
+ })
+ return res !== 'errorfalse'
+ }
+
+ const LoadData = async () => {
+ await GetIzinBedelOraniList()
+ await GetAktifIzinBedelOraniList()
+ loaded.value = true
+ }
+
+ return {
+ loaded,
+ SaveIzinBedelOrani,
+ DeleteIzinBedelOrani,
+ GetIzinBedelOraniList,
+ GetIzinBedelOraniById,
+ GetAktifIzinBedelOraniList,
+ UpdateIzinBedelOraniStatus,
+ LoadData
+ }
+})
diff --git a/src/module/muhasebe/store/izinBedelOraniStore.ts b/src/module/muhasebe/store/izinBedelOraniStore.ts
new file mode 100644
index 0000000..a3cf02e
--- /dev/null
+++ b/src/module/muhasebe/store/izinBedelOraniStore.ts
@@ -0,0 +1,59 @@
+import { defineStore } from 'pinia'
+import { ref, reactive } from 'vue'
+import { useUsersStore } from '@/stores/usersStore'
+
+export const useIzinBedelOraniStore = defineStore('izinBedelOraniStore', () => {
+ const usersStore = useUsersStore()
+
+ const izinBedelOraniBaseForm = reactive>({
+ ad: '',
+ oran: 0,
+ aciklama: '',
+ aktif: true,
+ appUserId: usersStore.userId
+ })
+
+ const izinBedelOraniForm = reactive>({})
+ const izinBedelOraniSafeForm = reactive>({})
+ const izinBedelOraniList = ref[]>([])
+ const aktifIzinBedelOraniList = ref[]>([])
+ const isNew = ref(false)
+ const izinBedelOraniLoaded = ref(false)
+
+ const ResetForm = () => {
+ Object.assign(izinBedelOraniForm, izinBedelOraniBaseForm)
+ }
+
+ const SafeServerData = () => {
+ Object.assign(izinBedelOraniSafeForm, izinBedelOraniForm)
+ }
+
+ const RestoreData = () => {
+ Object.assign(izinBedelOraniForm, izinBedelOraniSafeForm)
+ }
+
+ const NewForm = () => {
+ ResetForm()
+ isNew.value = true
+ }
+
+ const EditForm = (item: Record) => {
+ Object.assign(izinBedelOraniForm, item)
+ isNew.value = false
+ }
+
+ return {
+ izinBedelOraniBaseForm,
+ izinBedelOraniForm,
+ izinBedelOraniSafeForm,
+ izinBedelOraniList,
+ aktifIzinBedelOraniList,
+ isNew,
+ izinBedelOraniLoaded,
+ ResetForm,
+ SafeServerData,
+ RestoreData,
+ NewForm,
+ EditForm
+ }
+})
diff --git a/src/module/muhasebe/validation/izinBedelOraniValidationStore.ts b/src/module/muhasebe/validation/izinBedelOraniValidationStore.ts
new file mode 100644
index 0000000..df11648
--- /dev/null
+++ b/src/module/muhasebe/validation/izinBedelOraniValidationStore.ts
@@ -0,0 +1,64 @@
+import { defineStore } from 'pinia'
+import { ref, reactive } from 'vue'
+import { useValidationStore } from '@/stores/validationStore'
+
+export const useIzinBedelOraniValidationStore = defineStore(
+ 'izinBedelOraniValidationStore',
+ () => {
+ const validationStore = useValidationStore()
+
+ const formChanged = ref(false)
+ const isFormValid = ref(true)
+ const invalidTexts = reactive>({})
+
+ const FormCheck = (panelData: Record): boolean => {
+ Object.assign(invalidTexts, {})
+
+ validationStore.IsFieldEmpty(
+ panelData,
+ invalidTexts,
+ 'ad',
+ 'Ad alanı zorunludur'
+ )
+
+ validationStore.IsFieldEmpty(
+ panelData,
+ invalidTexts,
+ 'oran',
+ 'Oran alanı zorunludur'
+ )
+
+ validationStore.IsFieldEmpty(
+ panelData,
+ invalidTexts,
+ 'aciklama',
+ 'Açıklama alanı zorunludur'
+ )
+
+ // Oran validation (0-100 arası)
+ if (panelData.oran !== undefined && panelData.oran !== '') {
+ const oran = parseFloat(panelData.oran)
+ if (isNaN(oran) || oran < 0 || oran > 100) {
+ invalidTexts.oran = 'Oran 0-100 arasında olmalıdır'
+ }
+ }
+
+ isFormValid.value = Object.keys(invalidTexts).length === 0
+ return isFormValid.value
+ }
+
+ const ResetValidation = () => {
+ Object.assign(invalidTexts, {})
+ formChanged.value = false
+ isFormValid.value = true
+ }
+
+ return {
+ formChanged,
+ isFormValid,
+ invalidTexts,
+ FormCheck,
+ ResetValidation
+ }
+ }
+)
diff --git a/src/module/muhasebe/views/IzinBedelOrani.vue b/src/module/muhasebe/views/IzinBedelOrani.vue
new file mode 100644
index 0000000..5b189df
--- /dev/null
+++ b/src/module/muhasebe/views/IzinBedelOrani.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ isUpdate ? 'Güncelle' : 'Ekle' }}
+
+
+
+
+
+