diff --git a/hesabixCore/src/Controller/BankController.php b/hesabixCore/src/Controller/BankController.php index a4c166f..57e8731 100644 --- a/hesabixCore/src/Controller/BankController.php +++ b/hesabixCore/src/Controller/BankController.php @@ -47,9 +47,17 @@ class BankController extends AbstractController foreach ($datas as $data) { $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bank' => $data - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bank = :bank') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('bank', $data) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); $bd += $item->getBd(); @@ -95,9 +103,17 @@ class BankController extends AbstractController foreach ($datas as $data) { $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bank' => $data - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bank = :bank') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('bank', $data) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); $bd += $item->getBd(); @@ -212,8 +228,17 @@ class BankController extends AbstractController $bank = $entityManager->getRepository(BankAccount::class)->findOneBy(['bid' => $acc['bid'], 'code' => $code]); if (!$bank) throw $this->createNotFoundException(); - //check accounting docs - $rows = $entityManager->getRepository(HesabdariRow::class)->findby(['bid' => $acc['bid'], 'bank' => $bank]); + //check accounting docs - include both approved and preview documents for deletion check + $rows = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.bank = :bank') + ->setParameter('bid', $acc['bid']) + ->setParameter('bank', $bank) + ->getQuery() + ->getResult(); if (count($rows) > 0) return $this->json(['result' => 2]); if ($acc['bid']->getWalletMatchBank()) { @@ -245,9 +270,17 @@ class BankController extends AbstractController $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bank' => $bank - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bank = :bank') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('bank', $bank) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); @@ -285,11 +318,20 @@ class BankController extends AbstractController $query = $entityManager->createQueryBuilder() ->select('r') ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') ->where('r.bank = :bank') ->andWhere('r.bid = :bid') ->setParameter('bank', $bank) ->setParameter('bid', $acc['bid']); + // Check if includePreview parameter is provided + $includePreview = $params['includePreview'] ?? false; + if (!$includePreview) { + // Default: only show approved documents + $query->andWhere('d.isApproved = :isApproved') + ->setParameter('isApproved', true); + } + if (isset($params['startDate']) && isset($params['endDate'])) { $query->andWhere('r.doc.date BETWEEN :startDate AND :endDate') ->setParameter('startDate', $params['startDate']) @@ -327,12 +369,29 @@ class BankController extends AbstractController $bank = $entityManager->getRepository(BankAccount::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]); if (!$bank) throw $this->createNotFoundException(); + + // Check if includePreview parameter is provided + $includePreview = $params['includePreview'] ?? false; + if (!array_key_exists('items', $params)) { - $transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'bank' => $bank, - 'year'=>$acc['year'] - ]); + $query = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.bank = :bank') + ->andWhere('r.year = :year') + ->setParameter('bid', $acc['bid']) + ->setParameter('bank', $bank) + ->setParameter('year', $acc['year']); + + if (!$includePreview) { + // Default: only show approved documents + $query->andWhere('d.isApproved = :isApproved') + ->setParameter('isApproved', true); + } + + $transactions = $query->getQuery()->getResult(); } else { $transactions = []; foreach ($params['items'] as $param) { @@ -343,7 +402,10 @@ class BankController extends AbstractController 'year' => $acc['year'] ]); if ($prs) { - $transactions[] = $prs; + // Check if the document is approved (unless includePreview is true) + if ($includePreview || $prs->getDoc()->isApproved()) { + $transactions[] = $prs; + } } } } @@ -397,12 +459,28 @@ class BankController extends AbstractController if (!$bank) throw $this->createNotFoundException(); + // Check if includePreview parameter is provided + $includePreview = $params['includePreview'] ?? false; + if (!array_key_exists('items', $params)) { - $transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'bank' => $bank, - 'year'=>$acc['year'] - ]); + $query = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.bank = :bank') + ->andWhere('r.year = :year') + ->setParameter('bid', $acc['bid']) + ->setParameter('bank', $bank) + ->setParameter('year', $acc['year']); + + if (!$includePreview) { + // Default: only show approved documents + $query->andWhere('d.isApproved = :isApproved') + ->setParameter('isApproved', true); + } + + $transactions = $query->getQuery()->getResult(); } else { $transactions = []; foreach ($params['items'] as $param) { @@ -413,7 +491,10 @@ class BankController extends AbstractController 'year'=>$acc['year'] ]); if ($prs) { - $transactions[] = $prs; + // Check if the document is approved (unless includePreview is true) + if ($includePreview || $prs->getDoc()->isApproved()) { + $transactions[] = $prs; + } } } } diff --git a/hesabixCore/src/Controller/CashdeskController.php b/hesabixCore/src/Controller/CashdeskController.php index c45374c..5d77de5 100644 --- a/hesabixCore/src/Controller/CashdeskController.php +++ b/hesabixCore/src/Controller/CashdeskController.php @@ -49,9 +49,17 @@ class CashdeskController extends AbstractController foreach ($datas as $data) { $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'cashdesk' => $data - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.cashdesk = :cashdesk') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('cashdesk', $data) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); $bd += $item->getBd(); @@ -131,8 +139,17 @@ class CashdeskController extends AbstractController $cashdesk = $entityManager->getRepository(Cashdesk::class)->findOneBy(['bid' => $acc['bid'], 'code' => $code]); if (!$cashdesk) throw $this->createNotFoundException(); - //check accounting docs - $rows = $entityManager->getRepository(HesabdariRow::class)->findby(['bid' => $acc['bid'], 'cashdesk' => $cashdesk]); + //check accounting docs - include both approved and preview documents for deletion check + $rows = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.cashdesk = :cashdesk') + ->setParameter('bid', $acc['bid']) + ->setParameter('cashdesk', $cashdesk) + ->getQuery() + ->getResult(); if (count($rows) > 0) return $this->json(['result' => 2]); @@ -177,9 +194,17 @@ class CashdeskController extends AbstractController foreach ($datas as $data) { $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'cashdesk' => $data - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.cashdesk = :cashdesk') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('cashdesk', $data) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); $bd += $item->getBd(); @@ -211,9 +236,23 @@ class CashdeskController extends AbstractController $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'cashdesk' => $cashdesk - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.cashdesk = :cashdesk') + ->andWhere('r.year = :year') + ->andWhere('r.bid = :bid') + ->andWhere('r.money = :money') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('cashdesk', $cashdesk) + ->setParameter('year', $acc['year']) + ->setParameter('bid', $acc['bid']) + ->setParameter('money', $acc['money']) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); @@ -251,11 +290,20 @@ class CashdeskController extends AbstractController $query = $entityManager->createQueryBuilder() ->select('r') ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') ->where('r.cashdesk = :cashdesk') ->andWhere('r.bid = :bid') ->setParameter('cashdesk', $cashdesk) ->setParameter('bid', $acc['bid']); + // Check if includePreview parameter is provided + $includePreview = $params['includePreview'] ?? false; + if (!$includePreview) { + // Default: only show approved documents + $query->andWhere('d.isApproved = :isApproved') + ->setParameter('isApproved', true); + } + if (isset($params['startDate']) && isset($params['endDate'])) { $query->andWhere('r.doc.date BETWEEN :startDate AND :endDate') ->setParameter('startDate', $params['startDate']) @@ -293,12 +341,29 @@ class CashdeskController extends AbstractController $cashdesk = $entityManager->getRepository(Cashdesk::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]); if (!$cashdesk) throw $this->createNotFoundException(); + + // Check if includePreview parameter is provided + $includePreview = $params['includePreview'] ?? false; + if (!array_key_exists('items', $params)) { - $transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'cashdesk' => $cashdesk, - 'year'=>$acc['year'] - ]); + $query = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.cashdesk = :cashdesk') + ->andWhere('r.year = :year') + ->setParameter('bid', $acc['bid']) + ->setParameter('cashdesk', $cashdesk) + ->setParameter('year', $acc['year']); + + if (!$includePreview) { + // Default: only show approved documents + $query->andWhere('d.isApproved = :isApproved') + ->setParameter('isApproved', true); + } + + $transactions = $query->getQuery()->getResult(); } else { $transactions = []; foreach ($params['items'] as $param) { @@ -309,7 +374,10 @@ class CashdeskController extends AbstractController 'year' => $acc['year'] ]); if ($prs) { - $transactions[] = $prs; + // Check if the document is approved (unless includePreview is true) + if ($includePreview || $prs->getDoc()->isApproved()) { + $transactions[] = $prs; + } } } } @@ -370,12 +438,28 @@ class CashdeskController extends AbstractController if (!$cashdesk) throw $this->createNotFoundException(); + // Check if includePreview parameter is provided + $includePreview = $params['includePreview'] ?? false; + if (!array_key_exists('items', $params)) { - $transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'cashdesk' => $cashdesk, - 'year'=>$acc['year'] - ]); + $query = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.cashdesk = :cashdesk') + ->andWhere('r.year = :year') + ->setParameter('bid', $acc['bid']) + ->setParameter('cashdesk', $cashdesk) + ->setParameter('year', $acc['year']); + + if (!$includePreview) { + // Default: only show approved documents + $query->andWhere('d.isApproved = :isApproved') + ->setParameter('isApproved', true); + } + + $transactions = $query->getQuery()->getResult(); } else { $transactions = []; foreach ($params['items'] as $param) { @@ -386,7 +470,10 @@ class CashdeskController extends AbstractController 'year'=>$acc['year'] ]); if ($prs) { - $transactions[] = $prs; + // Check if the document is approved (unless includePreview is true) + if ($includePreview || $prs->getDoc()->isApproved()) { + $transactions[] = $prs; + } } } } diff --git a/hesabixCore/src/Controller/CommodityController.php b/hesabixCore/src/Controller/CommodityController.php index be6dbfa..e2b16d3 100644 --- a/hesabixCore/src/Controller/CommodityController.php +++ b/hesabixCore/src/Controller/CommodityController.php @@ -133,10 +133,19 @@ class CommodityController extends AbstractController $data = array_map(function (Commodity $item) use ($entityManager, $acc, $explore) { $temp = $explore::ExploreCommodity($item); if (!$item->isKhadamat()) { - $rows = $entityManager->getRepository('App\Entity\HesabdariRow')->findBy([ - 'bid' => $acc['bid'], - 'commodity' => $item - ]); + // Use query builder to filter by approved documents + $rows = $entityManager->createQueryBuilder() + ->select('r') + ->from('App\Entity\HesabdariRow', 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.commodity = :commodity') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('bid', $acc['bid']) + ->setParameter('commodity', $item) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); $count = 0; foreach ($rows as $row) { if ($row->getDoc()->getType() === 'buy' || $row->getDoc()->getType() === 'open_balance') { @@ -184,10 +193,19 @@ class CommodityController extends AbstractController foreach ($items as $item) { $temp = Explore::ExploreCommodity($item); if (!$item->isKhadamat()) { - $rows = $entityManager->getRepository('App\Entity\HesabdariRow')->findBy([ - 'bid' => $acc['bid'], - 'commodity' => $item - ]); + // Use query builder to filter by approved documents + $rows = $entityManager->createQueryBuilder() + ->select('r') + ->from('App\Entity\HesabdariRow', 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.commodity = :commodity') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('bid', $acc['bid']) + ->setParameter('commodity', $item) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); $count = 0; foreach ($rows as $row) { if ($row->getDoc()->getType() === 'buy' || $row->getDoc()->getType() === 'open_balance') { @@ -288,10 +306,19 @@ class CommodityController extends AbstractController if ($item->isKhadamat()) { $temp['count'] = 0; } else { - $rows = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'commodity' => $item - ]); + // Use query builder to filter by approved documents + $rows = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.commodity = :commodity') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('bid', $acc['bid']) + ->setParameter('commodity', $item) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); $count = 0; foreach ($rows as $row) { if ($row->getDoc()->getType() == 'buy') { @@ -356,10 +383,19 @@ class CommodityController extends AbstractController if ($item->isKhadamat()) { $temp['count'] = 0; } else { - $rows = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'commodity' => $item - ]); + // Use query builder to filter by approved documents + $rows = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.commodity = :commodity') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('bid', $acc['bid']) + ->setParameter('commodity', $item) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); $count = 0; foreach ($rows as $row) { if ($row->getDoc()->getType() == 'buy') { @@ -452,10 +488,19 @@ class CommodityController extends AbstractController if ($item->isKhadamat()) { $temp['count'] = 0; } else { - $rows = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'commodity' => $item - ]); + // Use query builder to filter by approved documents + $rows = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.commodity = :commodity') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('bid', $acc['bid']) + ->setParameter('commodity', $item) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); $count = 0; foreach ($rows as $row) { if ($row->getDoc()->getType() == 'buy') { @@ -651,10 +696,19 @@ class CommodityController extends AbstractController if ($data->isKhadamat()) { $res['count'] = 0; } else { - $rows = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'commodity' => $data - ]); + // Use query builder to filter by approved documents + $rows = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.commodity = :commodity') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('bid', $acc['bid']) + ->setParameter('commodity', $data) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($rows as $row) { if ($row->getDoc()->getType() == 'buy') { $count += $row->getCommdityCount(); @@ -1320,8 +1374,17 @@ class CommodityController extends AbstractController throw $this->createNotFoundException('کالا یافت نشد'); } - // بررسی اسناد حسابداری - $docs = $entityManager->getRepository(HesabdariRow::class)->findBy(['bid' => $acc['bid'], 'commodity' => $commodity]); + // بررسی اسناد حسابداری - include both approved and preview documents for deletion check + $docs = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.commodity = :commodity') + ->setParameter('bid', $acc['bid']) + ->setParameter('commodity', $commodity) + ->getQuery() + ->getResult(); if (count($docs) > 0) { return $this->json(['result' => 2, 'message' => 'این کالا در اسناد حسابداری استفاده شده و قابل حذف نیست']); } @@ -1371,7 +1434,17 @@ class CommodityController extends AbstractController continue; } - $docs = $entityManager->getRepository(HesabdariRow::class)->findBy(['bid' => $acc['bid'], 'commodity' => $commodity]); + // بررسی اسناد حسابداری - include both approved and preview documents for deletion check + $docs = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.commodity = :commodity') + ->setParameter('bid', $acc['bid']) + ->setParameter('commodity', $commodity) + ->getQuery() + ->getResult(); $storeDocs = $entityManager->getRepository(StoreroomItem::class)->findBy(['bid' => $acc['bid'], 'commodity' => $commodity]); if (count($docs) > 0 || count($storeDocs) > 0) { diff --git a/hesabixCore/src/Controller/SalaryController.php b/hesabixCore/src/Controller/SalaryController.php index 1221233..d0c1e9d 100644 --- a/hesabixCore/src/Controller/SalaryController.php +++ b/hesabixCore/src/Controller/SalaryController.php @@ -46,9 +46,17 @@ class SalaryController extends AbstractController foreach ($datas as $data) { $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'salary' => $data - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.salary = :salary') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('salary', $data) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); $bd += $item->getBd(); @@ -73,9 +81,17 @@ class SalaryController extends AbstractController // محاسبه بدهکار و بستانکار و تراز $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'salary' => $data - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.salary = :salary') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('salary', $data) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); $bd += $item->getBd(); @@ -141,8 +157,17 @@ class SalaryController extends AbstractController $salary = $entityManager->getRepository(Salary::class)->findOneBy(['bid' => $acc['bid'], 'code' => $code]); if (!$salary) throw $this->createNotFoundException(); - //check accounting docs - $rows = $entityManager->getRepository(HesabdariRow::class)->findby(['bid' => $acc['bid'], 'salary' => $salary]); + //check accounting docs - include both approved and preview documents for deletion check + $rows = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.salary = :salary') + ->setParameter('bid', $acc['bid']) + ->setParameter('salary', $salary) + ->getQuery() + ->getResult(); if (count($rows) > 0) return $this->json(['result' => 2]); @@ -187,9 +212,17 @@ class SalaryController extends AbstractController foreach ($datas as $data) { $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'salary' => $data - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.salary = :salary') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('salary', $data) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); $bd += $item->getBd(); @@ -221,9 +254,17 @@ class SalaryController extends AbstractController $bs = 0; $bd = 0; - $items = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'salary' => $salary - ]); + // Use query builder to filter by approved documents + $items = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.salary = :salary') + ->andWhere('d.isApproved = :isApproved') + ->setParameter('salary', $salary) + ->setParameter('isApproved', true) + ->getQuery() + ->getResult(); foreach ($items as $item) { $bs += $item->getBs(); @@ -261,11 +302,20 @@ class SalaryController extends AbstractController $query = $entityManager->createQueryBuilder() ->select('r') ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') ->where('r.salary = :salary') ->andWhere('r.bid = :bid') ->setParameter('salary', $salary) ->setParameter('bid', $acc['bid']); + // Check if includePreview parameter is provided + $includePreview = $params['includePreview'] ?? false; + if (!$includePreview) { + // Default: only show approved documents + $query->andWhere('d.isApproved = :isApproved') + ->setParameter('isApproved', true); + } + if (isset($params['startDate']) && isset($params['endDate'])) { $query->andWhere('r.doc.date BETWEEN :startDate AND :endDate') ->setParameter('startDate', $params['startDate']) @@ -303,12 +353,29 @@ class SalaryController extends AbstractController $salary = $entityManager->getRepository(Salary::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]); if (!$salary) throw $this->createNotFoundException(); + + // Check if includePreview parameter is provided + $includePreview = $params['includePreview'] ?? false; + if (!array_key_exists('items', $params)) { - $transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'salary' => $salary, - 'year' => $acc['year'], - ]); + $query = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.salary = :salary') + ->andWhere('r.year = :year') + ->setParameter('bid', $acc['bid']) + ->setParameter('salary', $salary) + ->setParameter('year', $acc['year']); + + if (!$includePreview) { + // Default: only show approved documents + $query->andWhere('d.isApproved = :isApproved') + ->setParameter('isApproved', true); + } + + $transactions = $query->getQuery()->getResult(); } else { $transactions = []; if (is_array($params['items'])) { @@ -322,7 +389,10 @@ class SalaryController extends AbstractController 'year' => $acc['year'], ]); if ($row) { - $transactions[] = $row; + // Check if the document is approved (unless includePreview is true) + if ($includePreview || $row->getDoc()->isApproved()) { + $transactions[] = $row; + } } } } @@ -378,12 +448,29 @@ class SalaryController extends AbstractController $salary = $entityManager->getRepository(Salary::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]); if (!$salary) throw $this->createNotFoundException(); + + // Check if includePreview parameter is provided + $includePreview = $params['includePreview'] ?? false; + if (!array_key_exists('items', $params)) { - $transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ - 'bid' => $acc['bid'], - 'salary' => $salary, - 'year' => $acc['year'], - ]); + $query = $entityManager->createQueryBuilder() + ->select('r') + ->from(HesabdariRow::class, 'r') + ->join('r.doc', 'd') + ->where('r.bid = :bid') + ->andWhere('r.salary = :salary') + ->andWhere('r.year = :year') + ->setParameter('bid', $acc['bid']) + ->setParameter('salary', $salary) + ->setParameter('year', $acc['year']); + + if (!$includePreview) { + // Default: only show approved documents + $query->andWhere('d.isApproved = :isApproved') + ->setParameter('isApproved', true); + } + + $transactions = $query->getQuery()->getResult(); } else { $transactions = []; if (is_array($params['items'])) { @@ -397,7 +484,10 @@ class SalaryController extends AbstractController 'year' => $acc['year'], ]); if ($row) { - $transactions[] = $row; + // Check if the document is approved (unless includePreview is true) + if ($includePreview || $row->getDoc()->isApproved()) { + $transactions[] = $row; + } } } }