more bug fix in controllers

This commit is contained in:
Hesabix 2025-08-20 17:32:36 +00:00
parent 2dde89e03c
commit ef17ba4d78
4 changed files with 430 additions and 99 deletions

View file

@ -47,9 +47,17 @@ class BankController extends AbstractController
foreach ($datas as $data) { foreach ($datas as $data) {
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'bank' => $data $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
$bd += $item->getBd(); $bd += $item->getBd();
@ -95,9 +103,17 @@ class BankController extends AbstractController
foreach ($datas as $data) { foreach ($datas as $data) {
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'bank' => $data $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
$bd += $item->getBd(); $bd += $item->getBd();
@ -212,8 +228,17 @@ class BankController extends AbstractController
$bank = $entityManager->getRepository(BankAccount::class)->findOneBy(['bid' => $acc['bid'], 'code' => $code]); $bank = $entityManager->getRepository(BankAccount::class)->findOneBy(['bid' => $acc['bid'], 'code' => $code]);
if (!$bank) if (!$bank)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
//check accounting docs //check accounting docs - include both approved and preview documents for deletion check
$rows = $entityManager->getRepository(HesabdariRow::class)->findby(['bid' => $acc['bid'], 'bank' => $bank]); $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) if (count($rows) > 0)
return $this->json(['result' => 2]); return $this->json(['result' => 2]);
if ($acc['bid']->getWalletMatchBank()) { if ($acc['bid']->getWalletMatchBank()) {
@ -245,9 +270,17 @@ class BankController extends AbstractController
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'bank' => $bank $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
@ -285,11 +318,20 @@ class BankController extends AbstractController
$query = $entityManager->createQueryBuilder() $query = $entityManager->createQueryBuilder()
->select('r') ->select('r')
->from(HesabdariRow::class, 'r') ->from(HesabdariRow::class, 'r')
->join('r.doc', 'd')
->where('r.bank = :bank') ->where('r.bank = :bank')
->andWhere('r.bid = :bid') ->andWhere('r.bid = :bid')
->setParameter('bank', $bank) ->setParameter('bank', $bank)
->setParameter('bid', $acc['bid']); ->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'])) { if (isset($params['startDate']) && isset($params['endDate'])) {
$query->andWhere('r.doc.date BETWEEN :startDate AND :endDate') $query->andWhere('r.doc.date BETWEEN :startDate AND :endDate')
->setParameter('startDate', $params['startDate']) ->setParameter('startDate', $params['startDate'])
@ -327,12 +369,29 @@ class BankController extends AbstractController
$bank = $entityManager->getRepository(BankAccount::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]); $bank = $entityManager->getRepository(BankAccount::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]);
if (!$bank) if (!$bank)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
if (!array_key_exists('items', $params)) { if (!array_key_exists('items', $params)) {
$transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('r')
'bank' => $bank, ->from(HesabdariRow::class, 'r')
'year'=>$acc['year'] ->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 { } else {
$transactions = []; $transactions = [];
foreach ($params['items'] as $param) { foreach ($params['items'] as $param) {
@ -343,7 +402,10 @@ class BankController extends AbstractController
'year' => $acc['year'] 'year' => $acc['year']
]); ]);
if ($prs) { 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) if (!$bank)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
if (!array_key_exists('items', $params)) { if (!array_key_exists('items', $params)) {
$transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('r')
'bank' => $bank, ->from(HesabdariRow::class, 'r')
'year'=>$acc['year'] ->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 { } else {
$transactions = []; $transactions = [];
foreach ($params['items'] as $param) { foreach ($params['items'] as $param) {
@ -413,7 +491,10 @@ class BankController extends AbstractController
'year'=>$acc['year'] 'year'=>$acc['year']
]); ]);
if ($prs) { if ($prs) {
$transactions[] = $prs; // Check if the document is approved (unless includePreview is true)
if ($includePreview || $prs->getDoc()->isApproved()) {
$transactions[] = $prs;
}
} }
} }
} }

View file

@ -49,9 +49,17 @@ class CashdeskController extends AbstractController
foreach ($datas as $data) { foreach ($datas as $data) {
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'cashdesk' => $data $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
$bd += $item->getBd(); $bd += $item->getBd();
@ -131,8 +139,17 @@ class CashdeskController extends AbstractController
$cashdesk = $entityManager->getRepository(Cashdesk::class)->findOneBy(['bid' => $acc['bid'], 'code' => $code]); $cashdesk = $entityManager->getRepository(Cashdesk::class)->findOneBy(['bid' => $acc['bid'], 'code' => $code]);
if (!$cashdesk) if (!$cashdesk)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
//check accounting docs //check accounting docs - include both approved and preview documents for deletion check
$rows = $entityManager->getRepository(HesabdariRow::class)->findby(['bid' => $acc['bid'], 'cashdesk' => $cashdesk]); $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) if (count($rows) > 0)
return $this->json(['result' => 2]); return $this->json(['result' => 2]);
@ -177,9 +194,17 @@ class CashdeskController extends AbstractController
foreach ($datas as $data) { foreach ($datas as $data) {
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'cashdesk' => $data $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
$bd += $item->getBd(); $bd += $item->getBd();
@ -211,9 +236,23 @@ class CashdeskController extends AbstractController
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'cashdesk' => $cashdesk $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
@ -251,11 +290,20 @@ class CashdeskController extends AbstractController
$query = $entityManager->createQueryBuilder() $query = $entityManager->createQueryBuilder()
->select('r') ->select('r')
->from(HesabdariRow::class, 'r') ->from(HesabdariRow::class, 'r')
->join('r.doc', 'd')
->where('r.cashdesk = :cashdesk') ->where('r.cashdesk = :cashdesk')
->andWhere('r.bid = :bid') ->andWhere('r.bid = :bid')
->setParameter('cashdesk', $cashdesk) ->setParameter('cashdesk', $cashdesk)
->setParameter('bid', $acc['bid']); ->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'])) { if (isset($params['startDate']) && isset($params['endDate'])) {
$query->andWhere('r.doc.date BETWEEN :startDate AND :endDate') $query->andWhere('r.doc.date BETWEEN :startDate AND :endDate')
->setParameter('startDate', $params['startDate']) ->setParameter('startDate', $params['startDate'])
@ -293,12 +341,29 @@ class CashdeskController extends AbstractController
$cashdesk = $entityManager->getRepository(Cashdesk::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]); $cashdesk = $entityManager->getRepository(Cashdesk::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]);
if (!$cashdesk) if (!$cashdesk)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
if (!array_key_exists('items', $params)) { if (!array_key_exists('items', $params)) {
$transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('r')
'cashdesk' => $cashdesk, ->from(HesabdariRow::class, 'r')
'year'=>$acc['year'] ->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 { } else {
$transactions = []; $transactions = [];
foreach ($params['items'] as $param) { foreach ($params['items'] as $param) {
@ -309,7 +374,10 @@ class CashdeskController extends AbstractController
'year' => $acc['year'] 'year' => $acc['year']
]); ]);
if ($prs) { 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) if (!$cashdesk)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
if (!array_key_exists('items', $params)) { if (!array_key_exists('items', $params)) {
$transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('r')
'cashdesk' => $cashdesk, ->from(HesabdariRow::class, 'r')
'year'=>$acc['year'] ->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 { } else {
$transactions = []; $transactions = [];
foreach ($params['items'] as $param) { foreach ($params['items'] as $param) {
@ -386,7 +470,10 @@ class CashdeskController extends AbstractController
'year'=>$acc['year'] 'year'=>$acc['year']
]); ]);
if ($prs) { if ($prs) {
$transactions[] = $prs; // Check if the document is approved (unless includePreview is true)
if ($includePreview || $prs->getDoc()->isApproved()) {
$transactions[] = $prs;
}
} }
} }
} }

View file

@ -133,10 +133,19 @@ class CommodityController extends AbstractController
$data = array_map(function (Commodity $item) use ($entityManager, $acc, $explore) { $data = array_map(function (Commodity $item) use ($entityManager, $acc, $explore) {
$temp = $explore::ExploreCommodity($item); $temp = $explore::ExploreCommodity($item);
if (!$item->isKhadamat()) { if (!$item->isKhadamat()) {
$rows = $entityManager->getRepository('App\Entity\HesabdariRow')->findBy([ // Use query builder to filter by approved documents
'bid' => $acc['bid'], $rows = $entityManager->createQueryBuilder()
'commodity' => $item ->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; $count = 0;
foreach ($rows as $row) { foreach ($rows as $row) {
if ($row->getDoc()->getType() === 'buy' || $row->getDoc()->getType() === 'open_balance') { if ($row->getDoc()->getType() === 'buy' || $row->getDoc()->getType() === 'open_balance') {
@ -184,10 +193,19 @@ class CommodityController extends AbstractController
foreach ($items as $item) { foreach ($items as $item) {
$temp = Explore::ExploreCommodity($item); $temp = Explore::ExploreCommodity($item);
if (!$item->isKhadamat()) { if (!$item->isKhadamat()) {
$rows = $entityManager->getRepository('App\Entity\HesabdariRow')->findBy([ // Use query builder to filter by approved documents
'bid' => $acc['bid'], $rows = $entityManager->createQueryBuilder()
'commodity' => $item ->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; $count = 0;
foreach ($rows as $row) { foreach ($rows as $row) {
if ($row->getDoc()->getType() === 'buy' || $row->getDoc()->getType() === 'open_balance') { if ($row->getDoc()->getType() === 'buy' || $row->getDoc()->getType() === 'open_balance') {
@ -288,10 +306,19 @@ class CommodityController extends AbstractController
if ($item->isKhadamat()) { if ($item->isKhadamat()) {
$temp['count'] = 0; $temp['count'] = 0;
} else { } else {
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'bid' => $acc['bid'], $rows = $entityManager->createQueryBuilder()
'commodity' => $item ->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; $count = 0;
foreach ($rows as $row) { foreach ($rows as $row) {
if ($row->getDoc()->getType() == 'buy') { if ($row->getDoc()->getType() == 'buy') {
@ -356,10 +383,19 @@ class CommodityController extends AbstractController
if ($item->isKhadamat()) { if ($item->isKhadamat()) {
$temp['count'] = 0; $temp['count'] = 0;
} else { } else {
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'bid' => $acc['bid'], $rows = $entityManager->createQueryBuilder()
'commodity' => $item ->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; $count = 0;
foreach ($rows as $row) { foreach ($rows as $row) {
if ($row->getDoc()->getType() == 'buy') { if ($row->getDoc()->getType() == 'buy') {
@ -452,10 +488,19 @@ class CommodityController extends AbstractController
if ($item->isKhadamat()) { if ($item->isKhadamat()) {
$temp['count'] = 0; $temp['count'] = 0;
} else { } else {
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'bid' => $acc['bid'], $rows = $entityManager->createQueryBuilder()
'commodity' => $item ->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; $count = 0;
foreach ($rows as $row) { foreach ($rows as $row) {
if ($row->getDoc()->getType() == 'buy') { if ($row->getDoc()->getType() == 'buy') {
@ -651,10 +696,19 @@ class CommodityController extends AbstractController
if ($data->isKhadamat()) { if ($data->isKhadamat()) {
$res['count'] = 0; $res['count'] = 0;
} else { } else {
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'bid' => $acc['bid'], $rows = $entityManager->createQueryBuilder()
'commodity' => $data ->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) { foreach ($rows as $row) {
if ($row->getDoc()->getType() == 'buy') { if ($row->getDoc()->getType() == 'buy') {
$count += $row->getCommdityCount(); $count += $row->getCommdityCount();
@ -1320,8 +1374,17 @@ class CommodityController extends AbstractController
throw $this->createNotFoundException('کالا یافت نشد'); throw $this->createNotFoundException('کالا یافت نشد');
} }
// بررسی اسناد حسابداری // بررسی اسناد حسابداری - include both approved and preview documents for deletion check
$docs = $entityManager->getRepository(HesabdariRow::class)->findBy(['bid' => $acc['bid'], 'commodity' => $commodity]); $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) { if (count($docs) > 0) {
return $this->json(['result' => 2, 'message' => 'این کالا در اسناد حسابداری استفاده شده و قابل حذف نیست']); return $this->json(['result' => 2, 'message' => 'این کالا در اسناد حسابداری استفاده شده و قابل حذف نیست']);
} }
@ -1371,7 +1434,17 @@ class CommodityController extends AbstractController
continue; 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]); $storeDocs = $entityManager->getRepository(StoreroomItem::class)->findBy(['bid' => $acc['bid'], 'commodity' => $commodity]);
if (count($docs) > 0 || count($storeDocs) > 0) { if (count($docs) > 0 || count($storeDocs) > 0) {

View file

@ -46,9 +46,17 @@ class SalaryController extends AbstractController
foreach ($datas as $data) { foreach ($datas as $data) {
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'salary' => $data $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
$bd += $item->getBd(); $bd += $item->getBd();
@ -73,9 +81,17 @@ class SalaryController extends AbstractController
// محاسبه بدهکار و بستانکار و تراز // محاسبه بدهکار و بستانکار و تراز
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'salary' => $data $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
$bd += $item->getBd(); $bd += $item->getBd();
@ -141,8 +157,17 @@ class SalaryController extends AbstractController
$salary = $entityManager->getRepository(Salary::class)->findOneBy(['bid' => $acc['bid'], 'code' => $code]); $salary = $entityManager->getRepository(Salary::class)->findOneBy(['bid' => $acc['bid'], 'code' => $code]);
if (!$salary) if (!$salary)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
//check accounting docs //check accounting docs - include both approved and preview documents for deletion check
$rows = $entityManager->getRepository(HesabdariRow::class)->findby(['bid' => $acc['bid'], 'salary' => $salary]); $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) if (count($rows) > 0)
return $this->json(['result' => 2]); return $this->json(['result' => 2]);
@ -187,9 +212,17 @@ class SalaryController extends AbstractController
foreach ($datas as $data) { foreach ($datas as $data) {
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'salary' => $data $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
$bd += $item->getBd(); $bd += $item->getBd();
@ -221,9 +254,17 @@ class SalaryController extends AbstractController
$bs = 0; $bs = 0;
$bd = 0; $bd = 0;
$items = $entityManager->getRepository(HesabdariRow::class)->findBy([ // Use query builder to filter by approved documents
'salary' => $salary $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) { foreach ($items as $item) {
$bs += $item->getBs(); $bs += $item->getBs();
@ -261,11 +302,20 @@ class SalaryController extends AbstractController
$query = $entityManager->createQueryBuilder() $query = $entityManager->createQueryBuilder()
->select('r') ->select('r')
->from(HesabdariRow::class, 'r') ->from(HesabdariRow::class, 'r')
->join('r.doc', 'd')
->where('r.salary = :salary') ->where('r.salary = :salary')
->andWhere('r.bid = :bid') ->andWhere('r.bid = :bid')
->setParameter('salary', $salary) ->setParameter('salary', $salary)
->setParameter('bid', $acc['bid']); ->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'])) { if (isset($params['startDate']) && isset($params['endDate'])) {
$query->andWhere('r.doc.date BETWEEN :startDate AND :endDate') $query->andWhere('r.doc.date BETWEEN :startDate AND :endDate')
->setParameter('startDate', $params['startDate']) ->setParameter('startDate', $params['startDate'])
@ -303,12 +353,29 @@ class SalaryController extends AbstractController
$salary = $entityManager->getRepository(Salary::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]); $salary = $entityManager->getRepository(Salary::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]);
if (!$salary) if (!$salary)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
if (!array_key_exists('items', $params)) { if (!array_key_exists('items', $params)) {
$transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('r')
'salary' => $salary, ->from(HesabdariRow::class, 'r')
'year' => $acc['year'], ->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 { } else {
$transactions = []; $transactions = [];
if (is_array($params['items'])) { if (is_array($params['items'])) {
@ -322,7 +389,10 @@ class SalaryController extends AbstractController
'year' => $acc['year'], 'year' => $acc['year'],
]); ]);
if ($row) { 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']]); $salary = $entityManager->getRepository(Salary::class)->findOneBy(['bid' => $acc['bid'], 'code' => $params['code']]);
if (!$salary) if (!$salary)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
if (!array_key_exists('items', $params)) { if (!array_key_exists('items', $params)) {
$transactions = $entityManager->getRepository(HesabdariRow::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('r')
'salary' => $salary, ->from(HesabdariRow::class, 'r')
'year' => $acc['year'], ->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 { } else {
$transactions = []; $transactions = [];
if (is_array($params['items'])) { if (is_array($params['items'])) {
@ -397,7 +484,10 @@ class SalaryController extends AbstractController
'year' => $acc['year'], 'year' => $acc['year'],
]); ]);
if ($row) { if ($row) {
$transactions[] = $row; // Check if the document is approved (unless includePreview is true)
if ($includePreview || $row->getDoc()->isApproved()) {
$transactions[] = $row;
}
} }
} }
} }