add more filter in hesabdari controller

This commit is contained in:
Hesabix 2025-08-20 00:13:11 +00:00
parent 9af86b989b
commit 8d91bcd4ea
2 changed files with 180 additions and 30 deletions

View file

@ -51,12 +51,38 @@ class AccountingDocService
]);
if (!$person)
return ['error' => 'شخص یافت نشد'];
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->findBy([
'person' => $person,
'year' => $acc['year']
], [
'id' => 'ASC'
]);
// Check if we should include preview documents
$includePreview = $params['includePreview'] ?? false;
if ($includePreview) {
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->createQueryBuilder('r')
->join('r.doc', 'd')
->where('r.person = :person')
->andWhere('r.year = :year')
->andWhere('d.bid = :bid')
->setParameter('person', $person)
->setParameter('year', $acc['year'])
->setParameter('bid', $acc['bid'])
->orderBy('r.id', 'ASC')
->getQuery()
->getResult();
} else {
// Default: only approved documents
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->createQueryBuilder('r')
->join('r.doc', 'd')
->where('r.person = :person')
->andWhere('r.year = :year')
->andWhere('d.bid = :bid')
->andWhere('d.isApproved = :isApproved')
->setParameter('person', $person)
->setParameter('year', $acc['year'])
->setParameter('bid', $acc['bid'])
->setParameter('isApproved', true)
->orderBy('r.id', 'ASC')
->getQuery()
->getResult();
}
} elseif ($params['type'] == 'bank') {
$bank = $em->getRepository(\App\Entity\BankAccount::class)->findOneBy([
'bid' => $acc['bid'],
@ -64,12 +90,38 @@ class AccountingDocService
]);
if (!$bank)
return ['error' => 'بانک یافت نشد'];
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->findBy([
'bank' => $bank,
'year' => $acc['year']
], [
'id' => 'ASC'
]);
// Check if we should include preview documents
$includePreview = $params['includePreview'] ?? false;
if ($includePreview) {
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->createQueryBuilder('r')
->join('r.doc', 'd')
->where('r.bank = :bank')
->andWhere('r.year = :year')
->andWhere('d.bid = :bid')
->setParameter('bank', $bank)
->setParameter('year', $acc['year'])
->setParameter('bid', $acc['bid'])
->orderBy('r.id', 'ASC')
->getQuery()
->getResult();
} else {
// Default: only approved documents
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->createQueryBuilder('r')
->join('r.doc', 'd')
->where('r.bank = :bank')
->andWhere('r.year = :year')
->andWhere('d.bid = :bid')
->andWhere('d.isApproved = :isApproved')
->setParameter('bank', $bank)
->setParameter('year', $acc['year'])
->setParameter('bid', $acc['bid'])
->setParameter('isApproved', true)
->orderBy('r.id', 'ASC')
->getQuery()
->getResult();
}
} elseif ($params['type'] == 'cashdesk') {
$cashdesk = $em->getRepository(\App\Entity\Cashdesk::class)->findOneBy([
'bid' => $acc['bid'],
@ -77,12 +129,38 @@ class AccountingDocService
]);
if (!$cashdesk)
return ['error' => 'صندوق یافت نشد'];
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->findBy([
'cashdesk' => $cashdesk,
'year' => $acc['year']
], [
'id' => 'ASC'
]);
// Check if we should include preview documents
$includePreview = $params['includePreview'] ?? false;
if ($includePreview) {
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->createQueryBuilder('r')
->join('r.doc', 'd')
->where('r.cashdesk = :cashdesk')
->andWhere('r.year = :year')
->andWhere('d.bid = :bid')
->setParameter('cashdesk', $cashdesk)
->setParameter('year', $acc['year'])
->setParameter('bid', $acc['bid'])
->orderBy('r.id', 'ASC')
->getQuery()
->getResult();
} else {
// Default: only approved documents
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->createQueryBuilder('r')
->join('r.doc', 'd')
->where('r.cashdesk = :cashdesk')
->andWhere('r.year = :year')
->andWhere('d.bid = :bid')
->andWhere('d.isApproved = :isApproved')
->setParameter('cashdesk', $cashdesk)
->setParameter('year', $acc['year'])
->setParameter('bid', $acc['bid'])
->setParameter('isApproved', true)
->orderBy('r.id', 'ASC')
->getQuery()
->getResult();
}
} elseif ($params['type'] == 'salary') {
$salary = $em->getRepository(\App\Entity\Salary::class)->findOneBy([
'bid' => $acc['bid'],
@ -90,12 +168,38 @@ class AccountingDocService
]);
if (!$salary)
return ['error' => 'حقوق یافت نشد'];
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->findBy([
'salary' => $salary,
'year' => $acc['year']
], [
'id' => 'ASC'
]);
// Check if we should include preview documents
$includePreview = $params['includePreview'] ?? false;
if ($includePreview) {
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->createQueryBuilder('r')
->join('r.doc', 'd')
->where('r.salary = :salary')
->andWhere('r.year = :year')
->andWhere('d.bid = :bid')
->setParameter('salary', $salary)
->setParameter('year', $acc['year'])
->setParameter('bid', $acc['bid'])
->orderBy('r.id', 'ASC')
->getQuery()
->getResult();
} else {
// Default: only approved documents
$data = $em->getRepository(\App\Entity\HesabdariRow::class)->createQueryBuilder('r')
->join('r.doc', 'd')
->where('r.salary = :salary')
->andWhere('r.year = :year')
->andWhere('d.bid = :bid')
->andWhere('d.isApproved = :isApproved')
->setParameter('salary', $salary)
->setParameter('year', $acc['year'])
->setParameter('bid', $acc['bid'])
->setParameter('isApproved', true)
->orderBy('r.id', 'ASC')
->getQuery()
->getResult();
}
} else {
return ['error' => 'نوع پشتیبانی نمی‌شود'];
}

View file

@ -52,12 +52,25 @@ class HesabdariController extends AbstractController
$acc = $access->hasRole('accounting');
if (!$acc)
throw $this->createAccessDeniedException();
// Check if we should include preview documents
$includePreview = $params['includePreview'] ?? false;
if ($includePreview) {
$doc = $entityManager->getRepository(HesabdariDoc::class)->findOneByIncludePreview([
'bid' => $acc['bid'],
'year' => $acc['year'],
'code' => $params['code'],
'money' => $acc['money']
]);
} else {
// Default: only approved documents
$doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([
'bid' => $acc['bid'],
'year' => $acc['year'],
'code' => $params['code'],
'money' => $acc['money']
]);
}
if (!$doc)
throw $this->createNotFoundException();
//add shortlink to doc
@ -208,6 +221,7 @@ class HesabdariController extends AbstractController
// Build base query
$queryBuilder = $entityManager->createQueryBuilder()
->select('DISTINCT d.id, d.dateSubmit, d.date, d.type, d.code, d.des, d.amount')
->addSelect('d.isPreview, d.isApproved')
->addSelect('u.fullName as submitter')
->from('App\Entity\HesabdariDoc', 'd')
->leftJoin('d.submitter', 'u')
@ -220,6 +234,21 @@ class HesabdariController extends AbstractController
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
// Apply approval filters - if not specified, only show approved documents
if (isset($filters['isApproved'])) {
$queryBuilder->andWhere('d.isApproved = :isApproved')
->setParameter('isApproved', $filters['isApproved']);
} else {
// Default: only show approved documents
$queryBuilder->andWhere('d.isApproved = :isApproved')
->setParameter('isApproved', true);
}
if (isset($filters['isPreview'])) {
$queryBuilder->andWhere('d.isPreview = :isPreview')
->setParameter('isPreview', $filters['isPreview']);
}
// Add type filter if not 'all'
if ($type !== 'all') {
$queryBuilder->andWhere('d.type = :type')
@ -323,6 +352,8 @@ class HesabdariController extends AbstractController
'des' => $doc['des'],
'amount' => $doc['amount'],
'submitter' => $doc['submitter'],
'isPreview' => $doc['isPreview'],
'isApproved' => $doc['isApproved'],
];
// Get related person info if applicable
@ -443,6 +474,21 @@ class HesabdariController extends AbstractController
$doc->setSubmitter($this->getUser());
$doc->setMoney($acc['money']);
$doc->setCode($provider->getAccountingCode($acc['bid'], 'accounting'));
// Set approval status based on business settings
$business = $acc['bid'];
if ($business->getTwoStepApproval()) {
// Two-step approval is enabled
$doc->setIsPreview(true);
$doc->setIsApproved(false);
$doc->setApprovedBy(null);
} else {
// Two-step approval is disabled - auto approve
$doc->setIsPreview(false);
$doc->setIsApproved(true);
$doc->setApprovedBy($this->getUser());
}
if (array_key_exists('refData', $params))
$doc->setRefData($params['refData']);
if (array_key_exists('plugin', $params))