more progress in changes with new columns in hesabdariDoc

This commit is contained in:
Hesabix 2025-08-20 18:00:04 +00:00
parent ef17ba4d78
commit 79b887041e
3 changed files with 187 additions and 36 deletions

View file

@ -47,7 +47,7 @@ class CostController extends AbstractController
$yearStart = $jdate->jdate('Y/m/d', $yearStartUnix); $yearStart = $jdate->jdate('Y/m/d', $yearStartUnix);
$yearEnd = $jdate->jdate('Y/m/d', $yearEndUnix); $yearEnd = $jdate->jdate('Y/m/d', $yearEndUnix);
// کوئری پایه - فقط جمع bd را محاسبه می‌کنیم // کوئری پایه - فقط جمع bd را محاسبه می‌کنیم و فقط اسناد تایید شده
$qb = $entityManager->createQueryBuilder() $qb = $entityManager->createQueryBuilder()
->select('SUM(COALESCE(r.bd, 0)) as total') ->select('SUM(COALESCE(r.bd, 0)) as total')
->from('App\Entity\HesabdariDoc', 'd') ->from('App\Entity\HesabdariDoc', 'd')
@ -56,10 +56,12 @@ class CostController extends AbstractController
->andWhere('d.money = :money') ->andWhere('d.money = :money')
->andWhere('d.type = :type') ->andWhere('d.type = :type')
->andWhere('d.year = :year') ->andWhere('d.year = :year')
->andWhere('d.isApproved = :isApproved')
->setParameter('bid', $acc['bid']) ->setParameter('bid', $acc['bid'])
->setParameter('money', $acc['money']) ->setParameter('money', $acc['money'])
->setParameter('type', 'cost') ->setParameter('type', 'cost')
->setParameter('year', $acc['year']); ->setParameter('year', $acc['year'])
->setParameter('isApproved', true);
// هزینه امروز // هزینه امروز
$todayCost = (clone $qb) $todayCost = (clone $qb)
@ -126,7 +128,7 @@ class CostController extends AbstractController
'year' => $acc['year'], 'year' => $acc['year'],
]; ];
// کوئری پایه // کوئری پایه - فقط اسناد تایید شده
$qb = $entityManager->createQueryBuilder() $qb = $entityManager->createQueryBuilder()
->select('t.name AS center_name, SUM(COALESCE(r.bd, 0)) AS total_cost') ->select('t.name AS center_name, SUM(COALESCE(r.bd, 0)) AS total_cost')
->from('App\Entity\HesabdariDoc', 'd') ->from('App\Entity\HesabdariDoc', 'd')
@ -136,13 +138,15 @@ class CostController extends AbstractController
->andWhere('d.money = :money') ->andWhere('d.money = :money')
->andWhere('d.type = :type') ->andWhere('d.type = :type')
->andWhere('d.year = :year') ->andWhere('d.year = :year')
->andWhere('d.isApproved = :isApproved')
->andWhere('r.bd != 0') ->andWhere('r.bd != 0')
->groupBy('t.id, t.name') ->groupBy('t.id, t.name')
->orderBy('total_cost', 'DESC') ->orderBy('total_cost', 'DESC')
->setParameter('bid', $acc['bid']) ->setParameter('bid', $acc['bid'])
->setParameter('money', $acc['money']) ->setParameter('money', $acc['money'])
->setParameter('type', 'cost') ->setParameter('type', 'cost')
->setParameter('year', $acc['year']); ->setParameter('year', $acc['year'])
->setParameter('isApproved', true);
// اعمال فیلتر تاریخ فقط برای امروز و ماه // اعمال فیلتر تاریخ فقط برای امروز و ماه
if ($period === 'today') { if ($period === 'today') {
@ -203,6 +207,7 @@ class CostController extends AbstractController
// Build base query // Build base query
$queryBuilder = $entityManager->createQueryBuilder() $queryBuilder = $entityManager->createQueryBuilder()
->select('DISTINCT d.id, d.dateSubmit, d.date, d.type, d.code, d.des, d.amount') ->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') ->addSelect('u.fullName as submitter')
->from('App\Entity\HesabdariDoc', 'd') ->from('App\Entity\HesabdariDoc', 'd')
->leftJoin('d.submitter', 'u') ->leftJoin('d.submitter', 'u')
@ -217,6 +222,14 @@ class CostController extends AbstractController
->setParameter('type', $type) ->setParameter('type', $type)
->setParameter('money', $acc['money']); ->setParameter('money', $acc['money']);
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
if (!$includePreview) {
// Default: only show approved documents
$queryBuilder->andWhere('d.isApproved = :isApproved')
->setParameter('isApproved', true);
}
// Apply filters // Apply filters
if (!empty($filters)) { if (!empty($filters)) {
// Text search // Text search
@ -313,6 +326,8 @@ class CostController extends AbstractController
'des' => $doc['des'], 'des' => $doc['des'],
'amount' => $doc['amount'], 'amount' => $doc['amount'],
'submitter' => $doc['submitter'], 'submitter' => $doc['submitter'],
'isPreview' => $doc['isPreview'],
'isApproved' => $doc['isApproved'],
]; ];
// Get cost center details // Get cost center details
@ -378,14 +393,30 @@ class CostController extends AbstractController
$params = json_decode($request->getContent(), true) ?? []; $params = json_decode($request->getContent(), true) ?? [];
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
// دریافت آیتم‌های انتخاب شده یا همه آیتم‌ها // دریافت آیتم‌های انتخاب شده یا همه آیتم‌ها
if (!isset($params['items'])) { if (!isset($params['items'])) {
$items = $entityManager->getRepository(HesabdariDoc::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('d')
'type' => 'cost', ->from(HesabdariDoc::class, 'd')
'year' => $acc['year'], ->where('d.bid = :bid')
'money' => $acc['money'] ->andWhere('d.type = :type')
]); ->andWhere('d.year = :year')
->andWhere('d.money = :money')
->setParameter('bid', $acc['bid'])
->setParameter('type', 'cost')
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
if (!$includePreview) {
// Default: only show approved documents
$query->andWhere('d.isApproved = :isApproved')
->setParameter('isApproved', true);
}
$items = $query->getQuery()->getResult();
} else { } else {
$items = []; $items = [];
foreach ($params['items'] as $param) { foreach ($params['items'] as $param) {
@ -397,7 +428,10 @@ class CostController extends AbstractController
'money' => $acc['money'] 'money' => $acc['money']
]); ]);
if ($doc) { if ($doc) {
$items[] = $doc; // Check if the document is approved (unless includePreview is true)
if ($includePreview || $doc->isApproved()) {
$items[] = $doc;
}
} }
} }
} }
@ -429,14 +463,30 @@ class CostController extends AbstractController
$params = json_decode($request->getContent(), true) ?? []; $params = json_decode($request->getContent(), true) ?? [];
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
// دریافت آیتم‌های انتخاب شده یا همه آیتم‌ها // دریافت آیتم‌های انتخاب شده یا همه آیتم‌ها
if (!isset($params['items'])) { if (!isset($params['items'])) {
$items = $entityManager->getRepository(HesabdariDoc::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('d')
'type' => 'cost', ->from(HesabdariDoc::class, 'd')
'year' => $acc['year'], ->where('d.bid = :bid')
'money' => $acc['money'] ->andWhere('d.type = :type')
]); ->andWhere('d.year = :year')
->andWhere('d.money = :money')
->setParameter('bid', $acc['bid'])
->setParameter('type', 'cost')
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
if (!$includePreview) {
// Default: only show approved documents
$query->andWhere('d.isApproved = :isApproved')
->setParameter('isApproved', true);
}
$items = $query->getQuery()->getResult();
} else { } else {
$items = []; $items = [];
foreach ($params['items'] as $param) { foreach ($params['items'] as $param) {
@ -448,7 +498,10 @@ class CostController extends AbstractController
'money' => $acc['money'] 'money' => $acc['money']
]); ]);
if ($doc) { if ($doc) {
$items[] = $doc; // Check if the document is approved (unless includePreview is true)
if ($includePreview || $doc->isApproved()) {
$items[] = $doc;
}
} }
} }
} }
@ -566,6 +619,20 @@ class CostController extends AbstractController
$doc->setMoney($acc['money']); $doc->setMoney($acc['money']);
$doc->setCode($provider->getAccountingCode($acc['bid'], 'accounting')); $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());
}
$entityManager->persist($doc); $entityManager->persist($doc);
$entityManager->flush(); $entityManager->flush();

View file

@ -42,6 +42,20 @@ class DirectHesabdariDoc extends AbstractController
$hesabdariDoc->setCode($provider->getAccountingCode($acc['bid'], 'accounting')); $hesabdariDoc->setCode($provider->getAccountingCode($acc['bid'], 'accounting'));
$hesabdariDoc->setDateSubmit(time()); $hesabdariDoc->setDateSubmit(time());
// Set approval status based on business settings
$business = $acc['bid'];
if ($business->getTwoStepApproval()) {
// Two-step approval is enabled
$hesabdariDoc->setIsPreview(true);
$hesabdariDoc->setIsApproved(false);
$hesabdariDoc->setApprovedBy(null);
} else {
// Two-step approval is disabled - auto approve
$hesabdariDoc->setIsPreview(false);
$hesabdariDoc->setIsApproved(true);
$hesabdariDoc->setApprovedBy($this->getUser());
}
//insert rows //insert rows
if (isset($prams['rows'])) { if (isset($prams['rows'])) {
if (count($prams['rows']) < 2) { if (count($prams['rows']) < 2) {
@ -355,6 +369,9 @@ class DirectHesabdariDoc extends AbstractController
'date' => $hesabdariDoc->getDate(), 'date' => $hesabdariDoc->getDate(),
'des' => $hesabdariDoc->getDes(), 'des' => $hesabdariDoc->getDes(),
'code' => $hesabdariDoc->getCode(), 'code' => $hesabdariDoc->getCode(),
'isPreview' => $hesabdariDoc->isPreview(),
'isApproved' => $hesabdariDoc->isApproved(),
'approvedBy' => $hesabdariDoc->getApprovedBy() ? $hesabdariDoc->getApprovedBy()->getFullName() : null,
'rows' => $rows 'rows' => $rows
]; ];

View file

@ -48,7 +48,7 @@ class IncomeController extends AbstractController
$yearStart = $jdate->jdate('Y/m/d', $yearStartUnix); $yearStart = $jdate->jdate('Y/m/d', $yearStartUnix);
$yearEnd = $jdate->jdate('Y/m/d', $yearEndUnix); $yearEnd = $jdate->jdate('Y/m/d', $yearEndUnix);
// کوئری پایه - جمع bs را محاسبه می‌کنیم // کوئری پایه - جمع bs را محاسبه می‌کنیم و فقط اسناد تایید شده
$qb = $entityManager->createQueryBuilder() $qb = $entityManager->createQueryBuilder()
->select('SUM(COALESCE(r.bs, 0)) as total') ->select('SUM(COALESCE(r.bs, 0)) as total')
->from('App\Entity\HesabdariDoc', 'd') ->from('App\Entity\HesabdariDoc', 'd')
@ -57,11 +57,13 @@ class IncomeController extends AbstractController
->andWhere('d.money = :money') ->andWhere('d.money = :money')
->andWhere('d.type = :type') ->andWhere('d.type = :type')
->andWhere('d.year = :year') ->andWhere('d.year = :year')
->andWhere('d.isApproved = :isApproved')
->andWhere('r.bs != 0') // فقط ردیف‌هایی که bs صفر نیست ->andWhere('r.bs != 0') // فقط ردیف‌هایی که bs صفر نیست
->setParameter('bid', $acc['bid']) ->setParameter('bid', $acc['bid'])
->setParameter('money', $acc['money']) ->setParameter('money', $acc['money'])
->setParameter('type', 'income') ->setParameter('type', 'income')
->setParameter('year', $acc['year']); ->setParameter('year', $acc['year'])
->setParameter('isApproved', true);
// درآمد امروز // درآمد امروز
$todayIncome = (clone $qb) $todayIncome = (clone $qb)
@ -123,7 +125,7 @@ class IncomeController extends AbstractController
$today = $jdate->jdate('Y/m/d', time()); $today = $jdate->jdate('Y/m/d', time());
$monthStart = $jdate->jdate('Y/m/01', time()); $monthStart = $jdate->jdate('Y/m/01', time());
// کوئری پایه // کوئری پایه - فقط اسناد تایید شده
$qb = $entityManager->createQueryBuilder() $qb = $entityManager->createQueryBuilder()
->select('t.name AS center_name, SUM(COALESCE(r.bs, 0)) AS total_income') ->select('t.name AS center_name, SUM(COALESCE(r.bs, 0)) AS total_income')
->from('App\Entity\HesabdariDoc', 'd') ->from('App\Entity\HesabdariDoc', 'd')
@ -133,13 +135,15 @@ class IncomeController extends AbstractController
->andWhere('d.money = :money') ->andWhere('d.money = :money')
->andWhere('d.type = :type') ->andWhere('d.type = :type')
->andWhere('d.year = :year') ->andWhere('d.year = :year')
->andWhere('d.isApproved = :isApproved')
->andWhere('r.bs != 0') // فقط ردیف‌هایی که bs صفر نیست ->andWhere('r.bs != 0') // فقط ردیف‌هایی که bs صفر نیست
->groupBy('t.id, t.name') ->groupBy('t.id, t.name')
->orderBy('total_income', 'DESC') ->orderBy('total_income', 'DESC')
->setParameter('bid', $acc['bid']) ->setParameter('bid', $acc['bid'])
->setParameter('money', $acc['money']) ->setParameter('money', $acc['money'])
->setParameter('type', 'income') ->setParameter('type', 'income')
->setParameter('year', $acc['year']); ->setParameter('year', $acc['year'])
->setParameter('isApproved', true);
// اعمال فیلتر تاریخ فقط برای امروز و ماه // اعمال فیلتر تاریخ فقط برای امروز و ماه
if ($period === 'today') { if ($period === 'today') {
@ -200,6 +204,7 @@ class IncomeController extends AbstractController
// Build base query // Build base query
$queryBuilder = $entityManager->createQueryBuilder() $queryBuilder = $entityManager->createQueryBuilder()
->select('DISTINCT d.id, d.dateSubmit, d.date, d.type, d.code, d.des, d.amount') ->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') ->addSelect('u.fullName as submitter')
->from('App\Entity\HesabdariDoc', 'd') ->from('App\Entity\HesabdariDoc', 'd')
->leftJoin('d.submitter', 'u') ->leftJoin('d.submitter', 'u')
@ -214,6 +219,14 @@ class IncomeController extends AbstractController
->setParameter('type', $type) ->setParameter('type', $type)
->setParameter('money', $acc['money']); ->setParameter('money', $acc['money']);
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
if (!$includePreview) {
// Default: only show approved documents
$queryBuilder->andWhere('d.isApproved = :isApproved')
->setParameter('isApproved', true);
}
// Apply filters // Apply filters
if (!empty($filters)) { if (!empty($filters)) {
// Text search // Text search
@ -310,6 +323,8 @@ class IncomeController extends AbstractController
'des' => $doc['des'], 'des' => $doc['des'],
'amount' => $doc['amount'], 'amount' => $doc['amount'],
'submitter' => $doc['submitter'], 'submitter' => $doc['submitter'],
'isPreview' => $doc['isPreview'],
'isApproved' => $doc['isApproved'],
]; ];
// Get income center details // Get income center details
@ -375,14 +390,30 @@ class IncomeController extends AbstractController
$params = json_decode($request->getContent(), true) ?? []; $params = json_decode($request->getContent(), true) ?? [];
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
// دریافت آیتم‌های انتخاب شده یا همه آیتم‌ها // دریافت آیتم‌های انتخاب شده یا همه آیتم‌ها
if (!isset($params['items'])) { if (!isset($params['items'])) {
$items = $entityManager->getRepository(HesabdariDoc::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('d')
'type' => 'income', ->from(HesabdariDoc::class, 'd')
'year' => $acc['year'], ->where('d.bid = :bid')
'money' => $acc['money'] ->andWhere('d.type = :type')
]); ->andWhere('d.year = :year')
->andWhere('d.money = :money')
->setParameter('bid', $acc['bid'])
->setParameter('type', 'income')
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
if (!$includePreview) {
// Default: only show approved documents
$query->andWhere('d.isApproved = :isApproved')
->setParameter('isApproved', true);
}
$items = $query->getQuery()->getResult();
} else { } else {
$items = []; $items = [];
foreach ($params['items'] as $param) { foreach ($params['items'] as $param) {
@ -394,7 +425,10 @@ class IncomeController extends AbstractController
'money' => $acc['money'] 'money' => $acc['money']
]); ]);
if ($doc) { if ($doc) {
$items[] = $doc; // Check if the document is approved (unless includePreview is true)
if ($includePreview || $doc->isApproved()) {
$items[] = $doc;
}
} }
} }
} }
@ -426,14 +460,30 @@ class IncomeController extends AbstractController
$params = json_decode($request->getContent(), true) ?? []; $params = json_decode($request->getContent(), true) ?? [];
// Check if includePreview parameter is provided
$includePreview = $params['includePreview'] ?? false;
// دریافت آیتم‌های انتخاب شده یا همه آیتم‌ها // دریافت آیتم‌های انتخاب شده یا همه آیتم‌ها
if (!isset($params['items'])) { if (!isset($params['items'])) {
$items = $entityManager->getRepository(HesabdariDoc::class)->findBy([ $query = $entityManager->createQueryBuilder()
'bid' => $acc['bid'], ->select('d')
'type' => 'income', ->from(HesabdariDoc::class, 'd')
'year' => $acc['year'], ->where('d.bid = :bid')
'money' => $acc['money'] ->andWhere('d.type = :type')
]); ->andWhere('d.year = :year')
->andWhere('d.money = :money')
->setParameter('bid', $acc['bid'])
->setParameter('type', 'income')
->setParameter('year', $acc['year'])
->setParameter('money', $acc['money']);
if (!$includePreview) {
// Default: only show approved documents
$query->andWhere('d.isApproved = :isApproved')
->setParameter('isApproved', true);
}
$items = $query->getQuery()->getResult();
} else { } else {
$items = []; $items = [];
foreach ($params['items'] as $param) { foreach ($params['items'] as $param) {
@ -445,7 +495,10 @@ class IncomeController extends AbstractController
'money' => $acc['money'] 'money' => $acc['money']
]); ]);
if ($doc) { if ($doc) {
$items[] = $doc; // Check if the document is approved (unless includePreview is true)
if ($includePreview || $doc->isApproved()) {
$items[] = $doc;
}
} }
} }
} }
@ -563,6 +616,20 @@ class IncomeController extends AbstractController
$doc->setMoney($acc['money']); $doc->setMoney($acc['money']);
$doc->setCode($provider->getAccountingCode($acc['bid'], 'accounting')); $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());
}
$entityManager->persist($doc); $entityManager->persist($doc);
$entityManager->flush(); $entityManager->flush();