diff --git a/hesabixCore/src/Controller/PersonsController.php b/hesabixCore/src/Controller/PersonsController.php index c4b1437..fd1775e 100644 --- a/hesabixCore/src/Controller/PersonsController.php +++ b/hesabixCore/src/Controller/PersonsController.php @@ -95,6 +95,7 @@ class PersonsController extends AbstractController $response['bs'] = $bs; $response['bd'] = $bd; $response['balance'] = $bs - $bd; + return $this->json($response); } @@ -499,6 +500,7 @@ class PersonsController extends AbstractController ): JsonResponse { $acc = $access->hasRole('person'); if (!$acc) { + var_dump($acc); throw $this->createAccessDeniedException(); } diff --git a/hesabixCore/src/Controller/PrintersController.php b/hesabixCore/src/Controller/PrintersController.php index ef40892..c5225e4 100644 --- a/hesabixCore/src/Controller/PrintersController.php +++ b/hesabixCore/src/Controller/PrintersController.php @@ -130,50 +130,50 @@ class PrintersController extends AbstractController $params = json_decode($content, true); } - $settings->setSellBidInfo($params['sell']['bidInfo']); - $settings->setSellTaxInfo($params['sell']['taxInfo']); - $settings->setSellDiscountInfo($params['sell']['discountInfo']); - $settings->setSellNote($params['sell']['note']); + $settings->setSellBidInfo($params['sell']['bidInfo'] ?? false); + $settings->setSellTaxInfo($params['sell']['taxInfo'] ?? false); + $settings->setSellDiscountInfo($params['sell']['discountInfo'] ?? false); + $settings->setSellNote($params['sell']['note'] ?? false); $settings->setSellNoteString($params['sell']['noteString']); - $settings->setSellPays($params['sell']['pays']); + $settings->setSellPays($params['sell']['pays'] ?? false); $settings->setSellPaper($params['sell']['paper']); - $settings->setSellBusinessStamp($params['sell']['businessStamp']); - $settings->setSellInvoiceIndex($params['sell']['invoiceIndex']); + $settings->setSellBusinessStamp($params['sell']['businessStamp'] ?? false); + $settings->setSellInvoiceIndex($params['sell']['invoiceIndex'] ?? false); if ($params['buy']['bidInfo'] == null) { $settings->setBuyBidInfo(false); } else { $settings->setBuyBidInfo(true); } - $settings->setBuyTaxInfo($params['buy']['taxInfo']); - $settings->setBuyDiscountInfo($params['buy']['discountInfo']); - $settings->setBuyNote($params['buy']['note']); + $settings->setBuyTaxInfo($params['buy']['taxInfo'] ?? false); + $settings->setBuyDiscountInfo($params['buy']['discountInfo'] ?? false); + $settings->setBuyNote($params['buy']['note'] ?? false); $settings->setBuyNoteString($params['buy']['noteString']); - $settings->setBuyPays($params['buy']['pays']); + $settings->setBuyPays($params['buy']['pays'] ?? false); $settings->setBuyPaper($params['buy']['paper']); - $settings->setRfbuyBidInfo($params['rfbuy']['bidInfo']); - $settings->setRfbuyTaxInfo($params['rfbuy']['taxInfo']); - $settings->setRfbuyDiscountInfo($params['rfbuy']['discountInfo']); - $settings->setRfbuyNote($params['rfbuy']['note']); + $settings->setRfbuyBidInfo($params['rfbuy']['bidInfo'] ?? false); + $settings->setRfbuyTaxInfo($params['rfbuy']['taxInfo'] ?? false); + $settings->setRfbuyDiscountInfo($params['rfbuy']['discountInfo'] ?? false); + $settings->setRfbuyNote($params['rfbuy']['note'] ?? false); $settings->setRfbuyNoteString($params['rfbuy']['noteString']); - $settings->setRfbuyPays($params['rfbuy']['pays']); + $settings->setRfbuyPays($params['rfbuy']['pays'] ?? false); $settings->setRfbuyPaper($params['rfbuy']['paper']); - $settings->setRfsellBidInfo($params['rfsell']['bidInfo']); - $settings->setRfsellTaxInfo($params['rfsell']['taxInfo']); - $settings->setRfsellDiscountInfo($params['rfsell']['discountInfo']); - $settings->setRfsellNote($params['rfsell']['note']); + $settings->setRfsellBidInfo($params['rfsell']['bidInfo'] ?? false); + $settings->setRfsellTaxInfo($params['rfsell']['taxInfo'] ?? false); + $settings->setRfsellDiscountInfo($params['rfsell']['discountInfo'] ?? false); + $settings->setRfsellNote($params['rfsell']['note'] ?? false); $settings->setRfsellNoteString($params['rfsell']['noteString']); - $settings->setRfsellPays($params['rfsell']['pays']); + $settings->setRfsellPays($params['rfsell']['pays'] ?? false); $settings->setRfSellPaper($params['rfsell']['paper']); $settings->setRepserviceNoteString($params['repservice']['noteString']); $settings->setRepServicePaper($params['repservice']['paper']); - $settings->setFastsellCashdeskTicket($params['fastsell']['cashdeskTicket']); - $settings->setFastsellInvoice($params['fastsell']['invoice']); - $settings->setFastsellPdf($params['fastsell']['pdf']); + $settings->setFastsellCashdeskTicket($params['fastsell']['cashdeskTicket'] ?? false); + $settings->setFastsellInvoice($params['fastsell']['invoice'] ?? false); + $settings->setFastsellPdf($params['fastsell']['pdf'] ?? false); $settings->setLeftFooter($params['global']['leftFooter']); $settings->setRightFooter($params['global']['rightFooter']); diff --git a/hesabixCore/src/Controller/SellController.php b/hesabixCore/src/Controller/SellController.php index bea236f..51a6596 100644 --- a/hesabixCore/src/Controller/SellController.php +++ b/hesabixCore/src/Controller/SellController.php @@ -926,18 +926,20 @@ class SellController extends AbstractController $sumTax = 0; $sumTotal = 0; foreach ($params['items'] as $item) { - $sumTax += $item['tax'] ?? 0; - $sumTotal += $item['total'] ?? 0; + $itemTotal = $item['total'] ?? 0; + $itemTax = $item['tax'] ?? 0; + $sumTotal += $itemTotal; + $sumTax += $itemTax; $hesabdariRow = new HesabdariRow(); $hesabdariRow->setDes($item['description'] ?? ''); $hesabdariRow->setBid($acc['bid']); $hesabdariRow->setYear($acc['year']); $hesabdariRow->setDoc($doc); - $hesabdariRow->setBs($item['total'] + ($item['tax'] ?? 0)); + $hesabdariRow->setBs($itemTotal); // فقط مبلغ کالا بدون مالیات $hesabdariRow->setBd(0); $hesabdariRow->setDiscount($item['discountAmount'] ?? 0); - $hesabdariRow->setTax($item['tax'] ?? 0); + $hesabdariRow->setTax($itemTax); $hesabdariRow->setDiscountType($item['showPercentDiscount'] ? 'percent' : 'fixed'); $hesabdariRow->setDiscountPercent($item['discountPercent'] ?? 0); @@ -1221,13 +1223,21 @@ class SellController extends AbstractController $itemDiscountPercent = $row->getDiscountPercent() ?? 0; $itemTax = $row->getTax() ?? 0; - // محاسبه تخفیف سطری - if ($itemDiscountType === 'percent') { - $itemDiscount = round(($basePrice * $itemDiscountPercent) / 100); + // محاسبه قیمت واحد و تخفیف + if ($itemDiscountType === 'percent' && $itemDiscountPercent > 0) { + // محاسبه قیمت اصلی در حالت تخفیف درصدی + $originalPrice = $basePrice / (1 - ($itemDiscountPercent / 100)); + $itemDiscount = round(($originalPrice * $itemDiscountPercent) / 100); + } else { + // محاسبه قیمت اصلی در حالت تخفیف مقداری + $originalPrice = $basePrice + $itemDiscount; } + // محاسبه قیمت واحد + $unitPrice = $row->getCommdityCount() > 0 ? $originalPrice / $row->getCommdityCount() : 0; + // محاسبه قیمت خالص (بدون مالیات) - $netPrice = $basePrice - $itemDiscount; + $netPrice = $basePrice; $totalInvoice += $netPrice; $items[] = [ @@ -1237,7 +1247,7 @@ class SellController extends AbstractController 'code' => $row->getCommodity()->getCode() ], 'count' => $row->getCommdityCount(), - 'price' => $row->getCommdityCount() > 0 ? $netPrice / $row->getCommdityCount() : 0, + 'price' => $unitPrice, 'discountPercent' => $itemDiscountPercent, 'discountAmount' => $itemDiscount, 'total' => $netPrice, @@ -1256,6 +1266,14 @@ class SellController extends AbstractController $totalDiscount = $discountAll; } + // محاسبه مبلغ نهایی با در نظر گرفتن تخفیف کلی و مالیات + $finalTotal = $totalInvoice - $totalDiscount + $transferCost; + $totalTax = 0; + foreach ($items as $item) { + $totalTax += $item['tax']; + } + $finalTotal += $totalTax; + return $this->json([ 'result' => 1, 'data' => [ @@ -1275,7 +1293,7 @@ class SellController extends AbstractController 'shippingCost' => $transferCost, 'showTotalPercentDiscount' => $discountType === 'percent', 'items' => $items, - 'finalTotal' => $doc->getAmount(), + 'finalTotal' => $finalTotal, 'payments' => $payments ] ]); diff --git a/hesabixCore/src/Service/Access.php b/hesabixCore/src/Service/Access.php index f11de14..a93cc04 100644 --- a/hesabixCore/src/Service/Access.php +++ b/hesabixCore/src/Service/Access.php @@ -69,6 +69,13 @@ class Access 'bid'=>$bid ]); } + else { + $year = $this->em->getRepository(Year::class)->findOneBy([ + 'head' => true, + 'bid'=>$bid + ]); + if (!$year) { return false; } + } if ($this->request->headers->get('activeMoney')) { $money = $this->em->getRepository(Money::class)->findOneBy([ @@ -78,6 +85,7 @@ class Access } else{ $money = $bid->getMoney(); + if (!$money) { return false; } } $accessArray = [ diff --git a/webUI/src/components/forms/Hnumberinput.vue b/webUI/src/components/forms/Hnumberinput.vue index c9a1dd4..937beae 100644 --- a/webUI/src/components/forms/Hnumberinput.vue +++ b/webUI/src/components/forms/Hnumberinput.vue @@ -3,11 +3,11 @@ v-model="inputValue" v-bind="$attrs" :class="$attrs.class" - type="number" + type="text" :rules="combinedRules" :error-messages="errorMessages" - @keydown="restrictToNumbers" @input="handleInput" + @keydown="restrictInput" dir="ltr" dense :hide-details="$attrs['hide-details'] || 'auto'" @@ -19,6 +19,8 @@