diff --git a/hesabixCore/src/Controller/ExploreAccountsController.php b/hesabixCore/src/Controller/ExploreAccountsController.php
index 19af10b..10dc272 100644
--- a/hesabixCore/src/Controller/ExploreAccountsController.php
+++ b/hesabixCore/src/Controller/ExploreAccountsController.php
@@ -51,6 +51,7 @@ class ExploreAccountsController extends AbstractController
$page = $params['page'] ?? 1;
$perPage = $params['perPage'] ?? 10;
$offset = ($page - 1) * $perPage;
+ $dateFilter = $params['dateFilter'] ?? null;
$nodeId = $params['node'] === 'root'
? $this->em->getRepository(HesabdariTable::class)
@@ -80,7 +81,7 @@ class ExploreAccountsController extends AbstractController
foreach ($children as $child) {
$allNodes = $this->getAllDescendants($child, $acc);
$allNodes[] = $child;
- $rows = $this->getRowsForNodes($allNodes, $acc);
+ $rows = $this->getRowsForNodes($allNodes, $acc, $dateFilter);
$output[] = $this->calculateTotals($rows, $child, $acc);
}
break;
@@ -101,7 +102,7 @@ class ExploreAccountsController extends AbstractController
'ref' => $node,
'bid' => $acc['bid'],
'year' => $acc['year'],
- ], $acc['money']);
+ ], $acc['money'], $dateFilter);
$output[] = $this->calculateBankTotals($rows, $bankAccount, $node);
}
break;
@@ -122,7 +123,7 @@ class ExploreAccountsController extends AbstractController
'ref' => $node,
'bid' => $acc['bid'],
'year' => $acc['year'],
- ], $acc['money']);
+ ], $acc['money'], $dateFilter);
$output[] = $this->calculateCashdeskTotals($rows, $cashdesk, $node);
}
break;
@@ -143,7 +144,7 @@ class ExploreAccountsController extends AbstractController
'ref' => $node,
'bid' => $acc['bid'],
'year' => $acc['year'],
- ], $acc['money']);
+ ], $acc['money'], $dateFilter);
$output[] = $this->calculateSalaryTotals($rows, $salary, $node);
}
break;
@@ -162,7 +163,7 @@ class ExploreAccountsController extends AbstractController
'ref' => $node,
'bid' => $acc['bid'],
'year' => $acc['year'],
- ], $acc['money']);
+ ], $acc['money'], $dateFilter);
$output[] = $this->calculatePersonTotals($rows, $person, $node);
}
break;
@@ -181,7 +182,7 @@ class ExploreAccountsController extends AbstractController
'ref' => $node,
'bid' => $acc['bid'],
'year' => $acc['year'],
- ], $acc['money']);
+ ], $acc['money'], $dateFilter);
$output[] = $this->calculateCommodityTotals($rows, $commodity, $node);
}
break;
@@ -200,7 +201,7 @@ class ExploreAccountsController extends AbstractController
'ref' => $node,
'bid' => $acc['bid'],
'year' => $acc['year'],
- ], $acc['money']);
+ ], $acc['money'], $dateFilter);
$output[] = $this->calculateChequeTotals($rows, $cheque, $node);
}
break;
@@ -241,6 +242,7 @@ class ExploreAccountsController extends AbstractController
$page = max(1, (int) ($params['page'] ?? 1));
$perPage = max(1, (int) ($params['perPage'] ?? 10));
$offset = ($page - 1) * $perPage;
+ $dateFilter = $params['dateFilter'] ?? null;
$rows = [];
$totalItems = 0;
@@ -265,6 +267,14 @@ class ExploreAccountsController extends AbstractController
->setParameter('money', $acc['money'])
->setParameter('year', $acc['year']);
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
$totalItems = (int) $qb->select('COUNT(r.id)')
->getQuery()
->getSingleScalarResult();
@@ -298,6 +308,14 @@ class ExploreAccountsController extends AbstractController
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
$totalItems = (int) $qb->select('COUNT(r.id)')
->getQuery()
->getSingleScalarResult();
@@ -331,6 +349,14 @@ class ExploreAccountsController extends AbstractController
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
$totalItems = (int) $qb->select('COUNT(r.id)')
->getQuery()
->getSingleScalarResult();
@@ -364,6 +390,14 @@ class ExploreAccountsController extends AbstractController
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
$totalItems = (int) $qb->select('COUNT(r.id)')
->getQuery()
->getSingleScalarResult();
@@ -396,6 +430,14 @@ class ExploreAccountsController extends AbstractController
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
$totalItems = (int) $qb->select('COUNT(r.id)')
->getQuery()
->getSingleScalarResult();
@@ -428,6 +470,14 @@ class ExploreAccountsController extends AbstractController
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
$totalItems = (int) $qb->select('COUNT(r.id)')
->getQuery()
->getSingleScalarResult();
@@ -460,6 +510,14 @@ class ExploreAccountsController extends AbstractController
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
$totalItems = (int) $qb->select('COUNT(r.id)')
->getQuery()
->getSingleScalarResult();
@@ -500,6 +558,8 @@ class ExploreAccountsController extends AbstractController
throw $this->createNotFoundException('Required parameters (node, type, isObject) are missing');
}
+ $dateFilter = $params['dateFilter'] ?? null;
+
$node = $this->em->getRepository(HesabdariTable::class)
->findNode($params['upperID'] ?? $params['node'], $acc['bid']->getId());
if (!$node) {
@@ -510,7 +570,7 @@ class ExploreAccountsController extends AbstractController
if ($params['isObject'] === false) {
$allNodes = $this->getAllDescendants($node, $acc);
$allNodes[] = $node;
- $rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
+ $qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
->innerJoin('r.doc', 'd')
->where('r.ref IN (:nodeIds)')
->andWhere('r.bid = :bid OR r.bid IS NULL')
@@ -519,9 +579,17 @@ class ExploreAccountsController extends AbstractController
->setParameter('nodeIds', array_map(fn($n) => $n->getId(), $allNodes))
->setParameter('bid', $acc['bid'])
->setParameter('money', $acc['money'])
- ->setParameter('year', $acc['year'])
- ->getQuery()
- ->getResult();
+ ->setParameter('year', $acc['year']);
+
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
+ $rows = $qb->getQuery()->getResult();
} else {
switch ($params['type']) {
case 'bank':
@@ -533,7 +601,7 @@ class ExploreAccountsController extends AbstractController
if (!$item) {
throw $this->createNotFoundException('Bank account not found');
}
- $rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
+ $qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
->innerJoin('r.doc', 'd')
->where('r.bank = :bank')
->andWhere('r.ref = :ref')
@@ -544,9 +612,17 @@ class ExploreAccountsController extends AbstractController
->setParameter('ref', $node)
->setParameter('bid', $acc['bid'])
->setParameter('year', $acc['year'])
- ->setParameter('money', $acc['money'])
- ->getQuery()
- ->getResult();
+ ->setParameter('money', $acc['money']);
+
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
+ $rows = $qb->getQuery()->getResult();
break;
case 'cashdesk':
@@ -558,7 +634,7 @@ class ExploreAccountsController extends AbstractController
if (!$item) {
throw $this->createNotFoundException('Cashdesk not found');
}
- $rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
+ $qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
->innerJoin('r.doc', 'd')
->where('r.cashdesk = :cashdesk')
->andWhere('r.ref = :ref')
@@ -569,9 +645,17 @@ class ExploreAccountsController extends AbstractController
->setParameter('ref', $node)
->setParameter('bid', $acc['bid'])
->setParameter('year', $acc['year'])
- ->setParameter('money', $acc['money'])
- ->getQuery()
- ->getResult();
+ ->setParameter('money', $acc['money']);
+
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
+ $rows = $qb->getQuery()->getResult();
break;
case 'salary':
@@ -583,7 +667,7 @@ class ExploreAccountsController extends AbstractController
if (!$item) {
throw $this->createNotFoundException('Salary not found');
}
- $rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
+ $qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
->innerJoin('r.doc', 'd')
->where('r.salary = :salary')
->andWhere('r.ref = :ref')
@@ -594,9 +678,17 @@ class ExploreAccountsController extends AbstractController
->setParameter('ref', $node)
->setParameter('bid', $acc['bid'])
->setParameter('year', $acc['year'])
- ->setParameter('money', $acc['money'])
- ->getQuery()
- ->getResult();
+ ->setParameter('money', $acc['money']);
+
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
+ $rows = $qb->getQuery()->getResult();
break;
case 'person':
@@ -607,7 +699,7 @@ class ExploreAccountsController extends AbstractController
if (!$item) {
throw $this->createNotFoundException('Person not found');
}
- $rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
+ $qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
->innerJoin('r.doc', 'd')
->where('r.person = :person')
->andWhere('r.ref = :ref')
@@ -618,9 +710,17 @@ class ExploreAccountsController extends AbstractController
->setParameter('ref', $node)
->setParameter('bid', $acc['bid'])
->setParameter('year', $acc['year'])
- ->setParameter('money', $acc['money'])
- ->getQuery()
- ->getResult();
+ ->setParameter('money', $acc['money']);
+
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
+ $rows = $qb->getQuery()->getResult();
break;
case 'commodity':
@@ -631,7 +731,7 @@ class ExploreAccountsController extends AbstractController
if (!$item) {
throw $this->createNotFoundException('Commodity not found');
}
- $rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
+ $qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
->innerJoin('r.doc', 'd')
->where('r.commodity = :commodity')
->andWhere('r.ref = :ref')
@@ -642,9 +742,17 @@ class ExploreAccountsController extends AbstractController
->setParameter('ref', $node)
->setParameter('bid', $acc['bid'])
->setParameter('year', $acc['year'])
- ->setParameter('money', $acc['money'])
- ->getQuery()
- ->getResult();
+ ->setParameter('money', $acc['money']);
+
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
+ $rows = $qb->getQuery()->getResult();
break;
case 'cheque':
@@ -655,7 +763,7 @@ class ExploreAccountsController extends AbstractController
if (!$item) {
throw $this->createNotFoundException('Cheque not found');
}
- $rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
+ $qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
->innerJoin('r.doc', 'd')
->where('r.cheque = :cheque')
->andWhere('r.ref = :ref')
@@ -666,9 +774,17 @@ class ExploreAccountsController extends AbstractController
->setParameter('ref', $node)
->setParameter('bid', $acc['bid'])
->setParameter('year', $acc['year'])
- ->setParameter('money', $acc['money'])
- ->getQuery()
- ->getResult();
+ ->setParameter('money', $acc['money']);
+
+ // اضافه کردن فیلتر تاریخ
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $qb->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
+ $rows = $qb->getQuery()->getResult();
break;
default:
@@ -741,14 +857,14 @@ class ExploreAccountsController extends AbstractController
/**
* پیدا کردن ردیفهای مرتبط با نودها (برای type=calc)
*/
- private function getRowsForNodes(array $nodes, array $acc): array
+ private function getRowsForNodes(array $nodes, array $acc, ?array $dateFilter = null): array
{
$nodeIds = array_unique(array_map(fn($node) => $node->getId(), $nodes));
return $this->em->getRepository(HesabdariRow::class)->findByJoinMoney([
'ref' => $nodeIds,
'bid' => $acc['bid'],
'year' => $acc['year'],
- ], $acc['money']);
+ ], $acc['money'], $dateFilter);
}
/**
diff --git a/hesabixCore/src/Repository/HesabdariRowRepository.php b/hesabixCore/src/Repository/HesabdariRowRepository.php
index 8c23356..a1a741c 100644
--- a/hesabixCore/src/Repository/HesabdariRowRepository.php
+++ b/hesabixCore/src/Repository/HesabdariRowRepository.php
@@ -33,7 +33,7 @@ class HesabdariRowRepository extends ServiceEntityRepository
/**
* پیدا کردن ردیفها با جوین روی سند و فیلتر پول، با حذف تکرارها
*/
- public function findByJoinMoney(array $params, Money $money): array
+ public function findByJoinMoney(array $params, Money $money, ?array $dateFilter = null): array
{
$query = $this->createQueryBuilder('t')
->select('DISTINCT t') // حذف تکرارها با DISTINCT
@@ -56,6 +56,14 @@ class HesabdariRowRepository extends ServiceEntityRepository
}
}
+ // اضافه کردن فیلتر تاریخ اگر موجود باشد
+ if ($dateFilter && isset($dateFilter['startDate']) && isset($dateFilter['endDate'])) {
+ $query->andWhere('d.date >= :startDate')
+ ->andWhere('d.date <= :endDate')
+ ->setParameter('startDate', $dateFilter['startDate'])
+ ->setParameter('endDate', $dateFilter['endDate']);
+ }
+
return $query->getQuery()->getResult();
}
diff --git a/webUI/src/views/acc/component/reports/detailsBtn.vue b/webUI/src/views/acc/component/reports/detailsBtn.vue
index 73e043d..856eab9 100755
--- a/webUI/src/views/acc/component/reports/detailsBtn.vue
+++ b/webUI/src/views/acc/component/reports/detailsBtn.vue
@@ -98,6 +98,13 @@ export default defineComponent({
type: Number,
default: null,
},
+ dateFilter: {
+ type: Object,
+ default: () => ({
+ startDate: '',
+ endDate: '',
+ }),
+ },
},
setup(props) {
const { t } = useI18n();
@@ -123,14 +130,24 @@ export default defineComponent({
const loadData = async () => {
loading.value = true;
try {
- const response = await axios.post('/api/report/acc/get_details', {
+ const requestData = {
node: props.node,
type: props.nodeType,
isObject: props.isObject,
upperId: props.upperId,
page: serverOptions.value.page,
perPage: serverOptions.value.rowsPerPage,
- });
+ };
+
+ // اضافه کردن فیلتر تاریخ اگر موجود باشد
+ if (props.dateFilter && props.dateFilter.startDate && props.dateFilter.endDate) {
+ requestData.dateFilter = {
+ startDate: props.dateFilter.startDate,
+ endDate: props.dateFilter.endDate,
+ };
+ }
+
+ const response = await axios.post('/api/report/acc/get_details', requestData);
items.value = response.data.items || [];
totalItems.value = response.data.pagination.totalItems || 0;
serverOptions.value.page = response.data.pagination.currentPage || 1;
@@ -146,14 +163,24 @@ export default defineComponent({
const exportToExcel = async () => {
loading.value = true;
try {
+ const requestData = {
+ node: props.node,
+ type: props.nodeType,
+ isObject: props.isObject,
+ upperId: props.upperId,
+ };
+
+ // اضافه کردن فیلتر تاریخ اگر موجود باشد
+ if (props.dateFilter && props.dateFilter.startDate && props.dateFilter.endDate) {
+ requestData.dateFilter = {
+ startDate: props.dateFilter.startDate,
+ endDate: props.dateFilter.endDate,
+ };
+ }
+
const response = await axios.post(
'/api/report/acc/export_details_excel',
- {
- node: props.node,
- type: props.nodeType,
- isObject: props.isObject,
- upperId: props.upperId,
- },
+ requestData,
{ responseType: 'blob' }
);
const url = window.URL.createObjectURL(new Blob([response.data]));
@@ -179,6 +206,13 @@ export default defineComponent({
loadData();
}, { deep: true });
+ // مشاهده تغییرات فیلتر تاریخ
+ watch(() => props.dateFilter, () => {
+ if (dialog.value) {
+ loadData();
+ }
+ }, { deep: true });
+
return {
loading,
dialog,
diff --git a/webUI/src/views/acc/reports/explore_accounts.vue b/webUI/src/views/acc/reports/explore_accounts.vue
index 781fa88..38c05e2 100755
--- a/webUI/src/views/acc/reports/explore_accounts.vue
+++ b/webUI/src/views/acc/reports/explore_accounts.vue
@@ -30,6 +30,105 @@
+
+
+
+
+
+
+ فیلتر بر اساس تاریخ
+
+ فعال
+
+
+
+
+
+
+
+ {
+ dateFilter.startDate = convertGregorianToJalali(value);
+ gregorianStartDate = value;
+ showStartDatePicker = false;
+ }"
+ />
+
+
+
+
+
+ {
+ dateFilter.endDate = convertGregorianToJalali(value);
+ gregorianEndDate = value;
+ showEndDatePicker = false;
+ }"
+ />
+
+
+
+
+ اعمال فیلتر
+ اعمال
+
+
+ حذف
+ حذف
+
+
+
+
+
+
@@ -51,7 +150,7 @@
>
-
+
import axios from 'axios';
import DetailsBtn from '../component/reports/detailsBtn.vue';
+ import { format } from 'date-fns-jalali';
+ import moment from 'jalali-moment';
export default {
name: 'ExploreAccounts',
@@ -132,6 +233,16 @@
plugins: [],
errorDialog: false,
errorMessage: '',
+ dateFilter: {
+ startDate: '',
+ endDate: '',
+ },
+ year: {
+ start: '',
+ end: '',
+ },
+ gregorianStartDate: '',
+ gregorianEndDate: '',
headers: [
{ text: this.$t('table.account'), value: 'account', sortable: true },
{ text: this.$t('table.debit_turnover'), value: 'his_bd', sortable: true, width: 100 },
@@ -149,8 +260,30 @@
currentNode: 'root',
currentType: 'calc',
currentHasChild: true,
+ showStartDatePicker: false,
+ showEndDatePicker: false,
};
},
+ computed: {
+ isDateFilterActive() {
+ return this.dateFilter.startDate && this.dateFilter.endDate &&
+ (this.dateFilter.startDate !== this.year.start || this.dateFilter.endDate !== this.year.end);
+ },
+ formattedStartDate() {
+ return this.dateFilter.startDate ? this.formatDateForDisplay(this.dateFilter.startDate) : '';
+ },
+ formattedEndDate() {
+ return this.dateFilter.endDate ? this.formatDateForDisplay(this.dateFilter.endDate) : '';
+ },
+ },
+ watch: {
+ 'dateFilter.startDate'(newValue) {
+ this.gregorianStartDate = this.convertJalaliToGregorian(newValue);
+ },
+ 'dateFilter.endDate'(newValue) {
+ this.gregorianEndDate = this.convertJalaliToGregorian(newValue);
+ }
+ },
methods: {
async loadNode(id, type, hasChild, page) {
this.loading = true;
@@ -164,6 +297,10 @@
hasChild,
page: page || this.pagination.currentPage,
perPage: this.pagination.perPage,
+ dateFilter: this.dateFilter.startDate && this.dateFilter.endDate ? {
+ startDate: this.dateFilter.startDate,
+ endDate: this.dateFilter.endDate,
+ } : null,
});
this.items = response.data.itemData || [];
this.tree = response.data.tree || [];
@@ -184,6 +321,17 @@
try {
const pluginResponse = await axios.post('/api/plugin/get/actives');
this.plugins = pluginResponse.data || [];
+
+ // دریافت اطلاعات سال مالی
+ const yearResponse = await axios.get('/api/year/get');
+ this.year = yearResponse.data;
+
+ // تنظیم تاریخهای پیشفرض
+ this.dateFilter.startDate = this.year.start;
+ this.dateFilter.endDate = this.year.end;
+ this.gregorianStartDate = this.convertJalaliToGregorian(this.dateFilter.startDate);
+ this.gregorianEndDate = this.convertJalaliToGregorian(this.dateFilter.endDate);
+
await this.loadNode('root', 'calc', true, 1);
} catch (error) {
this.showError(this.$t('error.initial_load') + (error.response?.data?.message || error.message));
@@ -191,6 +339,20 @@
this.loading = false;
}
},
+ applyDateFilter() {
+ if (this.dateFilter.startDate && this.dateFilter.endDate) {
+ this.gregorianStartDate = this.convertJalaliToGregorian(this.dateFilter.startDate);
+ this.gregorianEndDate = this.convertJalaliToGregorian(this.dateFilter.endDate);
+ this.loadNode(this.currentNode, this.currentType, this.currentHasChild, 1);
+ }
+ },
+ clearDateFilter() {
+ this.dateFilter.startDate = this.year.start;
+ this.dateFilter.endDate = this.year.end;
+ this.gregorianStartDate = this.convertJalaliToGregorian(this.dateFilter.startDate);
+ this.gregorianEndDate = this.convertJalaliToGregorian(this.dateFilter.endDate);
+ this.loadNode(this.currentNode, this.currentType, this.currentHasChild, 1);
+ },
showError(message) {
this.errorMessage = message;
this.errorDialog = true;
@@ -198,6 +360,63 @@
formatNumber(value) {
return value ? Number(value).toLocaleString('fa-IR') : '0';
},
+ formatDateForDisplay(dateString) {
+ if (!dateString) return '';
+
+ try {
+ // اگر تاریخ شمسی است (فرمت Y/m/d)، آن را به میلادی تبدیل کن
+ if (typeof dateString === 'string' && dateString.includes('/')) {
+ const parts = dateString.split('/');
+ if (parts.length === 3) {
+ // استفاده از jalali-moment برای تبدیل دقیق
+ const gregorianDate = moment(dateString, 'jYYYY/jMM/jDD').toDate();
+ return format(gregorianDate, 'yyyy/MM/dd');
+ }
+ }
+
+ // اگر تاریخ میلادی است
+ const date = new Date(dateString);
+ return format(date, 'yyyy/MM/dd');
+ } catch (error) {
+ return dateString;
+ }
+ },
+ convertJalaliToGregorian(jalaliDate) {
+ if (!jalaliDate) return '';
+
+ try {
+ // اگر تاریخ شمسی است (فرمت Y/m/d)، آن را به میلادی تبدیل کن
+ if (typeof jalaliDate === 'string' && jalaliDate.includes('/')) {
+ const parts = jalaliDate.split('/');
+ if (parts.length === 3) {
+ const year = parseInt(parts[0]);
+ const month = parseInt(parts[1]);
+ const day = parseInt(parts[2]);
+
+ // استفاده از jalali-moment برای تبدیل دقیق
+ const gregorianDate = moment(`${year}/${month}/${day}`, 'jYYYY/jMM/jDD').format('YYYY-MM-DD');
+ return gregorianDate;
+ }
+ }
+
+ return jalaliDate;
+ } catch (error) {
+ console.error('Error converting Jalali to Gregorian:', error);
+ return jalaliDate;
+ }
+ },
+ convertGregorianToJalali(gregorianDate) {
+ if (!gregorianDate) return '';
+
+ try {
+ // استفاده از jalali-moment برای تبدیل دقیق
+ const jalaliDate = moment(gregorianDate, 'YYYY-MM-DD').format('jYYYY/jMM/jDD');
+ return jalaliDate;
+ } catch (error) {
+ console.error('Error converting Gregorian to Jalali:', error);
+ return gregorianDate;
+ }
+ },
isPluginActive(plugName) {
return !!this.plugins[plugName];
},
@@ -208,8 +427,58 @@
};
+
+
\ No newline at end of file