diff --git a/hesabixCore/src/Controller/CommodityController.php b/hesabixCore/src/Controller/CommodityController.php index 9400e90..ce4c24c 100644 --- a/hesabixCore/src/Controller/CommodityController.php +++ b/hesabixCore/src/Controller/CommodityController.php @@ -70,6 +70,10 @@ class CommodityController extends AbstractController $temp['minOrderCount'] = $item->getMinOrderCount(); $temp['dayLoading'] = $item->getDayLoading(); $temp['orderPoint'] = $item->getOrderPoint(); + $temp['unitData'] = [ + 'name' => $item->getUnit()->getName(), + 'floatNumber' => $item->getUnit()->getFloatNumber(), + ]; //calculate count if ($item->isKhadamat()) { $temp['count'] = 0; diff --git a/hesabixCore/src/Controller/GeneralController.php b/hesabixCore/src/Controller/GeneralController.php index 5be2a3c..775605c 100644 --- a/hesabixCore/src/Controller/GeneralController.php +++ b/hesabixCore/src/Controller/GeneralController.php @@ -67,7 +67,13 @@ class GeneralController extends AbstractController $print = $entityManager->getRepository(PrinterQueue::class)->findOneBy(['pid'=>$id]); if(!$print) throw $this->createNotFoundException(); - $pdfMGR->streamTwig2PDF($print); + if($print->isPosprint()){ + $pdfMGR->streamTwig2PDFInvoiceType($print); + } + else{ + $pdfMGR->streamTwig2PDF($print); + } + return new Response(''); } } diff --git a/hesabixCore/src/Controller/PersonsController.php b/hesabixCore/src/Controller/PersonsController.php index 8bc74dc..de61514 100644 --- a/hesabixCore/src/Controller/PersonsController.php +++ b/hesabixCore/src/Controller/PersonsController.php @@ -106,7 +106,7 @@ class PersonsController extends AbstractController if ($person) return $this->json(['result' => 2]); $person = new Person(); - $person->setCode($provider->getAccountingCode($request->headers->get('activeBid'), 'person')); + $person->setCode($provider->getAccountingCode($acc['bid'], 'person')); } else { $person = $entityManager->getRepository(Person::class)->findOneBy([ 'bid' => $acc['bid'], @@ -208,7 +208,7 @@ class PersonsController extends AbstractController } } $entityManager->flush(); - $log->insert('اشخاص', 'شخص با نام مستعار ' . $params['nikename'] . ' افزوده/ویرایش شد.', $this->getUser(), $request->headers->get('activeBid')); + $log->insert('اشخاص', 'شخص با نام مستعار ' . $params['nikename'] . ' افزوده/ویرایش شد.', $this->getUser(), $acc['bid']); return $this->json(['result' => 1]); } @@ -254,7 +254,8 @@ class PersonsController extends AbstractController #[Route('/api/person/list/limit', name: 'app_persons_list_limit')] public function app_persons_list_limit(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse { - if (!$access->hasRole('person')) + $acc = $access->hasRole('person'); + if (!$acc) throw $this->createAccessDeniedException(); $params = []; if ($content = $request->getContent()) { @@ -262,12 +263,12 @@ class PersonsController extends AbstractController } if (array_key_exists('speedAccess', $params)) { $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid'), + 'bid' => $acc['bid'], 'speedAccess' => true ]); } else { $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid') + 'bid' => $acc['bid'] ]); } $response = []; @@ -298,7 +299,8 @@ class PersonsController extends AbstractController #[Route('/api/person/list', name: 'app_persons_list')] public function app_persons_list(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): Response { - if (!$access->hasRole('person')) + $acc = $access->hasRole('person'); + if(!$acc) throw $this->createAccessDeniedException(); $params = []; if ($content = $request->getContent()) { @@ -306,12 +308,12 @@ class PersonsController extends AbstractController } if (array_key_exists('speedAccess', $params)) { $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid'), + 'bid' => $acc['bid'], 'speedAccess' => true ]); } else { $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid') + 'bid' => $acc['bid'] ]); } $response = Explore::ExplorePersons($persons, $entityManager->getRepository(PersonType::class)->findAll()); @@ -335,7 +337,8 @@ class PersonsController extends AbstractController #[Route('/api/person/list/debtors/{amount}', name: 'app_persons_list_debtors')] public function app_persons_list_debtors(string $amount, Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse { - if (!$access->hasRole('person')) + $acc = $access->hasRole('person'); + if (!$acc) throw $this->createAccessDeniedException(); $params = []; if ($content = $request->getContent()) { @@ -343,12 +346,12 @@ class PersonsController extends AbstractController } if (array_key_exists('speedAccess', $params)) { $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid'), + 'bid' => $acc['bid'], 'speedAccess' => true ]); } else { $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid') + 'bid' => $acc['bid'] ]); } @@ -383,7 +386,7 @@ class PersonsController extends AbstractController throw $this->createAccessDeniedException(); $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid') + 'bid' => $acc['bid'] ]); $response = $provider->ArrayEntity2Array($persons, 0); foreach ($persons as $key => $person) { @@ -421,7 +424,8 @@ class PersonsController extends AbstractController #[Route('/api/person/list/depositors/{amount}', name: 'app_persons_list_depoistors')] public function app_persons_list_depoistors(string $amount, Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse { - if (!$access->hasRole('person')) + $acc = $access->hasRole('person'); + if (!$acc) throw $this->createAccessDeniedException(); $params = []; if ($content = $request->getContent()) { @@ -429,12 +433,12 @@ class PersonsController extends AbstractController } if (array_key_exists('speedAccess', $params)) { $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid'), + 'bid' => $acc['bid'], 'speedAccess' => true ]); } else { $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid') + 'bid' => $acc['bid'] ]); } @@ -470,7 +474,7 @@ class PersonsController extends AbstractController throw $this->createAccessDeniedException(); $persons = $entityManager->getRepository(Person::class)->findBy([ - 'bid' => $request->headers->get('activeBid') + 'bid' => $acc['bid'] ]); $response = $provider->ArrayEntity2Array($persons, 0); foreach ($persons as $key => $person) { @@ -940,7 +944,7 @@ class PersonsController extends AbstractController //check exist before if (!$person) { $person = new Person(); - $person->setCode($provider->getAccountingCode($request->headers->get('activeBid'), 'person')); + $person->setCode($provider->getAccountingCode($acc['bid'], 'person')); $person->setNikename($item[0]); $person->setBid($acc['bid']); @@ -984,7 +988,7 @@ class PersonsController extends AbstractController } $entityManager->flush(); } - $log->insert('اشخاص', 'تعداد ' . count($data) . ' شخص به صورت گروهی وارد شد.', $this->getUser(), $request->headers->get('activeBid')); + $log->insert('اشخاص', 'تعداد ' . count($data) . ' شخص به صورت گروهی وارد شد.', $this->getUser(), $acc['bid']); return $this->json(['result' => 1]); } diff --git a/hesabixCore/src/Controller/SellController.php b/hesabixCore/src/Controller/SellController.php index c5ca027..29e9934 100644 --- a/hesabixCore/src/Controller/SellController.php +++ b/hesabixCore/src/Controller/SellController.php @@ -313,4 +313,35 @@ class SellController extends AbstractController } return $this->json($dataTemp); } + + #[Route('/api/sell/posprinter/invoice', name: 'app_sell_posprinter_invoice')] + public function app_sell_posprinter_invoice(Provider $provider, Request $request, Access $access, Log $log, EntityManagerInterface $entityManager): JsonResponse + { + $params = []; + if ($content = $request->getContent()) { + $params = json_decode($content, true); + } + + $acc = $access->hasRole('sell'); + if (!$acc) throw $this->createAccessDeniedException(); + + $doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([ + 'bid' => $acc['bid'], + 'code' => $params['code'] + ]); + if (!$doc) throw $this->createNotFoundException(); + $posPrint = false; + if(array_key_exists('posprint',$params)) $posPrint = true; + $pid = $provider->createPrint( + $acc['bid'], + $this->getUser(), + $this->renderView('pdf/posPrinters/sell.html.twig', [ + 'bid' => $acc['bid'], + 'doc'=>$doc, + 'rows'=>$doc->getHesabdariRows() + ]), + $posPrint + ); + return $this->json(['id' => $pid]); + } } diff --git a/hesabixCore/src/Entity/PrinterQueue.php b/hesabixCore/src/Entity/PrinterQueue.php index 37e1662..e7b63c9 100644 --- a/hesabixCore/src/Entity/PrinterQueue.php +++ b/hesabixCore/src/Entity/PrinterQueue.php @@ -30,6 +30,9 @@ class PrinterQueue #[ORM\ManyToOne] private ?Business $bid = null; + #[ORM\Column(nullable: true)] + private ?bool $posprint = null; + public function getId(): ?int { return $this->id; @@ -94,4 +97,16 @@ class PrinterQueue return $this; } + + public function isPosprint(): ?bool + { + return $this->posprint; + } + + public function setPosprint(?bool $posprint): static + { + $this->posprint = $posprint; + + return $this; + } } diff --git a/hesabixCore/src/Service/Access.php b/hesabixCore/src/Service/Access.php index 8dcdc91..0086dcc 100644 --- a/hesabixCore/src/Service/Access.php +++ b/hesabixCore/src/Service/Access.php @@ -1,8 +1,11 @@ user)) return false; - $bid = $this->em->getRepository(Business::class)->find($this->request->headers->get('activeBid')); - if(is_null($bid)) - return false; - $year = $this->em->getRepository(Year::class)->find($this->request->headers->get('activeYear')); - if(is_null($year)) - return false; + if ($this->request->headers->get('activeBid')) { + $bid = $this->em->getRepository(Business::class)->find($this->request->headers->get('activeBid')); + if (is_null($bid)) { + return false; + } + } + elseif($this->request->headers->get('api-key')){ + $token = $this->em->getRepository(APIToken::class)->findOneBy([ + 'token'=>$this->request->headers->get('api-key') + ]); + if(!$token) { return false; } + $bid = $token->getBid(); + } + if ($this->request->headers->get('activeYear')) { + $year = $this->em->getRepository(Year::class)->findOneBy([ + 'id' => $this->request->headers->get('activeYear'), + 'bid'=>$bid + ]); + if (!$year) { return false; } + } + elseif($this->request->headers->get('api-key')){ + $year = $this->em->getRepository(Year::class)->findOneBy([ + 'head' => true, + 'bid'=>$bid + ]); + } + $accessArray = [ 'bid'=>$bid, 'user'=>$this->user, diff --git a/hesabixCore/src/Service/Explore.php b/hesabixCore/src/Service/Explore.php index 55d1ce7..1202a39 100644 --- a/hesabixCore/src/Service/Explore.php +++ b/hesabixCore/src/Service/Explore.php @@ -172,7 +172,11 @@ class Explore 'count' => $count, 'unit' => $item->getUnit()->getName(), 'des' => $des, - 'withoutTax' => $item->isWithoutTax() + 'withoutTax' => $item->isWithoutTax(), + 'unitData' => [ + 'name' => $item->getUnit()->getName(), + 'floatNumber' => $item->getUnit()->getFloatNumber(), + ] ]; return null; } diff --git a/hesabixCore/src/Service/Provider.php b/hesabixCore/src/Service/Provider.php index bf033e6..8374271 100644 --- a/hesabixCore/src/Service/Provider.php +++ b/hesabixCore/src/Service/Provider.php @@ -147,13 +147,14 @@ class Provider return $result; } - public function createPrint(Business $bid, User $user, String $data) + public function createPrint(Business $bid, User $user, String $data,$posPrint = false) { $print = new PrinterQueue(); $print->setDateSubmit(time()); $print->setSubmitter($user); $print->setBid($bid); $print->setView($data); + $print->setPosprint($posPrint); $print->setPid($this->RandomString(128)); $this->entityManager->persist($print); $this->entityManager->flush(); diff --git a/hesabixCore/src/Service/pdfMGR.php b/hesabixCore/src/Service/pdfMGR.php index 57f32c6..152c489 100644 --- a/hesabixCore/src/Service/pdfMGR.php +++ b/hesabixCore/src/Service/pdfMGR.php @@ -46,6 +46,37 @@ class pdfMGR $mpdf->Output(); } + public function streamTwig2PDFInvoiceType(PrinterQueue $printQueue, $configs = []) + { + + $mpdf = new \Mpdf\Mpdf([ + 'mode' => 'utf-8', 'format' => [80, 600], + 'fontdata' => [ + 'vazirmatn' => [ + 'R' => 'Vazir-Regular-FD.ttf', + 'I' => 'Vazir-Regular-FD.ttf', + 'useOTL' => 0xFF, + 'useKashida' => 75, + ] + ], + 'default_font' => 'vazirmatn', + 'tempDir' => sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'mpdf', + 'setAutoTopMargin' => true, + 'autoArabic' => true, + 'margin-collapse' => 'collapse|none' + ]); + $mpdf->AddPageByArray([ + 'margin-left' => 0, + 'margin-right' => 0, + 'margin-top' => 0, + 'margin-bottom' => 0, + ]); + $mpdf->AddFontDirectory(__DIR__ . '../Fonts'); + $mpdf->WriteHTML($printQueue->getView()); + + $mpdf->Output(); + } + private function imageToBase64($path) { $path = $path; $type = pathinfo($path, PATHINFO_EXTENSION); diff --git a/hesabixCore/templates/pdf/posPrinters/sell.html.twig b/hesabixCore/templates/pdf/posPrinters/sell.html.twig new file mode 100644 index 0000000..749ad89 --- /dev/null +++ b/hesabixCore/templates/pdf/posPrinters/sell.html.twig @@ -0,0 +1,191 @@ + + + +
+ + + + +{{ bid.name }}
+تاریخ : + {{doc.date}} + | +شماره : + # + {{doc.code | number_format}} + | +
+ | + |
+ صورتحساب + | +
---|
کالا | +تعداد | +فی | +جمع | +
---|---|---|---|
{{row.commodity.name}} | +{{row.commdityCount}} | +{{(row.bs / row.commdityCount) | number_format}} | +{{row.bs | number_format}} | +
جمع فاکتور | +{{doc.amount | number_format}} | +
+ از خرید شما متشکریم +
+