bug fix in storeroom controller for remove tickets

This commit is contained in:
babak alizadeh 2024-06-08 11:52:35 +03:30
parent 2276754e39
commit bae07712e9

View file

@ -24,68 +24,67 @@ use Symfony\Component\Routing\Annotation\Route;
class StoreroomController extends AbstractController class StoreroomController extends AbstractController
{ {
#[Route('/api/storeroom/list/{type}', name: 'app_storeroom_list')] #[Route('/api/storeroom/list/{type}', name: 'app_storeroom_list')]
public function app_storeroom_list(Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager,String $type='active'): JsonResponse public function app_storeroom_list(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager, String $type = 'active'): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
if($type == 'active') if ($type == 'active')
$items = $entityManager->getRepository(Storeroom::class)->findBy([ $items = $entityManager->getRepository(Storeroom::class)->findBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'active'=>true 'active' => true
]); ]);
else else
$items = $entityManager->getRepository(Storeroom::class)->findBy([ $items = $entityManager->getRepository(Storeroom::class)->findBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
]); ]);
return $this->json($provider->ArrayEntity2Array($items,0)); return $this->json($provider->ArrayEntity2Array($items, 0));
} }
#[Route('/api/storeroom/mod/{code}', name: 'app_storeroom_mod')] #[Route('/api/storeroom/mod/{code}', name: 'app_storeroom_mod')]
public function app_storeroom_mod(Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager,$code = 0): JsonResponse public function app_storeroom_mod(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager, $code = 0): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
$params = []; $params = [];
if ($content = $request->getContent()) { if ($content = $request->getContent()) {
$params = json_decode($content, true); $params = json_decode($content, true);
} }
if(!array_key_exists('name',$params)) if (!array_key_exists('name', $params))
return $this->json(['result'=>-1]); return $this->json(['result' => -1]);
if(count_chars(trim($params['name'])) == 0) if (count_chars(trim($params['name'])) == 0)
return $this->json(['result'=>3]); return $this->json(['result' => 3]);
if($code == 0){ if ($code == 0) {
$data = $entityManager->getRepository(Storeroom::class)->findOneBy([ $data = $entityManager->getRepository(Storeroom::class)->findOneBy([
'name'=>$params['name'], 'name' => $params['name'],
'bid'=>$acc['bid'] 'bid' => $acc['bid']
]); ]);
//check exist before //check exist before
if($data) if ($data)
return $this->json(['result'=>2]); return $this->json(['result' => 2]);
$data = new Storeroom(); $data = new Storeroom();
$data->setBid($acc['bid']); $data->setBid($acc['bid']);
} } else {
else{
$data = $entityManager->getRepository(Storeroom::class)->findOneBy([ $data = $entityManager->getRepository(Storeroom::class)->findOneBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'id'=>$code 'id' => $code
]); ]);
if(!$data) if (!$data)
throw $this->createNotFoundException(); throw $this->createNotFoundException();
} }
$data->setName($params['name']); $data->setName($params['name']);
$data->setAdr($params['adr']); $data->setAdr($params['adr']);
$data->setManager($params['manager']); $data->setManager($params['manager']);
$data->setTel($params['tel']); $data->setTel($params['tel']);
if($params['active'] == 'true') if ($params['active'] == 'true')
$data->setActive(true); $data->setActive(true);
else else
$data->setActive(false); $data->setActive(false);
$entityManager->persist($data); $entityManager->persist($data);
$entityManager->flush(); $entityManager->flush();
$log->insert('انبارداری','انبار ' . $params['name'] . ' افزوده/ویرایش شد.',$this->getUser(),$acc['bid']); $log->insert('انبارداری', 'انبار ' . $params['name'] . ' افزوده/ویرایش شد.', $this->getUser(), $acc['bid']);
return $this->json(['result' => 1]); return $this->json(['result' => 1]);
} }
@ -93,90 +92,91 @@ class StoreroomController extends AbstractController
* @throws ReflectionException * @throws ReflectionException
*/ */
#[Route('/api/storeroom/info/{code}', name: 'app_storeroom_info')] #[Route('/api/storeroom/info/{code}', name: 'app_storeroom_info')]
public function app_storeroom_info($code,Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse public function app_storeroom_info($code, Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
$data = $entityManager->getRepository(Storeroom::class)->findOneBy([ $data = $entityManager->getRepository(Storeroom::class)->findOneBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'id'=>$code 'id' => $code
]); ]);
return $this->json($provider->Entity2Array($data,0)); return $this->json($provider->Entity2Array($data, 0));
} }
/** /**
* @throws ReflectionException * @throws ReflectionException
*/ */
#[Route('/api/storeroom/docs/get', name: 'app_storeroom_get_docs')] #[Route('/api/storeroom/docs/get', name: 'app_storeroom_get_docs')]
public function app_storeroom_get_docs(Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse public function app_storeroom_get_docs(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
$buys = $entityManager->getRepository(HesabdariDoc::class)->findBy([ $buys = $entityManager->getRepository(HesabdariDoc::class)->findBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'type'=>'buy' 'type' => 'buy'
]); ]);
$buysForExport =[]; $buysForExport = [];
foreach ($buys as $buy){ foreach ($buys as $buy) {
$temp = $provider->Entity2Array($buy,0); $temp = $provider->Entity2Array($buy, 0);
$person = $this->getPerson($buy); $person = $this->getPerson($buy);
$temp['person'] = $provider->Entity2ArrayJustIncludes($person,['getCode','getNikename','getDes']); $temp['person'] = $provider->Entity2ArrayJustIncludes($person, ['getCode', 'getNikename', 'getDes']);
$temp['person']['des'] =' # ' . $person->getCode() . ' ' . $person->getNikename(); $temp['person']['des'] = ' # ' . $person->getCode() . ' ' . $person->getNikename();
$temp['commodities'] = $this->getCommodities($buy,$provider); $temp['commodities'] = $this->getCommodities($buy, $provider);
//check storeroom exist //check storeroom exist
$this->calcStoreRemaining($temp,$buy,$entityManager); $this->calcStoreRemaining($temp, $buy, $entityManager);
$temp['des'] = 'فاکتور خرید شماره # ' . $buy->getCode(); $temp['des'] = 'فاکتور خرید شماره # ' . $buy->getCode();
if(array_key_exists('storeroomComplete',$temp)) if (array_key_exists('storeroomComplete', $temp))
if(!$temp['storeroomComplete']){ if (!$temp['storeroomComplete']) {
$buysForExport[] = $temp; $buysForExport[] = $temp;
} }
} }
$sells = $entityManager->getRepository(HesabdariDoc::class)->findBy([ $sells = $entityManager->getRepository(HesabdariDoc::class)->findBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'type'=>'sell' 'type' => 'sell'
]); ]);
$sellsForExport =[]; $sellsForExport = [];
foreach ($sells as $sell){ foreach ($sells as $sell) {
$temp = $provider->Entity2Array($sell,0); $temp = $provider->Entity2Array($sell, 0);
$person = $this->getPerson($sell); $person = $this->getPerson($sell);
$temp['person'] = $provider->Entity2ArrayJustIncludes($person,['getCode','getNikename','getDes']); $temp['person'] = $provider->Entity2ArrayJustIncludes($person, ['getCode', 'getNikename', 'getDes']);
$temp['person']['des'] =' # ' . $person->getCode() . ' ' . $person->getNikename(); $temp['person']['des'] = ' # ' . $person->getCode() . ' ' . $person->getNikename();
$temp['commodities'] = $this->getCommodities($sell,$provider); $temp['commodities'] = $this->getCommodities($sell, $provider);
//check storeroom exist //check storeroom exist
$this->calcStoreRemaining($temp,$sell,$entityManager); $this->calcStoreRemaining($temp, $sell, $entityManager);
$temp['des'] = 'فاکتور فروش شماره # ' . $sell->getCode(); $temp['des'] = 'فاکتور فروش شماره # ' . $sell->getCode();
if(array_key_exists('storeroomComplete',$temp)) if (array_key_exists('storeroomComplete', $temp))
if(!$temp['storeroomComplete']){ if (!$temp['storeroomComplete']) {
$sellsForExport[] = $temp; $sellsForExport[] = $temp;
} }
} }
return $this->json([ return $this->json([
'buys'=> $buysForExport, 'buys' => $buysForExport,
'sells'=> $sellsForExport 'sells' => $sellsForExport
]); ]);
} }
private function getPerson(HesabdariDoc $doc): Person | bool{ private function getPerson(HesabdariDoc $doc): Person | bool
foreach ($doc->getHesabdariRows() as $row){ {
if($row->getPerson()) foreach ($doc->getHesabdariRows() as $row) {
if ($row->getPerson())
return $row->getPerson(); return $row->getPerson();
} }
return false; return false;
} }
private function getCommodities(HesabdariDoc $doc,Provider $provider): array{ private function getCommodities(HesabdariDoc $doc, Provider $provider): array
{
$res = []; $res = [];
foreach ($doc->getHesabdariRows() as $row){ foreach ($doc->getHesabdariRows() as $row) {
if($row->getCommodity()){ if ($row->getCommodity()) {
$arrayRow = $provider->Entity2ArrayJustIncludes($row->getCommodity(),['getCode','getName']); $arrayRow = $provider->Entity2ArrayJustIncludes($row->getCommodity(), ['getCode', 'getName']);
$arrayRow['commdityCount'] = $row->getCommdityCount(); $arrayRow['commdityCount'] = $row->getCommdityCount();
$res[] = $arrayRow; $res[] = $arrayRow;
} }
} }
return $res; return $res;
} }
@ -184,152 +184,152 @@ class StoreroomController extends AbstractController
* @throws ReflectionException * @throws ReflectionException
*/ */
#[Route('/api/storeroom/doc/get/info/{id}', name: 'app_storeroom_get_doc_info')] #[Route('/api/storeroom/doc/get/info/{id}', name: 'app_storeroom_get_doc_info')]
public function app_storeroom_get_doc_info(String $id,Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse public function app_storeroom_get_doc_info(String $id, Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
$doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([ $doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'code'=>$id 'code' => $id
]); ]);
if(!$doc) if (!$doc)
throw $this->createNotFoundException('سند یافت نشد.'); throw $this->createNotFoundException('سند یافت نشد.');
if($doc->getType() == 'buy') if ($doc->getType() == 'buy')
$doc->setDes('فاکتور خرید شماره #' . $doc->getCode()); $doc->setDes('فاکتور خرید شماره #' . $doc->getCode());
elseif($doc->getType() == 'sell') elseif ($doc->getType() == 'sell')
$doc->setDes('فاکتور فروش شماره #' . $doc->getCode()); $doc->setDes('فاکتور فروش شماره #' . $doc->getCode());
//find person //find person
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy([ $rows = $entityManager->getRepository(HesabdariRow::class)->findBy([
'doc'=>$doc 'doc' => $doc
]); ]);
$person = null; $person = null;
$commodities = []; $commodities = [];
foreach ($rows as $row){ foreach ($rows as $row) {
if($row->getPerson()){ if ($row->getPerson()) {
$person = $row->getPerson(); $person = $row->getPerson();
break; break;
} } elseif ($row->getCommodity()) {
elseif ($row->getCommodity()){ if (!$row->getCommodity()->isKhadamat())
if(!$row->getCommodity()->isKhadamat())
$commodities[] = $row; $commodities[] = $row;
} }
} }
foreach ($commodities as $commodity){ foreach ($commodities as $commodity) {
if (is_string($commodity->getCommodity()->getUnit())) {
$commodity->getCommodity()->setUnit($commodity->getCommodity()->getUnit());
} else {
$commodity->getCommodity()->setUnit($commodity->getCommodity()->getUnit()->getName()); $commodity->getCommodity()->setUnit($commodity->getCommodity()->getUnit()->getName());
} }
$res = $provider->Entity2Array($doc,0); }
$res['person'] = $provider->Entity2Array($person,0); $res = $provider->Entity2Array($doc, 0);
$res['person']['des'] =' # ' . $person->getCode() . ' ' . $person->getNikename(); $res['person'] = $provider->Entity2Array($person, 0);
$res['commodities'] = $provider->ArrayEntity2Array($commodities,1,['doc','bid','year']); $res['person']['des'] = ' # ' . $person->getCode() . ' ' . $person->getNikename();
$res['commodities'] = $provider->ArrayEntity2Array($commodities, 1, ['doc', 'bid', 'year']);
//calculate rows data //calculate rows data
$this->calcStoreRemaining($res,$doc,$entityManager); $this->calcStoreRemaining($res, $doc, $entityManager);
return $this->json($res); return $this->json($res);
} }
private function calcStoreRemaining(array &$ref,HesabdariDoc $doc,EntityManagerInterface $entityManager){ private function calcStoreRemaining(array &$ref, HesabdariDoc $doc, EntityManagerInterface $entityManager)
$tickets = $entityManager->getRepository(StoreroomTicket::class)->findBy(['doc'=>$doc]); {
$tickets = $entityManager->getRepository(StoreroomTicket::class)->findBy(['doc' => $doc]);
if(count($tickets) == 0){ if (count($tickets) == 0) {
$ref['storeroomComplete'] = false; $ref['storeroomComplete'] = false;
foreach ($ref['commodities'] as $key => $commodity){ foreach ($ref['commodities'] as $key => $commodity) {
$ref['commodities'][$key]['countBefore'] = 0; $ref['commodities'][$key]['countBefore'] = 0;
$ref['commodities'][$key]['hesabdariCount'] = $commodity['commdityCount']; $ref['commodities'][$key]['hesabdariCount'] = $commodity['commdityCount'];
$ref['commodities'][$key]['remain'] = $ref['commodities'][$key]['hesabdariCount']; $ref['commodities'][$key]['remain'] = $ref['commodities'][$key]['hesabdariCount'];
} }
} } else {
else{
$ref['storeroomComplete'] = true; $ref['storeroomComplete'] = true;
foreach ($tickets as $ticket){ foreach ($tickets as $ticket) {
$rows = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket'=>$ticket]); $rows = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket' => $ticket]);
foreach ($rows as $key => $row){ foreach ($rows as $key => $row) {
$comRows = $entityManager->getRepository(HesabdariRow::class)->findBy(['doc'=>$doc]); $comRows = $entityManager->getRepository(HesabdariRow::class)->findBy(['doc' => $doc]);
foreach ($comRows as $comRow){ foreach ($comRows as $comRow) {
if($comRow->getCommodity()){ if ($comRow->getCommodity()) {
if($comRow->getCommodity() === $row->getCommodity()){ if ($comRow->getCommodity() === $row->getCommodity()) {
if(array_key_exists('countBefore',$ref['commodities'][$key])){ if (array_key_exists('countBefore', $ref['commodities'][$key])) {
$ref['commodities'][$key]['countBefore'] += $row->getCount(); $ref['commodities'][$key]['countBefore'] += $row->getCount();
$ref['commodities'][$key]['hesabdariCount'] = $comRow->getCommdityCount(); $ref['commodities'][$key]['hesabdariCount'] = $comRow->getCommdityCount();
} } else {
else{
$ref['commodities'][$key]['countBefore'] = $row->getCount(); $ref['commodities'][$key]['countBefore'] = $row->getCount();
$ref['commodities'][$key]['hesabdariCount'] = $comRow->getCommdityCount(); $ref['commodities'][$key]['hesabdariCount'] = $comRow->getCommdityCount();
} }
} }
} }
} }
$ref['commodities'][$key]['remain'] = $ref['commodities'][$key]['hesabdariCount'] - $ref['commodities'][$key]['countBefore']; $ref['commodities'][$key]['remain'] = $ref['commodities'][$key]['hesabdariCount'] - $ref['commodities'][$key]['countBefore'];
$ref['commodities'][$key]['commodityComplete'] = true; $ref['commodities'][$key]['commodityComplete'] = true;
if($ref['commodities'][$key]['remain'] != 0){ if ($ref['commodities'][$key]['remain'] != 0) {
$ref['commodities'][$key]['commodityComplete'] = false; $ref['commodities'][$key]['commodityComplete'] = false;
} }
} }
} }
foreach ($tickets as $ticket){ foreach ($tickets as $ticket) {
$rows = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket'=>$ticket]); $rows = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket' => $ticket]);
$ref['storeroomComplete'] = true; $ref['storeroomComplete'] = true;
foreach ($rows as $key => $row){ foreach ($rows as $key => $row) {
if(!$ref['commodities'][$key]['commodityComplete']){ if (!$ref['commodities'][$key]['commodityComplete']) {
$ref['storeroomComplete'] = false; $ref['storeroomComplete'] = false;
} }
} }
} }
} }
} }
#[Route('/api/storeroom/transfertype/list', name: 'app_storeroom_get_transfertype_list')] #[Route('/api/storeroom/transfertype/list', name: 'app_storeroom_get_transfertype_list')]
public function app_storeroom_get_transfertype_list(Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse public function app_storeroom_get_transfertype_list(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
return $this->json($entityManager->getRepository(StoreroomTransferType::class)->findAll()); return $this->json($entityManager->getRepository(StoreroomTransferType::class)->findAll());
} }
#[Route('/api/storeroom/ticket/insert', name: 'app_storeroom_ticket_insert')] #[Route('/api/storeroom/ticket/insert', name: 'app_storeroom_ticket_insert')]
public function app_storeroom_ticket_insert(Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse public function app_storeroom_ticket_insert(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
$params = []; $params = [];
if ($content = $request->getContent()) { if ($content = $request->getContent()) {
$params = json_decode($content, true); $params = json_decode($content, true);
} }
//check parameters exist //check parameters exist
if((!array_key_exists('ticket',$params)) || (!array_key_exists('items',$params)) || (!array_key_exists('doc',$params))) if ((!array_key_exists('ticket', $params)) || (!array_key_exists('items', $params)) || (!array_key_exists('doc', $params)))
$this->createNotFoundException(); $this->createNotFoundException();
//going to save //going to save
$doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([ $doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([
'id'=>$params['doc']['id'], 'id' => $params['doc']['id'],
'bid'=>$acc['bid'] 'bid' => $acc['bid']
]); ]);
if(!$doc) if (!$doc)
throw $this->createNotFoundException('سند یافت نشد'); throw $this->createNotFoundException('سند یافت نشد');
if($doc->getBid()->getId() != $acc['bid']->getId()) if ($doc->getBid()->getId() != $acc['bid']->getId())
throw $this->createAccessDeniedException('دسترسی به این سند را ندارید.'); throw $this->createAccessDeniedException('دسترسی به این سند را ندارید.');
//find transfer type //find transfer type
if(!array_key_exists('transferType',$params['ticket'])) if (!array_key_exists('transferType', $params['ticket']))
throw $this->createNotFoundException('نوع انتقال یافت نشد'); throw $this->createNotFoundException('نوع انتقال یافت نشد');
$transferType = $entityManager->getRepository(StoreroomTransferType::class)->find($params['ticket']['transferType']['id']); $transferType = $entityManager->getRepository(StoreroomTransferType::class)->find($params['ticket']['transferType']['id']);
if(!$transferType) if (!$transferType)
throw $this->createNotFoundException('نوع انتقال یافت نشد'); throw $this->createNotFoundException('نوع انتقال یافت نشد');
//find storeroom //find storeroom
if(!array_key_exists('store',$params['ticket'])) if (!array_key_exists('store', $params['ticket']))
throw $this->createNotFoundException('انبار یافت نشد'); throw $this->createNotFoundException('انبار یافت نشد');
$storeroom = $entityManager->getRepository(Storeroom::class)->find($params['ticket']['store']['id']); $storeroom = $entityManager->getRepository(Storeroom::class)->find($params['ticket']['store']['id']);
if(!$storeroom) if (!$storeroom)
throw $this->createNotFoundException('انبار یافت نشد'); throw $this->createNotFoundException('انبار یافت نشد');
elseif ($storeroom->getBid()->getId() != $acc['bid']->getId()) elseif ($storeroom->getBid()->getId() != $acc['bid']->getId())
throw $this->createAccessDeniedException('دسترسی به این انبار ممکن نیست!'); throw $this->createAccessDeniedException('دسترسی به این انبار ممکن نیست!');
//find person //find person
if(!array_key_exists('person',$params['ticket'])) if (!array_key_exists('person', $params['ticket']))
throw $this->createNotFoundException('طرف حساب یافت نشد'); throw $this->createNotFoundException('طرف حساب یافت نشد');
$person = $entityManager->getRepository(Person::class)->find($params['ticket']['person']['id']); $person = $entityManager->getRepository(Person::class)->find($params['ticket']['person']['id']);
if(!$person) if (!$person)
throw $this->createNotFoundException('طرف حساب یافت نشد'); throw $this->createNotFoundException('طرف حساب یافت نشد');
elseif ($person->getBid()->getId() != $acc['bid']->getId()) elseif ($person->getBid()->getId() != $acc['bid']->getId())
throw $this->createAccessDeniedException('دسترسی به این طرف حساب ممکن نیست!'); throw $this->createAccessDeniedException('دسترسی به این طرف حساب ممکن نیست!');
@ -342,7 +342,7 @@ class StoreroomController extends AbstractController
$ticket->setDoc($doc); $ticket->setDoc($doc);
$ticket->setTransfer($params['ticket']['transfer']); $ticket->setTransfer($params['ticket']['transfer']);
$ticket->setYear($acc['year']); $ticket->setYear($acc['year']);
$ticket->setCode($provider->getAccountingCode($acc['bid'],'storeroom')); $ticket->setCode($provider->getAccountingCode($acc['bid'], 'storeroom'));
$ticket->setReceiver($params['ticket']['receiver']); $ticket->setReceiver($params['ticket']['receiver']);
$ticket->setTransferType($transferType); $ticket->setTransferType($transferType);
$ticket->setReferral($params['ticket']['referral']); $ticket->setReferral($params['ticket']['referral']);
@ -356,20 +356,20 @@ class StoreroomController extends AbstractController
//going to save rows //going to save rows
$docRows = $entityManager->getRepository(HesabdariRow::class)->findBy([ $docRows = $entityManager->getRepository(HesabdariRow::class)->findBy([
'doc'=>$doc 'doc' => $doc
]); ]);
foreach ($params['items'] as $item){ foreach ($params['items'] as $item) {
$row = $entityManager->getRepository(HesabdariRow::class)->findOneBy([ $row = $entityManager->getRepository(HesabdariRow::class)->findOneBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'doc'=>$doc, 'doc' => $doc,
'id'=>$item['id'], 'id' => $item['id'],
]); ]);
if(!$row) if (!$row)
throw $this->createNotFoundException('کالا یافت نشد!'); throw $this->createNotFoundException('کالا یافت نشد!');
if(!$row->getCommodity()) if (!$row->getCommodity())
throw $this->createNotFoundException('کالا یافت نشد!'); throw $this->createNotFoundException('کالا یافت نشد!');
//check row count not upper ticket count //check row count not upper ticket count
if($row->getCommdityCount() < $item['ticketCount']) if ($row->getCommdityCount() < $item['ticketCount'])
throw $this->createNotFoundException('تعداد کالای اضافه شده بیشتر از تعداد کالا در فاکتور است.'); throw $this->createNotFoundException('تعداد کالای اضافه شده بیشتر از تعداد کالا در فاکتور است.');
$ticketItem = new StoreroomItem(); $ticketItem = new StoreroomItem();
$ticketItem->setBid($acc['bid']); $ticketItem->setBid($acc['bid']);
@ -384,24 +384,24 @@ class StoreroomController extends AbstractController
} }
$entityManager->flush(); $entityManager->flush();
//save logs //save logs
$log->insert('انبارداری','حواله انبار با شماره '. $ticket->getCode() . ' اضافه / ویرایش شد.',$this->getUser(),$acc['bid']); $log->insert('انبارداری', 'حواله انبار با شماره ' . $ticket->getCode() . ' اضافه / ویرایش شد.', $this->getUser(), $acc['bid']);
return $this->json([ return $this->json([
'result'=>0 'result' => 0
]); ]);
} }
#[Route('/api/storeroom/tickets/list/{type}', name: 'app_storeroom_tickets_list')] #[Route('/api/storeroom/tickets/list/{type}', name: 'app_storeroom_tickets_list')]
public function app_storeroom_tickets_list(String $type,Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse public function app_storeroom_tickets_list(String $type, Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
$tickets = $entityManager->getRepository(StoreroomTicket::class)->findBy([ $tickets = $entityManager->getRepository(StoreroomTicket::class)->findBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'year'=>$acc['year'], 'year' => $acc['year'],
'type'=>$type 'type' => $type
]); ]);
return $this->json($provider->ArrayEntity2ArrayJustIncludes($tickets,[ return $this->json($provider->ArrayEntity2ArrayJustIncludes($tickets, [
'getDes', 'getDes',
'getCode', 'getCode',
'getDate', 'getDate',
@ -413,88 +413,111 @@ class StoreroomController extends AbstractController
} }
#[Route('/api/storeroom/tickets/info/{code}', name: 'app_storeroom_ticket_view')] #[Route('/api/storeroom/tickets/info/{code}', name: 'app_storeroom_ticket_view')]
public function app_storeroom_ticket_view(String $code,Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse public function app_storeroom_ticket_view(String $code, Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
$ticket = $entityManager->getRepository(StoreroomTicket::class)->findOneBy([ $ticket = $entityManager->getRepository(StoreroomTicket::class)->findOneBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'code'=>$code 'code' => $code
]); ]);
if(!$ticket) if (!$ticket)
throw $this->createNotFoundException('حواله یافت نشد.'); throw $this->createNotFoundException('حواله یافت نشد.');
//get items //get items
$items = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket'=>$ticket]); $items = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket' => $ticket]);
$res = []; $res = [];
$res['ticket']=$provider->Entity2ArrayJustIncludes($ticket,['getStoreroom','getManager','getDate','getSubmitDate','getDes','getReceiver','getTransfer','getCode','getType','getReferral','getTypeString'],2); $res['ticket'] = $provider->Entity2ArrayJustIncludes($ticket, ['getStoreroom', 'getManager', 'getDate', 'getSubmitDate', 'getDes', 'getReceiver', 'getTransfer', 'getCode', 'getType', 'getReferral', 'getTypeString'], 2);
$res['transferType']=$provider->Entity2ArrayJustIncludes($ticket->getTransferType(),['getName'],0); $res['transferType'] = $provider->Entity2ArrayJustIncludes($ticket->getTransferType(), ['getName'], 0);
$res['person']=$provider->Entity2ArrayJustIncludes($ticket->getPerson(),['getKeshvar','getOstan','getShahr','getAddress','getNikename','getCodeeghtesadi','getPostalcode','getName','getTel','getSabt'],0); $res['person'] = $provider->Entity2ArrayJustIncludes($ticket->getPerson(), ['getKeshvar', 'getOstan', 'getShahr', 'getAddress', 'getNikename', 'getCodeeghtesadi', 'getPostalcode', 'getName', 'getTel', 'getSabt'], 0);
//get rows //get rows
$rows = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket'=>$ticket]); $rows = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket' => $ticket]);
$res['commodities'] = $provider->ArrayEntity2ArrayJustIncludes($rows,['getId','getDes','getCode','getName','getCommodity','getUnit','getCount'],2); $res['commodities'] = $provider->ArrayEntity2ArrayJustIncludes($rows, ['getId', 'getDes', 'getCode', 'getName', 'getCommodity', 'getUnit', 'getCount'], 2);
//calculate rows data //calculate rows data
$this->calcStoreRemaining($res,$ticket->getDoc(),$entityManager); $this->calcStoreRemaining($res, $ticket->getDoc(), $entityManager);
return $this->json($res); return $this->json($res);
} }
#[Route('/api/storeroom/commodity/list/{sid}', name: 'app_storeroom_commodity_list')] #[Route('/api/storeroom/commodity/list/{sid}', name: 'app_storeroom_commodity_list')]
public function app_storeroom_commodity_list(String $sid,Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse public function app_storeroom_commodity_list(String $sid, Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
$store = $entityManager->getRepository(Storeroom::class)->find($sid); $store = $entityManager->getRepository(Storeroom::class)->find($sid);
if(!$store) if (!$store)
throw $this->createNotFoundException('انبار یافت نشد'); throw $this->createNotFoundException('انبار یافت نشد');
if($store->getBid() != $acc['bid']) if ($store->getBid() != $acc['bid'])
throw $this->createAccessDeniedException('شما دسترسی به این انبار را ندارید.'); throw $this->createAccessDeniedException('شما دسترسی به این انبار را ندارید.');
$rows = $entityManager->getRepository(StoreroomItem::class)->findBy([ $rows = $entityManager->getRepository(StoreroomItem::class)->findBy([
'Storeroom'=>$store 'Storeroom' => $store
]); ]);
$commodities = $entityManager->getRepository(Commodity::class)->findBy([ $commodities = $entityManager->getRepository(Commodity::class)->findBy([
'bid'=>$acc['bid'], 'bid' => $acc['bid'],
'khadamat'=>false 'khadamat' => false
]); ]);
$items = []; $items = [];
foreach ($commodities as $commodity){ foreach ($commodities as $commodity) {
$temp =[]; $temp = [];
$temp['commodity']=$provider->Entity2ArrayJustIncludes($commodity,['getUnit','getCode','getName','getCat','getOrderPoint']); $temp['commodity'] = $provider->Entity2ArrayJustIncludes($commodity, ['getUnit', 'getCode', 'getName', 'getCat', 'getOrderPoint']);
$temp['input'] = 0; $temp['input'] = 0;
$temp['output'] = 0; $temp['output'] = 0;
foreach ($rows as $row){ foreach ($rows as $row) {
if($row->getCommodity()->getId() == $commodity->getId()){ if ($row->getCommodity()->getId() == $commodity->getId()) {
if($row->getType() == 'output') if ($row->getType() == 'output')
$temp['output'] += $row->getCount(); $temp['output'] += $row->getCount();
elseif($row->getType() == 'input') elseif ($row->getType() == 'input')
$temp['input'] += $row->getCount(); $temp['input'] += $row->getCount();
} }
} }
$temp['existCount'] = $temp['input'] - $temp['output']; $temp['existCount'] = $temp['input'] - $temp['output'];
$items[] = $temp; $items[] = $temp;
} }
return $this->json($items); return $this->json($this->getCommodityCountExistInStoreroom($commodities, $rows, $provider));
}
public function getCommodityCountExistInStoreroom(array $commodities, array $rows, Provider $provider)
{
$items = [];
foreach ($commodities as $commodity) {
$temp = [];
$temp['commodity'] = $provider->Entity2ArrayJustIncludes($commodity, ['getUnit', 'getCode', 'getName', 'getCat', 'getOrderPoint']);
$temp['input'] = 0;
$temp['output'] = 0;
foreach ($rows as $row) {
if ($row->getCommodity()->getId() == $commodity->getId()) {
if ($row->getType() == 'output')
$temp['output'] += $row->getCount();
elseif ($row->getType() == 'input')
$temp['input'] += $row->getCount();
}
}
$temp['existCount'] = $temp['input'] - $temp['output'];
$items[] = $temp;
}
return $items;
} }
#[Route('/api/storeroom/ticket/remove/{id}', name: 'app_storeroom_ticket_remove')] #[Route('/api/storeroom/ticket/remove/{id}', name: 'app_storeroom_ticket_remove')]
public function app_storeroom_ticket_remove(String $id,Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse public function app_storeroom_ticket_remove(String $id, Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse
{ {
$acc = $access->hasRole('store'); $acc = $access->hasRole('store');
if(!$acc) if (!$acc)
throw $this->createAccessDeniedException(); throw $this->createAccessDeniedException();
$ticket = $entityManager->getRepository(StoreroomTicket::class)->findOneBy(['code'=>$id]); $ticket = $entityManager->getRepository(StoreroomTicket::class)->findOneBy([
if(!$ticket) 'code' => $id,
'bid' => $acc['bid']
]);
if (!$ticket)
throw $this->createNotFoundException('حواله یافت نشد'); throw $this->createNotFoundException('حواله یافت نشد');
$items = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket'=>$ticket]); $items = $entityManager->getRepository(StoreroomItem::class)->findBy(['ticket' => $ticket]);
foreach ($items as $item) foreach ($items as $item)
$entityManager->remove($item); $entityManager->remove($item);
$entityManager->remove($ticket); $entityManager->remove($ticket);
$entityManager->flush(); $entityManager->flush();
//save logs //save logs
$log->insert('انبارداری','حواله انبار با شماره '. $ticket->getCode() . ' حذف شد.',$this->getUser(),$acc['bid']); $log->insert('انبارداری', 'حواله انبار با شماره ' . $ticket->getCode() . ' حذف شد.', $this->getUser(), $acc['bid']);
return $this->json([ return $this->json([
'result'=>0 'result' => 0
]); ]);
} }
} }