add date filter to explore account report
This commit is contained in:
parent
b1ce11930e
commit
d87d3ba137
|
@ -51,6 +51,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
$page = $params['page'] ?? 1;
|
$page = $params['page'] ?? 1;
|
||||||
$perPage = $params['perPage'] ?? 10;
|
$perPage = $params['perPage'] ?? 10;
|
||||||
$offset = ($page - 1) * $perPage;
|
$offset = ($page - 1) * $perPage;
|
||||||
|
$dateFilter = $params['dateFilter'] ?? null;
|
||||||
|
|
||||||
$nodeId = $params['node'] === 'root'
|
$nodeId = $params['node'] === 'root'
|
||||||
? $this->em->getRepository(HesabdariTable::class)
|
? $this->em->getRepository(HesabdariTable::class)
|
||||||
|
@ -80,7 +81,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
foreach ($children as $child) {
|
foreach ($children as $child) {
|
||||||
$allNodes = $this->getAllDescendants($child, $acc);
|
$allNodes = $this->getAllDescendants($child, $acc);
|
||||||
$allNodes[] = $child;
|
$allNodes[] = $child;
|
||||||
$rows = $this->getRowsForNodes($allNodes, $acc);
|
$rows = $this->getRowsForNodes($allNodes, $acc, $dateFilter);
|
||||||
$output[] = $this->calculateTotals($rows, $child, $acc);
|
$output[] = $this->calculateTotals($rows, $child, $acc);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -101,7 +102,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
'ref' => $node,
|
'ref' => $node,
|
||||||
'bid' => $acc['bid'],
|
'bid' => $acc['bid'],
|
||||||
'year' => $acc['year'],
|
'year' => $acc['year'],
|
||||||
], $acc['money']);
|
], $acc['money'], $dateFilter);
|
||||||
$output[] = $this->calculateBankTotals($rows, $bankAccount, $node);
|
$output[] = $this->calculateBankTotals($rows, $bankAccount, $node);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -122,7 +123,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
'ref' => $node,
|
'ref' => $node,
|
||||||
'bid' => $acc['bid'],
|
'bid' => $acc['bid'],
|
||||||
'year' => $acc['year'],
|
'year' => $acc['year'],
|
||||||
], $acc['money']);
|
], $acc['money'], $dateFilter);
|
||||||
$output[] = $this->calculateCashdeskTotals($rows, $cashdesk, $node);
|
$output[] = $this->calculateCashdeskTotals($rows, $cashdesk, $node);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -143,7 +144,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
'ref' => $node,
|
'ref' => $node,
|
||||||
'bid' => $acc['bid'],
|
'bid' => $acc['bid'],
|
||||||
'year' => $acc['year'],
|
'year' => $acc['year'],
|
||||||
], $acc['money']);
|
], $acc['money'], $dateFilter);
|
||||||
$output[] = $this->calculateSalaryTotals($rows, $salary, $node);
|
$output[] = $this->calculateSalaryTotals($rows, $salary, $node);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -162,7 +163,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
'ref' => $node,
|
'ref' => $node,
|
||||||
'bid' => $acc['bid'],
|
'bid' => $acc['bid'],
|
||||||
'year' => $acc['year'],
|
'year' => $acc['year'],
|
||||||
], $acc['money']);
|
], $acc['money'], $dateFilter);
|
||||||
$output[] = $this->calculatePersonTotals($rows, $person, $node);
|
$output[] = $this->calculatePersonTotals($rows, $person, $node);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -181,7 +182,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
'ref' => $node,
|
'ref' => $node,
|
||||||
'bid' => $acc['bid'],
|
'bid' => $acc['bid'],
|
||||||
'year' => $acc['year'],
|
'year' => $acc['year'],
|
||||||
], $acc['money']);
|
], $acc['money'], $dateFilter);
|
||||||
$output[] = $this->calculateCommodityTotals($rows, $commodity, $node);
|
$output[] = $this->calculateCommodityTotals($rows, $commodity, $node);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -200,7 +201,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
'ref' => $node,
|
'ref' => $node,
|
||||||
'bid' => $acc['bid'],
|
'bid' => $acc['bid'],
|
||||||
'year' => $acc['year'],
|
'year' => $acc['year'],
|
||||||
], $acc['money']);
|
], $acc['money'], $dateFilter);
|
||||||
$output[] = $this->calculateChequeTotals($rows, $cheque, $node);
|
$output[] = $this->calculateChequeTotals($rows, $cheque, $node);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -241,6 +242,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
$page = max(1, (int) ($params['page'] ?? 1));
|
$page = max(1, (int) ($params['page'] ?? 1));
|
||||||
$perPage = max(1, (int) ($params['perPage'] ?? 10));
|
$perPage = max(1, (int) ($params['perPage'] ?? 10));
|
||||||
$offset = ($page - 1) * $perPage;
|
$offset = ($page - 1) * $perPage;
|
||||||
|
$dateFilter = $params['dateFilter'] ?? null;
|
||||||
|
|
||||||
$rows = [];
|
$rows = [];
|
||||||
$totalItems = 0;
|
$totalItems = 0;
|
||||||
|
@ -265,6 +267,14 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('money', $acc['money'])
|
->setParameter('money', $acc['money'])
|
||||||
->setParameter('year', $acc['year']);
|
->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)')
|
$totalItems = (int) $qb->select('COUNT(r.id)')
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getSingleScalarResult();
|
->getSingleScalarResult();
|
||||||
|
@ -298,6 +308,14 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money']);
|
->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)')
|
$totalItems = (int) $qb->select('COUNT(r.id)')
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getSingleScalarResult();
|
->getSingleScalarResult();
|
||||||
|
@ -331,6 +349,14 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money']);
|
->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)')
|
$totalItems = (int) $qb->select('COUNT(r.id)')
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getSingleScalarResult();
|
->getSingleScalarResult();
|
||||||
|
@ -364,6 +390,14 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money']);
|
->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)')
|
$totalItems = (int) $qb->select('COUNT(r.id)')
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getSingleScalarResult();
|
->getSingleScalarResult();
|
||||||
|
@ -396,6 +430,14 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money']);
|
->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)')
|
$totalItems = (int) $qb->select('COUNT(r.id)')
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getSingleScalarResult();
|
->getSingleScalarResult();
|
||||||
|
@ -428,6 +470,14 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money']);
|
->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)')
|
$totalItems = (int) $qb->select('COUNT(r.id)')
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getSingleScalarResult();
|
->getSingleScalarResult();
|
||||||
|
@ -460,6 +510,14 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money']);
|
->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)')
|
$totalItems = (int) $qb->select('COUNT(r.id)')
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getSingleScalarResult();
|
->getSingleScalarResult();
|
||||||
|
@ -500,6 +558,8 @@ class ExploreAccountsController extends AbstractController
|
||||||
throw $this->createNotFoundException('Required parameters (node, type, isObject) are missing');
|
throw $this->createNotFoundException('Required parameters (node, type, isObject) are missing');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$dateFilter = $params['dateFilter'] ?? null;
|
||||||
|
|
||||||
$node = $this->em->getRepository(HesabdariTable::class)
|
$node = $this->em->getRepository(HesabdariTable::class)
|
||||||
->findNode($params['upperID'] ?? $params['node'], $acc['bid']->getId());
|
->findNode($params['upperID'] ?? $params['node'], $acc['bid']->getId());
|
||||||
if (!$node) {
|
if (!$node) {
|
||||||
|
@ -510,7 +570,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
if ($params['isObject'] === false) {
|
if ($params['isObject'] === false) {
|
||||||
$allNodes = $this->getAllDescendants($node, $acc);
|
$allNodes = $this->getAllDescendants($node, $acc);
|
||||||
$allNodes[] = $node;
|
$allNodes[] = $node;
|
||||||
$rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
$qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||||
->innerJoin('r.doc', 'd')
|
->innerJoin('r.doc', 'd')
|
||||||
->where('r.ref IN (:nodeIds)')
|
->where('r.ref IN (:nodeIds)')
|
||||||
->andWhere('r.bid = :bid OR r.bid IS NULL')
|
->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('nodeIds', array_map(fn($n) => $n->getId(), $allNodes))
|
||||||
->setParameter('bid', $acc['bid'])
|
->setParameter('bid', $acc['bid'])
|
||||||
->setParameter('money', $acc['money'])
|
->setParameter('money', $acc['money'])
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year']);
|
||||||
->getQuery()
|
|
||||||
->getResult();
|
// اضافه کردن فیلتر تاریخ
|
||||||
|
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 {
|
} else {
|
||||||
switch ($params['type']) {
|
switch ($params['type']) {
|
||||||
case 'bank':
|
case 'bank':
|
||||||
|
@ -533,7 +601,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
throw $this->createNotFoundException('Bank account not found');
|
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')
|
->innerJoin('r.doc', 'd')
|
||||||
->where('r.bank = :bank')
|
->where('r.bank = :bank')
|
||||||
->andWhere('r.ref = :ref')
|
->andWhere('r.ref = :ref')
|
||||||
|
@ -544,9 +612,17 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('ref', $node)
|
->setParameter('ref', $node)
|
||||||
->setParameter('bid', $acc['bid'])
|
->setParameter('bid', $acc['bid'])
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money'])
|
->setParameter('money', $acc['money']);
|
||||||
->getQuery()
|
|
||||||
->getResult();
|
// اضافه کردن فیلتر تاریخ
|
||||||
|
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;
|
break;
|
||||||
|
|
||||||
case 'cashdesk':
|
case 'cashdesk':
|
||||||
|
@ -558,7 +634,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
throw $this->createNotFoundException('Cashdesk not found');
|
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')
|
->innerJoin('r.doc', 'd')
|
||||||
->where('r.cashdesk = :cashdesk')
|
->where('r.cashdesk = :cashdesk')
|
||||||
->andWhere('r.ref = :ref')
|
->andWhere('r.ref = :ref')
|
||||||
|
@ -569,9 +645,17 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('ref', $node)
|
->setParameter('ref', $node)
|
||||||
->setParameter('bid', $acc['bid'])
|
->setParameter('bid', $acc['bid'])
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money'])
|
->setParameter('money', $acc['money']);
|
||||||
->getQuery()
|
|
||||||
->getResult();
|
// اضافه کردن فیلتر تاریخ
|
||||||
|
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;
|
break;
|
||||||
|
|
||||||
case 'salary':
|
case 'salary':
|
||||||
|
@ -583,7 +667,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
throw $this->createNotFoundException('Salary not found');
|
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')
|
->innerJoin('r.doc', 'd')
|
||||||
->where('r.salary = :salary')
|
->where('r.salary = :salary')
|
||||||
->andWhere('r.ref = :ref')
|
->andWhere('r.ref = :ref')
|
||||||
|
@ -594,9 +678,17 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('ref', $node)
|
->setParameter('ref', $node)
|
||||||
->setParameter('bid', $acc['bid'])
|
->setParameter('bid', $acc['bid'])
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money'])
|
->setParameter('money', $acc['money']);
|
||||||
->getQuery()
|
|
||||||
->getResult();
|
// اضافه کردن فیلتر تاریخ
|
||||||
|
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;
|
break;
|
||||||
|
|
||||||
case 'person':
|
case 'person':
|
||||||
|
@ -607,7 +699,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
throw $this->createNotFoundException('Person not found');
|
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')
|
->innerJoin('r.doc', 'd')
|
||||||
->where('r.person = :person')
|
->where('r.person = :person')
|
||||||
->andWhere('r.ref = :ref')
|
->andWhere('r.ref = :ref')
|
||||||
|
@ -618,9 +710,17 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('ref', $node)
|
->setParameter('ref', $node)
|
||||||
->setParameter('bid', $acc['bid'])
|
->setParameter('bid', $acc['bid'])
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money'])
|
->setParameter('money', $acc['money']);
|
||||||
->getQuery()
|
|
||||||
->getResult();
|
// اضافه کردن فیلتر تاریخ
|
||||||
|
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;
|
break;
|
||||||
|
|
||||||
case 'commodity':
|
case 'commodity':
|
||||||
|
@ -631,7 +731,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
throw $this->createNotFoundException('Commodity not found');
|
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')
|
->innerJoin('r.doc', 'd')
|
||||||
->where('r.commodity = :commodity')
|
->where('r.commodity = :commodity')
|
||||||
->andWhere('r.ref = :ref')
|
->andWhere('r.ref = :ref')
|
||||||
|
@ -642,9 +742,17 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('ref', $node)
|
->setParameter('ref', $node)
|
||||||
->setParameter('bid', $acc['bid'])
|
->setParameter('bid', $acc['bid'])
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money'])
|
->setParameter('money', $acc['money']);
|
||||||
->getQuery()
|
|
||||||
->getResult();
|
// اضافه کردن فیلتر تاریخ
|
||||||
|
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;
|
break;
|
||||||
|
|
||||||
case 'cheque':
|
case 'cheque':
|
||||||
|
@ -655,7 +763,7 @@ class ExploreAccountsController extends AbstractController
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
throw $this->createNotFoundException('Cheque not found');
|
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')
|
->innerJoin('r.doc', 'd')
|
||||||
->where('r.cheque = :cheque')
|
->where('r.cheque = :cheque')
|
||||||
->andWhere('r.ref = :ref')
|
->andWhere('r.ref = :ref')
|
||||||
|
@ -666,9 +774,17 @@ class ExploreAccountsController extends AbstractController
|
||||||
->setParameter('ref', $node)
|
->setParameter('ref', $node)
|
||||||
->setParameter('bid', $acc['bid'])
|
->setParameter('bid', $acc['bid'])
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('money', $acc['money'])
|
->setParameter('money', $acc['money']);
|
||||||
->getQuery()
|
|
||||||
->getResult();
|
// اضافه کردن فیلتر تاریخ
|
||||||
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -741,14 +857,14 @@ class ExploreAccountsController extends AbstractController
|
||||||
/**
|
/**
|
||||||
* پیدا کردن ردیفهای مرتبط با نودها (برای type=calc)
|
* پیدا کردن ردیفهای مرتبط با نودها (برای 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));
|
$nodeIds = array_unique(array_map(fn($node) => $node->getId(), $nodes));
|
||||||
return $this->em->getRepository(HesabdariRow::class)->findByJoinMoney([
|
return $this->em->getRepository(HesabdariRow::class)->findByJoinMoney([
|
||||||
'ref' => $nodeIds,
|
'ref' => $nodeIds,
|
||||||
'bid' => $acc['bid'],
|
'bid' => $acc['bid'],
|
||||||
'year' => $acc['year'],
|
'year' => $acc['year'],
|
||||||
], $acc['money']);
|
], $acc['money'], $dateFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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')
|
$query = $this->createQueryBuilder('t')
|
||||||
->select('DISTINCT t') // حذف تکرارها با DISTINCT
|
->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();
|
return $query->getQuery()->getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,13 @@ export default defineComponent({
|
||||||
type: Number,
|
type: Number,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
dateFilter: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
startDate: '',
|
||||||
|
endDate: '',
|
||||||
|
}),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
setup(props) {
|
setup(props) {
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
@ -123,14 +130,24 @@ export default defineComponent({
|
||||||
const loadData = async () => {
|
const loadData = async () => {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
const response = await axios.post('/api/report/acc/get_details', {
|
const requestData = {
|
||||||
node: props.node,
|
node: props.node,
|
||||||
type: props.nodeType,
|
type: props.nodeType,
|
||||||
isObject: props.isObject,
|
isObject: props.isObject,
|
||||||
upperId: props.upperId,
|
upperId: props.upperId,
|
||||||
page: serverOptions.value.page,
|
page: serverOptions.value.page,
|
||||||
perPage: serverOptions.value.rowsPerPage,
|
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 || [];
|
items.value = response.data.items || [];
|
||||||
totalItems.value = response.data.pagination.totalItems || 0;
|
totalItems.value = response.data.pagination.totalItems || 0;
|
||||||
serverOptions.value.page = response.data.pagination.currentPage || 1;
|
serverOptions.value.page = response.data.pagination.currentPage || 1;
|
||||||
|
@ -146,14 +163,24 @@ export default defineComponent({
|
||||||
const exportToExcel = async () => {
|
const exportToExcel = async () => {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
const response = await axios.post(
|
const requestData = {
|
||||||
'/api/report/acc/export_details_excel',
|
|
||||||
{
|
|
||||||
node: props.node,
|
node: props.node,
|
||||||
type: props.nodeType,
|
type: props.nodeType,
|
||||||
isObject: props.isObject,
|
isObject: props.isObject,
|
||||||
upperId: props.upperId,
|
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',
|
||||||
|
requestData,
|
||||||
{ responseType: 'blob' }
|
{ responseType: 'blob' }
|
||||||
);
|
);
|
||||||
const url = window.URL.createObjectURL(new Blob([response.data]));
|
const url = window.URL.createObjectURL(new Blob([response.data]));
|
||||||
|
@ -179,6 +206,13 @@ export default defineComponent({
|
||||||
loadData();
|
loadData();
|
||||||
}, { deep: true });
|
}, { deep: true });
|
||||||
|
|
||||||
|
// مشاهده تغییرات فیلتر تاریخ
|
||||||
|
watch(() => props.dateFilter, () => {
|
||||||
|
if (dialog.value) {
|
||||||
|
loadData();
|
||||||
|
}
|
||||||
|
}, { deep: true });
|
||||||
|
|
||||||
return {
|
return {
|
||||||
loading,
|
loading,
|
||||||
dialog,
|
dialog,
|
||||||
|
|
|
@ -31,6 +31,105 @@
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
|
||||||
|
<!-- Date Filter -->
|
||||||
|
<v-card-text class="pt-0">
|
||||||
|
<v-card variant="outlined" class="mb-4 date-filter-card">
|
||||||
|
<v-card-title class="text-subtitle-1 font-weight-medium pa-4 pb-2">
|
||||||
|
<v-icon icon="mdi-calendar-filter" class="me-2" color="primary"></v-icon>
|
||||||
|
فیلتر بر اساس تاریخ
|
||||||
|
<v-chip
|
||||||
|
v-if="isDateFilterActive"
|
||||||
|
color="success"
|
||||||
|
size="small"
|
||||||
|
class="ms-2"
|
||||||
|
prepend-icon="mdi-check-circle"
|
||||||
|
>
|
||||||
|
فعال
|
||||||
|
</v-chip>
|
||||||
|
</v-card-title>
|
||||||
|
<v-card-text class="pt-0">
|
||||||
|
<v-row>
|
||||||
|
<v-col cols="12" sm="6" md="4" class="date-picker-container">
|
||||||
|
<v-text-field
|
||||||
|
:model-value="formattedStartDate"
|
||||||
|
label="تاریخ شروع"
|
||||||
|
prepend-inner-icon="mdi-calendar"
|
||||||
|
readonly
|
||||||
|
@click="showStartDatePicker = true"
|
||||||
|
variant="outlined"
|
||||||
|
density="comfortable"
|
||||||
|
/>
|
||||||
|
<v-dialog v-model="showStartDatePicker" max-width="400">
|
||||||
|
<v-date-picker
|
||||||
|
v-model="gregorianStartDate"
|
||||||
|
:min="convertJalaliToGregorian(year.start)"
|
||||||
|
:max="convertJalaliToGregorian(year.end)"
|
||||||
|
locale="fa"
|
||||||
|
color="primary"
|
||||||
|
@update:model-value="(value) => {
|
||||||
|
dateFilter.startDate = convertGregorianToJalali(value);
|
||||||
|
gregorianStartDate = value;
|
||||||
|
showStartDatePicker = false;
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
</v-dialog>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="12" sm="6" md="4" class="date-picker-container">
|
||||||
|
<v-text-field
|
||||||
|
:model-value="formattedEndDate"
|
||||||
|
label="تاریخ پایان"
|
||||||
|
prepend-inner-icon="mdi-calendar"
|
||||||
|
readonly
|
||||||
|
@click="showEndDatePicker = true"
|
||||||
|
variant="outlined"
|
||||||
|
density="comfortable"
|
||||||
|
/>
|
||||||
|
<v-dialog v-model="showEndDatePicker" max-width="400">
|
||||||
|
<v-date-picker
|
||||||
|
v-model="gregorianEndDate"
|
||||||
|
:min="convertJalaliToGregorian(dateFilter.startDate || year.start)"
|
||||||
|
:max="convertJalaliToGregorian(year.end)"
|
||||||
|
locale="fa"
|
||||||
|
color="primary"
|
||||||
|
@update:model-value="(value) => {
|
||||||
|
dateFilter.endDate = convertGregorianToJalali(value);
|
||||||
|
gregorianEndDate = value;
|
||||||
|
showEndDatePicker = false;
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
</v-dialog>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="12" sm="12" md="4" class="d-flex align-center filter-buttons">
|
||||||
|
<v-btn
|
||||||
|
color="primary"
|
||||||
|
variant="elevated"
|
||||||
|
size="large"
|
||||||
|
@click="applyDateFilter"
|
||||||
|
:loading="loading"
|
||||||
|
:disabled="!dateFilter.startDate || !dateFilter.endDate"
|
||||||
|
class="flex-grow-1"
|
||||||
|
prepend-icon="mdi-filter-check"
|
||||||
|
>
|
||||||
|
<span class="d-none d-sm-inline">اعمال فیلتر</span>
|
||||||
|
<span class="d-sm-none">اعمال</span>
|
||||||
|
</v-btn>
|
||||||
|
<v-btn
|
||||||
|
color="secondary"
|
||||||
|
variant="outlined"
|
||||||
|
size="large"
|
||||||
|
@click="clearDateFilter"
|
||||||
|
:disabled="!dateFilter.startDate && !dateFilter.endDate"
|
||||||
|
prepend-icon="mdi-filter-off"
|
||||||
|
>
|
||||||
|
<span class="d-none d-sm-inline">حذف</span>
|
||||||
|
<span class="d-sm-none">حذف</span>
|
||||||
|
</v-btn>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-card-text>
|
||||||
|
|
||||||
<!-- Table -->
|
<!-- Table -->
|
||||||
<v-card-text class="mt-0 pt-0 px-0">
|
<v-card-text class="mt-0 pt-0 px-0">
|
||||||
<EasyDataTable
|
<EasyDataTable
|
||||||
|
@ -51,7 +150,7 @@
|
||||||
>
|
>
|
||||||
<!-- Custom Slots -->
|
<!-- Custom Slots -->
|
||||||
<template #item-operation="{ id, type, isObject, upperID }">
|
<template #item-operation="{ id, type, isObject, upperID }">
|
||||||
<DetailsBtn :node="id" :node-type="type" :is-object="isObject" :upper-id="upperID" />
|
<DetailsBtn :node="id" :node-type="type" :is-object="isObject" :upper-id="upperID" :date-filter="dateFilter" />
|
||||||
</template>
|
</template>
|
||||||
<template #item-account="{ hasChild, type, isObject, code, account, id }">
|
<template #item-account="{ hasChild, type, isObject, code, account, id }">
|
||||||
<v-btn
|
<v-btn
|
||||||
|
@ -118,6 +217,8 @@
|
||||||
<script>
|
<script>
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import DetailsBtn from '../component/reports/detailsBtn.vue';
|
import DetailsBtn from '../component/reports/detailsBtn.vue';
|
||||||
|
import { format } from 'date-fns-jalali';
|
||||||
|
import moment from 'jalali-moment';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ExploreAccounts',
|
name: 'ExploreAccounts',
|
||||||
|
@ -132,6 +233,16 @@
|
||||||
plugins: [],
|
plugins: [],
|
||||||
errorDialog: false,
|
errorDialog: false,
|
||||||
errorMessage: '',
|
errorMessage: '',
|
||||||
|
dateFilter: {
|
||||||
|
startDate: '',
|
||||||
|
endDate: '',
|
||||||
|
},
|
||||||
|
year: {
|
||||||
|
start: '',
|
||||||
|
end: '',
|
||||||
|
},
|
||||||
|
gregorianStartDate: '',
|
||||||
|
gregorianEndDate: '',
|
||||||
headers: [
|
headers: [
|
||||||
{ text: this.$t('table.account'), value: 'account', sortable: true },
|
{ text: this.$t('table.account'), value: 'account', sortable: true },
|
||||||
{ text: this.$t('table.debit_turnover'), value: 'his_bd', sortable: true, width: 100 },
|
{ text: this.$t('table.debit_turnover'), value: 'his_bd', sortable: true, width: 100 },
|
||||||
|
@ -149,8 +260,30 @@
|
||||||
currentNode: 'root',
|
currentNode: 'root',
|
||||||
currentType: 'calc',
|
currentType: 'calc',
|
||||||
currentHasChild: true,
|
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: {
|
methods: {
|
||||||
async loadNode(id, type, hasChild, page) {
|
async loadNode(id, type, hasChild, page) {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
@ -164,6 +297,10 @@
|
||||||
hasChild,
|
hasChild,
|
||||||
page: page || this.pagination.currentPage,
|
page: page || this.pagination.currentPage,
|
||||||
perPage: this.pagination.perPage,
|
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.items = response.data.itemData || [];
|
||||||
this.tree = response.data.tree || [];
|
this.tree = response.data.tree || [];
|
||||||
|
@ -184,6 +321,17 @@
|
||||||
try {
|
try {
|
||||||
const pluginResponse = await axios.post('/api/plugin/get/actives');
|
const pluginResponse = await axios.post('/api/plugin/get/actives');
|
||||||
this.plugins = pluginResponse.data || [];
|
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);
|
await this.loadNode('root', 'calc', true, 1);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.showError(this.$t('error.initial_load') + (error.response?.data?.message || error.message));
|
this.showError(this.$t('error.initial_load') + (error.response?.data?.message || error.message));
|
||||||
|
@ -191,6 +339,20 @@
|
||||||
this.loading = false;
|
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) {
|
showError(message) {
|
||||||
this.errorMessage = message;
|
this.errorMessage = message;
|
||||||
this.errorDialog = true;
|
this.errorDialog = true;
|
||||||
|
@ -198,6 +360,63 @@
|
||||||
formatNumber(value) {
|
formatNumber(value) {
|
||||||
return value ? Number(value).toLocaleString('fa-IR') : '0';
|
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) {
|
isPluginActive(plugName) {
|
||||||
return !!this.plugins[plugName];
|
return !!this.plugins[plugName];
|
||||||
},
|
},
|
||||||
|
@ -208,8 +427,58 @@
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* Global styles for Vuetify date picker z-index */
|
||||||
|
.v-date-picker {
|
||||||
|
z-index: 9999 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-dialog {
|
||||||
|
z-index: 9999 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-overlay {
|
||||||
|
z-index: 9999 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.customize-table {
|
.customize-table {
|
||||||
font-family: 'Vazir', sans-serif;
|
font-family: 'Vazir', sans-serif;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-filter-card {
|
||||||
|
border-left: 4px solid #1976d2;
|
||||||
|
position: relative;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filter-buttons {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-picker-container {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* کاهش z-index برای EasyDataTable */
|
||||||
|
:deep(.easy-data-table) {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.easy-data-table__table) {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.filter-buttons {
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
Loading…
Reference in a new issue