parent
1e21c0bbea
commit
fddfa2a017
|
@ -51,7 +51,6 @@ 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)
|
||||
|
@ -81,7 +80,7 @@ class ExploreAccountsController extends AbstractController
|
|||
foreach ($children as $child) {
|
||||
$allNodes = $this->getAllDescendants($child, $acc);
|
||||
$allNodes[] = $child;
|
||||
$rows = $this->getRowsForNodes($allNodes, $acc, $dateFilter);
|
||||
$rows = $this->getRowsForNodes($allNodes, $acc);
|
||||
$output[] = $this->calculateTotals($rows, $child, $acc);
|
||||
}
|
||||
break;
|
||||
|
@ -102,7 +101,7 @@ class ExploreAccountsController extends AbstractController
|
|||
'ref' => $node,
|
||||
'bid' => $acc['bid'],
|
||||
'year' => $acc['year'],
|
||||
], $acc['money'], $dateFilter);
|
||||
], $acc['money']);
|
||||
$output[] = $this->calculateBankTotals($rows, $bankAccount, $node);
|
||||
}
|
||||
break;
|
||||
|
@ -123,7 +122,7 @@ class ExploreAccountsController extends AbstractController
|
|||
'ref' => $node,
|
||||
'bid' => $acc['bid'],
|
||||
'year' => $acc['year'],
|
||||
], $acc['money'], $dateFilter);
|
||||
], $acc['money']);
|
||||
$output[] = $this->calculateCashdeskTotals($rows, $cashdesk, $node);
|
||||
}
|
||||
break;
|
||||
|
@ -144,7 +143,7 @@ class ExploreAccountsController extends AbstractController
|
|||
'ref' => $node,
|
||||
'bid' => $acc['bid'],
|
||||
'year' => $acc['year'],
|
||||
], $acc['money'], $dateFilter);
|
||||
], $acc['money']);
|
||||
$output[] = $this->calculateSalaryTotals($rows, $salary, $node);
|
||||
}
|
||||
break;
|
||||
|
@ -163,7 +162,7 @@ class ExploreAccountsController extends AbstractController
|
|||
'ref' => $node,
|
||||
'bid' => $acc['bid'],
|
||||
'year' => $acc['year'],
|
||||
], $acc['money'], $dateFilter);
|
||||
], $acc['money']);
|
||||
$output[] = $this->calculatePersonTotals($rows, $person, $node);
|
||||
}
|
||||
break;
|
||||
|
@ -182,7 +181,7 @@ class ExploreAccountsController extends AbstractController
|
|||
'ref' => $node,
|
||||
'bid' => $acc['bid'],
|
||||
'year' => $acc['year'],
|
||||
], $acc['money'], $dateFilter);
|
||||
], $acc['money']);
|
||||
$output[] = $this->calculateCommodityTotals($rows, $commodity, $node);
|
||||
}
|
||||
break;
|
||||
|
@ -201,7 +200,7 @@ class ExploreAccountsController extends AbstractController
|
|||
'ref' => $node,
|
||||
'bid' => $acc['bid'],
|
||||
'year' => $acc['year'],
|
||||
], $acc['money'], $dateFilter);
|
||||
], $acc['money']);
|
||||
$output[] = $this->calculateChequeTotals($rows, $cheque, $node);
|
||||
}
|
||||
break;
|
||||
|
@ -242,7 +241,6 @@ 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;
|
||||
|
@ -267,14 +265,6 @@ 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();
|
||||
|
@ -308,14 +298,6 @@ 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();
|
||||
|
@ -349,14 +331,6 @@ 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();
|
||||
|
@ -390,14 +364,6 @@ 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();
|
||||
|
@ -430,14 +396,6 @@ 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();
|
||||
|
@ -470,14 +428,6 @@ 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();
|
||||
|
@ -510,14 +460,6 @@ 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();
|
||||
|
@ -558,8 +500,6 @@ 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) {
|
||||
|
@ -570,7 +510,7 @@ class ExploreAccountsController extends AbstractController
|
|||
if ($params['isObject'] === false) {
|
||||
$allNodes = $this->getAllDescendants($node, $acc);
|
||||
$allNodes[] = $node;
|
||||
$qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
$rows = $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')
|
||||
|
@ -579,17 +519,9 @@ 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']);
|
||||
|
||||
// اضافه کردن فیلتر تاریخ
|
||||
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();
|
||||
->setParameter('year', $acc['year'])
|
||||
->getQuery()
|
||||
->getResult();
|
||||
} else {
|
||||
switch ($params['type']) {
|
||||
case 'bank':
|
||||
|
@ -601,7 +533,7 @@ class ExploreAccountsController extends AbstractController
|
|||
if (!$item) {
|
||||
throw $this->createNotFoundException('Bank account not found');
|
||||
}
|
||||
$qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
$rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
->innerJoin('r.doc', 'd')
|
||||
->where('r.bank = :bank')
|
||||
->andWhere('r.ref = :ref')
|
||||
|
@ -612,17 +544,9 @@ class ExploreAccountsController extends AbstractController
|
|||
->setParameter('ref', $node)
|
||||
->setParameter('bid', $acc['bid'])
|
||||
->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']);
|
||||
}
|
||||
|
||||
$rows = $qb->getQuery()->getResult();
|
||||
->setParameter('money', $acc['money'])
|
||||
->getQuery()
|
||||
->getResult();
|
||||
break;
|
||||
|
||||
case 'cashdesk':
|
||||
|
@ -634,7 +558,7 @@ class ExploreAccountsController extends AbstractController
|
|||
if (!$item) {
|
||||
throw $this->createNotFoundException('Cashdesk not found');
|
||||
}
|
||||
$qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
$rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
->innerJoin('r.doc', 'd')
|
||||
->where('r.cashdesk = :cashdesk')
|
||||
->andWhere('r.ref = :ref')
|
||||
|
@ -645,17 +569,9 @@ class ExploreAccountsController extends AbstractController
|
|||
->setParameter('ref', $node)
|
||||
->setParameter('bid', $acc['bid'])
|
||||
->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']);
|
||||
}
|
||||
|
||||
$rows = $qb->getQuery()->getResult();
|
||||
->setParameter('money', $acc['money'])
|
||||
->getQuery()
|
||||
->getResult();
|
||||
break;
|
||||
|
||||
case 'salary':
|
||||
|
@ -667,7 +583,7 @@ class ExploreAccountsController extends AbstractController
|
|||
if (!$item) {
|
||||
throw $this->createNotFoundException('Salary not found');
|
||||
}
|
||||
$qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
$rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
->innerJoin('r.doc', 'd')
|
||||
->where('r.salary = :salary')
|
||||
->andWhere('r.ref = :ref')
|
||||
|
@ -678,17 +594,9 @@ class ExploreAccountsController extends AbstractController
|
|||
->setParameter('ref', $node)
|
||||
->setParameter('bid', $acc['bid'])
|
||||
->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']);
|
||||
}
|
||||
|
||||
$rows = $qb->getQuery()->getResult();
|
||||
->setParameter('money', $acc['money'])
|
||||
->getQuery()
|
||||
->getResult();
|
||||
break;
|
||||
|
||||
case 'person':
|
||||
|
@ -699,7 +607,7 @@ class ExploreAccountsController extends AbstractController
|
|||
if (!$item) {
|
||||
throw $this->createNotFoundException('Person not found');
|
||||
}
|
||||
$qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
$rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
->innerJoin('r.doc', 'd')
|
||||
->where('r.person = :person')
|
||||
->andWhere('r.ref = :ref')
|
||||
|
@ -710,17 +618,9 @@ class ExploreAccountsController extends AbstractController
|
|||
->setParameter('ref', $node)
|
||||
->setParameter('bid', $acc['bid'])
|
||||
->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']);
|
||||
}
|
||||
|
||||
$rows = $qb->getQuery()->getResult();
|
||||
->setParameter('money', $acc['money'])
|
||||
->getQuery()
|
||||
->getResult();
|
||||
break;
|
||||
|
||||
case 'commodity':
|
||||
|
@ -731,7 +631,7 @@ class ExploreAccountsController extends AbstractController
|
|||
if (!$item) {
|
||||
throw $this->createNotFoundException('Commodity not found');
|
||||
}
|
||||
$qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
$rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
->innerJoin('r.doc', 'd')
|
||||
->where('r.commodity = :commodity')
|
||||
->andWhere('r.ref = :ref')
|
||||
|
@ -742,17 +642,9 @@ class ExploreAccountsController extends AbstractController
|
|||
->setParameter('ref', $node)
|
||||
->setParameter('bid', $acc['bid'])
|
||||
->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']);
|
||||
}
|
||||
|
||||
$rows = $qb->getQuery()->getResult();
|
||||
->setParameter('money', $acc['money'])
|
||||
->getQuery()
|
||||
->getResult();
|
||||
break;
|
||||
|
||||
case 'cheque':
|
||||
|
@ -763,7 +655,7 @@ class ExploreAccountsController extends AbstractController
|
|||
if (!$item) {
|
||||
throw $this->createNotFoundException('Cheque not found');
|
||||
}
|
||||
$qb = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
$rows = $this->em->getRepository(HesabdariRow::class)->createQueryBuilder('r')
|
||||
->innerJoin('r.doc', 'd')
|
||||
->where('r.cheque = :cheque')
|
||||
->andWhere('r.ref = :ref')
|
||||
|
@ -774,17 +666,9 @@ class ExploreAccountsController extends AbstractController
|
|||
->setParameter('ref', $node)
|
||||
->setParameter('bid', $acc['bid'])
|
||||
->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']);
|
||||
}
|
||||
|
||||
$rows = $qb->getQuery()->getResult();
|
||||
->setParameter('money', $acc['money'])
|
||||
->getQuery()
|
||||
->getResult();
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -857,14 +741,14 @@ class ExploreAccountsController extends AbstractController
|
|||
/**
|
||||
* پیدا کردن ردیفهای مرتبط با نودها (برای type=calc)
|
||||
*/
|
||||
private function getRowsForNodes(array $nodes, array $acc, ?array $dateFilter = null): array
|
||||
private function getRowsForNodes(array $nodes, array $acc): 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'], $dateFilter);
|
||||
], $acc['money']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -33,7 +33,7 @@ class HesabdariRowRepository extends ServiceEntityRepository
|
|||
/**
|
||||
* پیدا کردن ردیفها با جوین روی سند و فیلتر پول، با حذف تکرارها
|
||||
*/
|
||||
public function findByJoinMoney(array $params, Money $money, ?array $dateFilter = null): array
|
||||
public function findByJoinMoney(array $params, Money $money): array
|
||||
{
|
||||
$query = $this->createQueryBuilder('t')
|
||||
->select('DISTINCT t') // حذف تکرارها با DISTINCT
|
||||
|
@ -56,14 +56,6 @@ 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();
|
||||
}
|
||||
|
||||
|
|
|
@ -98,13 +98,6 @@ export default defineComponent({
|
|||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
dateFilter: {
|
||||
type: Object,
|
||||
default: () => ({
|
||||
startDate: '',
|
||||
endDate: '',
|
||||
}),
|
||||
},
|
||||
},
|
||||
setup(props) {
|
||||
const { t } = useI18n();
|
||||
|
@ -130,24 +123,14 @@ export default defineComponent({
|
|||
const loadData = async () => {
|
||||
loading.value = true;
|
||||
try {
|
||||
const requestData = {
|
||||
const response = await axios.post('/api/report/acc/get_details', {
|
||||
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;
|
||||
|
@ -163,24 +146,14 @@ 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',
|
||||
requestData,
|
||||
{
|
||||
node: props.node,
|
||||
type: props.nodeType,
|
||||
isObject: props.isObject,
|
||||
upperId: props.upperId,
|
||||
},
|
||||
{ responseType: 'blob' }
|
||||
);
|
||||
const url = window.URL.createObjectURL(new Blob([response.data]));
|
||||
|
@ -206,13 +179,6 @@ export default defineComponent({
|
|||
loadData();
|
||||
}, { deep: true });
|
||||
|
||||
// مشاهده تغییرات فیلتر تاریخ
|
||||
watch(() => props.dateFilter, () => {
|
||||
if (dialog.value) {
|
||||
loadData();
|
||||
}
|
||||
}, { deep: true });
|
||||
|
||||
return {
|
||||
loading,
|
||||
dialog,
|
||||
|
|
|
@ -30,105 +30,6 @@
|
|||
</v-col>
|
||||
</v-row>
|
||||
</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 -->
|
||||
<v-card-text class="mt-0 pt-0 px-0">
|
||||
|
@ -150,7 +51,7 @@
|
|||
>
|
||||
<!-- Custom Slots -->
|
||||
<template #item-operation="{ id, type, isObject, upperID }">
|
||||
<DetailsBtn :node="id" :node-type="type" :is-object="isObject" :upper-id="upperID" :date-filter="dateFilter" />
|
||||
<DetailsBtn :node="id" :node-type="type" :is-object="isObject" :upper-id="upperID" />
|
||||
</template>
|
||||
<template #item-account="{ hasChild, type, isObject, code, account, id }">
|
||||
<v-btn
|
||||
|
@ -217,8 +118,6 @@
|
|||
<script>
|
||||
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',
|
||||
|
@ -233,16 +132,6 @@
|
|||
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 },
|
||||
|
@ -260,30 +149,8 @@
|
|||
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;
|
||||
|
@ -297,10 +164,6 @@
|
|||
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 || [];
|
||||
|
@ -321,17 +184,6 @@
|
|||
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));
|
||||
|
@ -339,20 +191,6 @@
|
|||
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;
|
||||
|
@ -360,63 +198,6 @@
|
|||
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];
|
||||
},
|
||||
|
@ -427,58 +208,8 @@
|
|||
};
|
||||
</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>
|
||||
.customize-table {
|
||||
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>
|
Loading…
Reference in a new issue