diff --git a/hesabixCore/src/Controller/BusinessController.php b/hesabixCore/src/Controller/BusinessController.php index 832a0eb..4e430d6 100644 --- a/hesabixCore/src/Controller/BusinessController.php +++ b/hesabixCore/src/Controller/BusinessController.php @@ -16,6 +16,7 @@ use App\Entity\Business; use App\Entity\Hook; use App\Entity\Year; use App\Service\Access; +use App\Service\Explore; use App\Service\Jdate; use App\Service\Log; use App\Service\Provider; @@ -74,7 +75,7 @@ class BusinessController extends AbstractController $response['website'] = $bus->getWesite(); $response['email'] = $bus->getEmail(); $response['maliyatafzode'] = $bus->getMaliyatafzode(); - $response['arzmain'] = $bus->getMoney()->getName(); + $response['arzmain'] = Explore::ExploreMoney($bus->getMoney()); $response['type'] = $bus->getType(); $response['zarinpalCode'] = $bus->getZarinpalCode(); $response['smsCharge'] = $bus->getSmsCharge(); @@ -83,6 +84,12 @@ class BusinessController extends AbstractController $response['walletMatchBank'] = null; if ($bus->isWalletEnable()) $response['walletMatchBank'] = $provider->Entity2Array($bus->getWalletMatchBank(), 0); + $year = $entityManager->getRepository(Year::class)->findOneBy([ + 'bid' => $bus, + 'head'=>true + ]); + $response['year'] = Explore::ExploreYear($year); + return $this->json($response); } @@ -235,6 +242,20 @@ class BusinessController extends AbstractController $entityManager->persist($year); $entityManager->flush(); } + else{ + //not new business update business year + $year = $entityManager->getRepository(Year::class)->findOneBy([ + 'bid' => $business, + 'head'=>true + ]); + $startYearArray = explode('-', $params['year']['startShamsi']); + $year->setStart($jdate->jmktime(0, 0, 0, $startYearArray[1], $startYearArray[2], $startYearArray[0])); + $endYearArray = explode('-', $params['year']['endShamsi']); + $year->setEnd($jdate->jmktime(0, 0, 0, $endYearArray[1], $endYearArray[2], $endYearArray[0])); + $year->setLabel($params['year']['label']); + $entityManager->persist($year); + $entityManager->flush(); + } //add log to system $log->insert('تنظیمات پایه', 'اطلاعات کسب و کار ایجاد/ویرایش شد.', $this->getUser(), $business); } diff --git a/hesabixCore/src/Controller/ReportController.php b/hesabixCore/src/Controller/ReportController.php index 4dd9fc4..51de9c7 100644 --- a/hesabixCore/src/Controller/ReportController.php +++ b/hesabixCore/src/Controller/ReportController.php @@ -2,16 +2,19 @@ namespace App\Controller; -use App\Entity\HesabdariDoc; -use App\Entity\HesabdariRow; use App\Entity\Person; use App\Service\Access; use App\Service\pdfMGR; +use App\Service\Provider; +use App\Entity\HesabdariDoc; +use App\Entity\HesabdariRow; use Doctrine\ORM\EntityManagerInterface; -use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; -use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\StreamedResponse; +use Symfony\Component\HttpFoundation\BinaryFileResponse; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class ReportController extends AbstractController { @@ -62,6 +65,7 @@ class ReportController extends AbstractController foreach ($result as $item) { $temp = [ 'id' => $item->getCommodity()->getId(), + 'rowId' => $item->getId(), 'code' => $item->getCommodity()->getCode(), 'khadamat' => $item->getCommodity()->isKhadamat(), 'name' => $item->getCommodity()->getName(), @@ -86,4 +90,57 @@ class ReportController extends AbstractController } return $this->json($response); } + + #[Route('/api/report/person/buysell/export/excel', name: 'app_report_person_buysell_export_excell')] + public function app_report_person_buysell_export_excell(Provider $provider, Access $access, Request $request, EntityManagerInterface $entityManagerInterface): BinaryFileResponse | JsonResponse | StreamedResponse + { + $acc = $access->hasRole('reports'); + if (!$acc) + throw $this->createAccessDeniedException(); + $params = []; + if ($content = $request->getContent()) { + $params = json_decode($content, true); + } + + $items = []; + foreach ($params['items'] as $param) { + $prs = $entityManagerInterface->getRepository(HesabdariRow::class)->findOneBy([ + 'id' => $param['rowId'], + 'bid' => $acc['bid'] + ]); + if ($prs) + $items[] = $prs; + } + + $response = []; + foreach ($items as $item) { + $temp = [ + 'id' => $item->getCommodity()->getId(), + 'code' => $item->getCommodity()->getCode(), + 'khadamat' => $item->getCommodity()->isKhadamat(), + 'name' => $item->getCommodity()->getName(), + 'unit' => $item->getCommodity()->getUnit()->getName(), + 'count' => $item->getCommdityCount(), + 'date' => $item->getDoc()->getDate(), + 'docCode' => $item->getDoc()->getCode(), + 'type' => $item->getDoc()->getType() + ]; + if ($item->getDoc()->getType() == 'buy') { + $temp['priceAll'] = $item->getBd(); + } elseif ($item->getDoc()->getType() == 'sell') { + $temp['priceAll'] = $item->getBs(); + } + if ($temp['count'] != 0) { + $temp['priceOne'] = $temp['priceAll'] / $temp['count']; + $temp['priceAll'] = number_format($temp['priceAll']); + $temp['priceOne'] = number_format($temp['priceOne']); + $temp['count'] = number_format($temp['count']); + $response[] = $temp; + } + } + $labels = [ + 'کد حسابداری' + ]; + return new BinaryFileResponse($provider->createExcellFromArray($response)); + } } diff --git a/hesabixCore/src/Controller/SupportController.php b/hesabixCore/src/Controller/SupportController.php index 34e571b..cc7a950 100644 --- a/hesabixCore/src/Controller/SupportController.php +++ b/hesabixCore/src/Controller/SupportController.php @@ -21,36 +21,36 @@ use Symfony\Component\Serializer\SerializerInterface; class SupportController extends AbstractController { #[Route('/api/admin/support/list', name: 'app_admin_support_list')] - public function app_admin_support_list(Provider $provider,Jdate $jdate,EntityManagerInterface $entityManager): JsonResponse + public function app_admin_support_list(Provider $provider, Jdate $jdate, EntityManagerInterface $entityManager): JsonResponse { - $items = $entityManager->getRepository(Support::class)->findBy(['main' => 0],['id'=>'DESC']); - foreach ($items as $item){ - $item->setDateSubmit($jdate->jdate('Y/n/d H:i',$item->getDateSubmit())); + $items = $entityManager->getRepository(Support::class)->findBy(['main' => 0], ['id' => 'DESC']); + foreach ($items as $item) { + $item->setDateSubmit($jdate->jdate('Y/n/d H:i', $item->getDateSubmit())); } - return $this->json($provider->ArrayEntity2Array($items,1)); + return $this->json($provider->ArrayEntity2Array($items, 1)); } #[Route('/api/admin/support/view/{id}', name: 'app_admin_support_view')] - public function app_admin_support_view(Jdate $jdate, EntityManagerInterface $entityManager,string $id = ''): JsonResponse + public function app_admin_support_view(Jdate $jdate, EntityManagerInterface $entityManager, string $id = ''): JsonResponse { $item = $entityManager->getRepository(Support::class)->find($id); - if(!$item) throw $this->createNotFoundException(); - $replays = $entityManager->getRepository(Support::class)->findBy(['main'=>$item->getId()]); - foreach ($replays as $replay){ - $replay->setDateSubmit($jdate->jdate('Y/n/d H:i',$replay->getDateSubmit())); + if (!$item) throw $this->createNotFoundException(); + $replays = $entityManager->getRepository(Support::class)->findBy(['main' => $item->getId()]); + foreach ($replays as $replay) { + $replay->setDateSubmit($jdate->jdate('Y/n/d H:i', $replay->getDateSubmit())); $replay->setTitle($replay->getSubmitter()->getFullname()); - if($replay->getSubmitter() == $this->getUser()) + if ($replay->getSubmitter() == $this->getUser()) $replay->setState(1); else $replay->setState(0); } - $item->setDateSubmit($jdate->jdate('Y/n/d H:i',$item->getDateSubmit())); + $item->setDateSubmit($jdate->jdate('Y/n/d H:i', $item->getDateSubmit())); return $this->json([ - 'item'=> $item, - 'replays'=> $replays + 'item' => $item, + 'replays' => $replays ]); } #[Route('/api/admin/support/mod/{id}', name: 'app_admin_support_mod')] - public function app_admin_support_mod(registryMGR $registryMGR, SMS $SMS,Request $request, EntityManagerInterface $entityManager,Notification $notifi,string $id = ''): JsonResponse + public function app_admin_support_mod(registryMGR $registryMGR, SMS $SMS, Request $request, EntityManagerInterface $entityManager, Notification $notifi, string $id = ''): JsonResponse { $params = []; if ($content = $request->getContent()) { @@ -58,8 +58,8 @@ class SupportController extends AbstractController } $item = $entityManager->getRepository(Support::class)->find($id); - if(!$item) $this->createNotFoundException(); - if(array_key_exists('body',$params)){ + if (!$item) $this->createNotFoundException(); + if (array_key_exists('body', $params)) { $support = new Support(); $support->setDateSubmit(time()); $support->setTitle('0'); @@ -73,52 +73,54 @@ class SupportController extends AbstractController $entityManager->persist($support); $entityManager->flush(); //send sms to customer - if($item->getSubmitter()->getMobile()){ + if ($item->getSubmitter()->getMobile()) { $SMS->send( [$item->getId()], - $registryMGR->get('sms','ticketReplay'), + $registryMGR->get('sms', 'ticketReplay'), $item->getSubmitter()->getMobile() ); } //send notification to user $settings = $entityManager->getRepository(Settings::class)->findAll()[0]; $url = $settings->getAppSite() . '/profile/support-view/' . $item->getId(); - $notifi->insert("به درخواست پشتیبانی پاسخ داده شد",$url,null,$item->getSubmitter()); + $notifi->insert("به درخواست پشتیبانی پاسخ داده شد", $url, null, $item->getSubmitter()); return $this->json([ - 'error'=> 0, - 'message'=> 'successful' + 'error' => 0, + 'message' => 'successful' ]); } return $this->json([ - 'error'=> 999, - 'message'=> 'تمام موارد لازم را وارد کنید.' + 'error' => 999, + 'message' => 'تمام موارد لازم را وارد کنید.' ]); } #[Route('/api/support/list', name: 'app_support_list')] - public function app_support_list(Jdate $jdate,EntityManagerInterface $entityManager): JsonResponse + public function app_support_list(Jdate $jdate, EntityManagerInterface $entityManager): JsonResponse { - $items = $entityManager->getRepository(Support::class)->findBy([ - 'submitter'=>$this->getUser(), - 'main'=>0 - ], - [ - 'id'=>'DESC' - ]); - foreach ($items as $item){ - $item->setDateSubmit($jdate->jdate('Y/n/d H:i',$item->getDateSubmit())); + $items = $entityManager->getRepository(Support::class)->findBy( + [ + 'submitter' => $this->getUser(), + 'main' => 0 + ], + [ + 'id' => 'DESC' + ] + ); + foreach ($items as $item) { + $item->setDateSubmit($jdate->jdate('Y/n/d H:i', $item->getDateSubmit())); } return $this->json($items); } #[Route('/api/support/mod/{id}', name: 'app_support_mod')] - public function app_support_mod(registryMGR $registryMGR,SMS $SMS,Request $request, EntityManagerInterface $entityManager,string $id = ''): JsonResponse + public function app_support_mod(registryMGR $registryMGR, SMS $SMS, Request $request, EntityManagerInterface $entityManager, string $id = ''): JsonResponse { $params = []; if ($content = $request->getContent()) { $params = json_decode($content, true); } - if($id == ''){ - if(array_key_exists('title',$params) && array_key_exists('body',$params)){ + if ($id == '') { + if (array_key_exists('title', $params) && array_key_exists('body', $params)) { $item = new Support(); $item->setBody($params['body']); $item->setTitle($params['title']); @@ -131,22 +133,21 @@ class SupportController extends AbstractController //send sms to manager $SMS->send( [$item->getId()], - $registryMGR->get('sms','ticketRec'), - $registryMGR->get('ticket','managerMobile') + $registryMGR->get('sms', 'ticketRec'), + $registryMGR->get('ticket', 'managerMobile') ); - + return $this->json([ - 'error'=> 0, - 'message'=> 'ok', - 'url'=>$item->getId() + 'error' => 0, + 'message' => 'ok', + 'url' => $item->getId() ]); } - } - else{ - if(array_key_exists('body',$params) ){ + } else { + if (array_key_exists('body', $params)) { $item = new Support(); $upper = $entityManager->getRepository(Support::class)->find($id); - if($upper) + if ($upper) $item->setMain($upper->getid()); $item->setBody($params['body']); $item->setTitle($upper->getTitle()); @@ -159,47 +160,44 @@ class SupportController extends AbstractController $entityManager->persist($upper); $entityManager->flush(); //send sms to manager - $admins = $entityManager->getRepository(User::class)->findByRole('ROLE_ADMIN'); - foreach($admins as $admin){ - $SMS->send( - [$item->getId()], - $registryMGR->get('sms','ticketRec'), - $admin->getMobile() - ); - } + $SMS->send( + [$item->getId()], + $registryMGR->get('sms', 'ticketRec'), + $registryMGR->get('ticket', 'managerMobile') + ); return $this->json([ - 'error'=> 0, - 'message'=> 'ok', - 'url'=>$item->getId() + 'error' => 0, + 'message' => 'ok', + 'url' => $item->getId() ]); } } return $this->json([ - 'error'=> 999, - 'message'=> 'تمام موارد لازم را وارد کنید.' + 'error' => 999, + 'message' => 'تمام موارد لازم را وارد کنید.' ]); } #[Route('/api/support/view/{id}', name: 'app_support_view')] - public function app_support_view(Jdate $jdate, EntityManagerInterface $entityManager,string $id = ''): JsonResponse + public function app_support_view(Jdate $jdate, EntityManagerInterface $entityManager, string $id = ''): JsonResponse { $item = $entityManager->getRepository(Support::class)->find($id); - if(!$item) throw $this->createNotFoundException(); - if($item->getSubmitter() != $this->getUser()) throw $this->createAccessDeniedException(); - $replays = $entityManager->getRepository(Support::class)->findBy(['main'=>$item->getId()]); - foreach ($replays as $replay){ - $replay->setDateSubmit($jdate->jdate('Y/n/d H:i',$replay->getDateSubmit())); + if (!$item) throw $this->createNotFoundException(); + if ($item->getSubmitter() != $this->getUser()) throw $this->createAccessDeniedException(); + $replays = $entityManager->getRepository(Support::class)->findBy(['main' => $item->getId()]); + foreach ($replays as $replay) { + $replay->setDateSubmit($jdate->jdate('Y/n/d H:i', $replay->getDateSubmit())); $replay->setTitle($replay->getSubmitter()->getFullname()); - if($replay->getSubmitter() == $this->getUser()) + if ($replay->getSubmitter() == $this->getUser()) $replay->setState(1); else $replay->setState(0); } - $item->setDateSubmit($jdate->jdate('Y/n/d H:i',$item->getDateSubmit())); + $item->setDateSubmit($jdate->jdate('Y/n/d H:i', $item->getDateSubmit())); return $this->json([ - 'item'=> $item, - 'replays'=> $replays + 'item' => $item, + 'replays' => $replays ]); } } diff --git a/hesabixCore/src/Service/Explore.php b/hesabixCore/src/Service/Explore.php index a0c9a51..c737c40 100644 --- a/hesabixCore/src/Service/Explore.php +++ b/hesabixCore/src/Service/Explore.php @@ -251,13 +251,16 @@ class Explore } public static function ExploreYear(Year $year) { + $jdate = new Jdate(); return [ 'id' => $year->getId(), 'label' => $year->getLabel(), 'head' => $year->isHead(), 'start' => $year->getStart(), 'end' => $year->getEnd(), - 'now' => time() + 'now' => time(), + 'startShamsi'=> $jdate->jdate('Y-n-d',$year->getStart()), + 'endShamsi'=> $jdate->jdate('Y-n-d',$year->getEnd()), ]; } diff --git a/hesabixCore/src/Service/Provider.php b/hesabixCore/src/Service/Provider.php index 24aec1c..7d3514d 100644 --- a/hesabixCore/src/Service/Provider.php +++ b/hesabixCore/src/Service/Provider.php @@ -170,6 +170,23 @@ class Provider $writer->save($filePath); return $filePath; } + + /** + * @throws Exception + */ + public function createExcellFromArray(array $entities,array $headers = null){ + + $spreadsheet = new Spreadsheet(); + $activeWorksheet = $spreadsheet->getActiveSheet(); + $activeWorksheet->fromArray($entities,null,'A1'); + $activeWorksheet->setRightToLeft(true); + $activeWorksheet->getHeaderFooter()->setOddHeader('&CHeader of the Document'); + $writer = new Xlsx($spreadsheet); + $filePath = __DIR__ . '/../../var/'.$this->RandomString(12).'.xlsx'; + $writer->save($filePath); + return $filePath; + } + /** * function to generate random strings * @param int $length number of characters in the generated string