From b4f043a2c3c846058c9d2ef6bd463e4e4b244a0d Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Tue, 12 Nov 2024 17:26:54 +0500 Subject: [PATCH] invoice done --- .DS_Store | Bin 8196 -> 8196 bytes app/Http/Controllers/HomeController.php | 2 +- .../Invoice/Actions/GenerateInvoiceExcell.php | 187 ++++++++++++++---- app/Modules/Invoice/Resources/.DS_Store | Bin 6148 -> 6148 bytes .../Resources/Docs/invoice-original.xls | Bin 34816 -> 34816 bytes public/write.xls | Bin 12800 -> 14336 bytes 6 files changed, 148 insertions(+), 41 deletions(-) diff --git a/.DS_Store b/.DS_Store index a820ce67819c55fb547f669abcdbbf3ea0725883..6bc49a8a73c0c098b4419d2ddd38643e9a559691 100644 GIT binary patch delta 66 zcmZp1XmQvuO@Q6V!cs@U$Y^q%kj&%>!YZ5Z3aBwo{vlL~A+b-0hiUT_83X2t4LqCK ICH}Gl0Jx|W_y7O^ delta 71 zcmV-N0J#5zK!iZBmJkRyGBqq9GcYidfD%8m-4G@L0k@M75pf9@dwViDG%O%BlYbH% d0g02G5+4DIv%C@y0<+T`F$0l+46_Fq{RjT#6|(>U diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 8485903..419eb1f 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -66,7 +66,7 @@ class HomeController extends Controller total: 200000, ), new InvoiceItem( - name: 'Programma üpjünçiligini işäň taýýarlamak barada', + name: 'Programma üpjünçiligini işläp taýýarlamak barada', unit: 'ay', quantity: 2, unit_price: 100000, diff --git a/app/Modules/Invoice/Actions/GenerateInvoiceExcell.php b/app/Modules/Invoice/Actions/GenerateInvoiceExcell.php index 7e45890..4e58715 100644 --- a/app/Modules/Invoice/Actions/GenerateInvoiceExcell.php +++ b/app/Modules/Invoice/Actions/GenerateInvoiceExcell.php @@ -5,7 +5,9 @@ namespace App\Modules\Invoice\Actions; use App\Modules\Invoice\Data\InvoiceExcellData; use App\Modules\Invoice\Data\InvoiceItem; use App\Modules\Makeable; +use App\Modules\TurkmenNumberFormatter\Repositories\TurkmenNumberFormatter; use Illuminate\Support\Carbon; +use Illuminate\Support\Str; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\RichText\RichText; use PhpOffice\PhpSpreadsheet\Spreadsheet; @@ -126,9 +128,10 @@ class GenerateInvoiceExcell $items = collect($this->data->items); + $total = 0; $itemCellNumber = 25; - $numberFormat = $this->worksheet->getStyle('E'. 25)->getNumberFormat()->getFormatCode(); - $items->each(function (InvoiceItem $item, int $index) use (&$itemCellNumber, $numberFormat) { + $numberFormat = '#,##0.00'; + $items->each(function (InvoiceItem $item, int $index) use (&$itemCellNumber, &$total, $numberFormat) { $this->worksheet->getCell('A'.$itemCellNumber)->setValue($index + 1); $this->worksheet->getCell('B'.$itemCellNumber)->setValue($item->name); $this->worksheet->getCell('C'.$itemCellNumber)->setValue($item->unit); @@ -139,53 +142,22 @@ class GenerateInvoiceExcell $this->worksheet->getCell('H'.$itemCellNumber)->setValue($item->vat_percentage); $this->worksheet->getCell('I'.$itemCellNumber)->setValue($item->vat_tmt); + $total += ($item->quantity * $item->unit_price); $this->worksheet->setCellValue( 'J'.$itemCellNumber, "=D{$itemCellNumber}*E{$itemCellNumber}" ); // Set font-family, alingment, and borders for all of them... - $this->worksheet->getStyle('A'.$itemCellNumber.':J'.$itemCellNumber)->applyFromArray([ - 'font' => [ - 'bold' => false, - 'size' => 10, - 'name' => 'Times New Roman', - ], - 'alignment' => [ - 'horizontal' => Alignment::HORIZONTAL_CENTER, - 'vertical' => Alignment::VERTICAL_CENTER, - ], - 'borders' => [ - 'allBorders' => [ - 'borderStyle' => Border::BORDER_THIN, - ], - ], - ]); + $this->worksheet->getStyle('A'.$itemCellNumber.':J'.$itemCellNumber)->applyFromArray($this->defaultCellStyles()); // Invoice Name... - $this->worksheet->getCell('B'.$itemCellNumber)->getStyle()->applyFromArray([ - 'alignment' => [ - 'horizontal' => Alignment::HORIZONTAL_LEFT, - 'vertical' => Alignment::VERTICAL_CENTER, - ], - ]); + $this->worksheet->getCell('B'.$itemCellNumber)->getStyle()->applyFromArray($this->cellStyleCenter()); - $this->worksheet->getCell('D'.$itemCellNumber)->getStyle()->applyFromArray([ - 'font' => [ - 'bold' => true, - ], - ]); - - $this->worksheet->getCell('E'.$itemCellNumber)->getStyle()->applyFromArray([ - 'font' => [ - 'bold' => true, - ], - ]); - $this->worksheet->getCell('J'.$itemCellNumber)->getStyle()->applyFromArray([ - 'font' => [ - 'bold' => true, - ], - ]); + // Bold cells... + $this->worksheet->getCell('D'.$itemCellNumber)->getStyle()->applyFromArray($this->cellStyleBold()); + $this->worksheet->getCell('E'.$itemCellNumber)->getStyle()->applyFromArray($this->cellStyleBold()); + $this->worksheet->getCell('J'.$itemCellNumber)->getStyle()->applyFromArray($this->cellStyleBold()); // Invoice number format... $this->worksheet->getStyle('E'.$itemCellNumber)->getNumberFormat()->setFormatCode($numberFormat); @@ -193,6 +165,87 @@ class GenerateInvoiceExcell $itemCellNumber++; }); + + // Set default styles... + $this->worksheet->getStyle('A'.$itemCellNumber.':J'.$itemCellNumber)->applyFromArray($this->defaultCellStyles()); + + $this->worksheet->getCell('B'.$itemCellNumber)->setValue('Jemi tölenmeli:')->getStyle()->applyFromArray([ + 'font' => ['size' => 11], 'alignment' => ['horizontal' => Alignment::HORIZONTAL_RIGHT], + ]); + + $lastItemCellNumber = $itemCellNumber - 1; + $this->worksheet->getCell('J'.$itemCellNumber)->getStyle()->applyFromArray($this->cellStyleBold()); + $this->worksheet->getStyle('J'.$itemCellNumber)->getNumberFormat()->setFormatCode($numberFormat); + $this->worksheet->setCellValue('J'.$itemCellNumber, "=SUM(J25:J{$lastItemCellNumber})"); + + // Next cell.. + $itemCellNumber++; + + $this->worksheet->setCellValue('A'.$itemCellNumber, 'Harydyň (işleriň, hyzmatlaryň) jemi bahasy'); + $this->worksheet->getStyle('A'.$itemCellNumber)->applyFromArray(['font' => ['size' => 9, 'name' => 'Times New Roman']]); + + $this->worksheet->getStyle('C'.$itemCellNumber)->applyFromArray(['font' => ['bold' => true, 'size' => 11, 'name' => 'Times New Roman']]); + $this->worksheet->setCellValue('C'.$itemCellNumber, Str::ucfirst(TurkmenNumberFormatter::format(floatval($total)))); + $this->worksheet->mergeCells('C'.$itemCellNumber.':J'.$itemCellNumber); + + // Leave empty one + $itemCellNumber++; + $itemCellNumber++; + + $this->worksheet->setCellValue('B'.$itemCellNumber, $this->data->seller_firm_name); + $this->worksheet->getStyle('A'.$itemCellNumber)->applyFromArray(['borders' => ['bottom' => ['borderStyle' => Border::BORDER_THIN]]]); + $this->worksheet->getStyle('B'.$itemCellNumber)->applyFromArray([ + 'font' => ['bold' => true, 'size' => 11, 'name' => 'Times New Roman'], + 'borders' => [ + 'bottom' => [ + 'borderStyle' => Border::BORDER_THIN, + ], + ], + ]); + + $this->worksheet->getStyle('G'.$itemCellNumber.':I'.$itemCellNumber)->applyFromArray(['borders' => ['bottom' => ['borderStyle' => Border::BORDER_THIN]]]); + $itemCellNumber++; + + $this->worksheet->setCellValue('A'.$itemCellNumber, '(görnüşli tarapyň ýolbaşçysynyň ýa-da hususy telekeçiniň F.A.A.A.)'); + $this->worksheet->setCellValue('H'.$itemCellNumber, '(goly)'); + + $this->worksheet->getStyle('A'.$itemCellNumber)->applyFromArray(['font' => ['bold' => false, 'size' => 9, 'name' => 'Times New Roman']]); + $this->worksheet->getStyle('H'.$itemCellNumber)->applyFromArray(['font' => ['bold' => false, 'size' => 9, 'name' => 'Times New Roman']]); + + $itemCellNumber++; + $itemCellNumber++; + $itemCellNumber++; + $itemCellNumber++; + + $this->worksheet->setCellValue( + 'A'.$itemCellNumber, + sprintf( + '__________%s____________________________manat_______0________ teňňe möçberde iberilen haryt doly alyndy.', + Str::before(Str::ucfirst(moneyFormatInTurkmenLetter(floatval($total))), ' manat') + ) + ); + + $this->worksheet->getStyle('A'.$itemCellNumber)->applyFromArray(['font' => ['bold' => false, 'size' => 9, 'name' => 'Times New Roman']]); + + $itemCellNumber++; + $itemCellNumber++; + + $this->worksheet->setCellValue( + 'A'.$itemCellNumber, + '_______________________________________________________ ___________________ ' + ); + $this->worksheet->getStyle('A'.$itemCellNumber)->applyFromArray(['font' => ['bold' => false, 'size' => 9, 'name' => 'Times New Roman']]); + + $itemCellNumber++; + + $this->worksheet->setCellValue( + 'A'.$itemCellNumber, + ' Satyn alyjynyň ýa-da kärhananyň ynam bildiren tarapynyň F.A.A A (goly)' + ); + $this->worksheet->getStyle('A'.$itemCellNumber)->applyFromArray([ + 'font' => ['bold' => false, 'size' => 8, 'name' => 'Times New Roman'], + 'alignment' => ['vertical' => Alignment::VERTICAL_TOP] + ]); } /** @@ -330,4 +383,58 @@ class GenerateInvoiceExcell { return 'Satyn alyjynyň '.$this->data->buyer_bank_data; } + + /** + * Default cell styles + * + * @return array|bool|int|string>> + */ + public function defaultCellStyles(): array + { + return [ + 'font' => [ + 'bold' => false, + 'size' => 10, + 'name' => 'Times New Roman', + ], + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_CENTER, + 'vertical' => Alignment::VERTICAL_CENTER, + ], + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => Border::BORDER_THIN, + ], + ], + ]; + } + + /** + * Cell bold style + * + * @return array> + */ + public function cellStyleBold(): array + { + return [ + 'font' => [ + 'bold' => true, + ], + ]; + } + + /** + * Cell style center + * + * @return array> + */ + public function cellStyleCenter(): array + { + return [ + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_LEFT, + 'vertical' => Alignment::VERTICAL_CENTER, + ], + ]; + } } diff --git a/app/Modules/Invoice/Resources/.DS_Store b/app/Modules/Invoice/Resources/.DS_Store index 88b7b975e31fbfe53cf61d6e95e7694e9be5e517..3043b7be762567feeed7110f75569ebfa009d493 100644 GIT binary patch delta 21 ccmZoMXffC@gNeh)+(Jje$kJl-0;UvE07pUw82|tP delta 21 ccmZoMXffC@gNeh$&`3wY*ur4*0;UvE07jz*2LJ#7 diff --git a/app/Modules/Invoice/Resources/Docs/invoice-original.xls b/app/Modules/Invoice/Resources/Docs/invoice-original.xls index 139ae31fec0e43b1eedf07fd22cd1d79ec1b31a7..fd920b6f6dabec158e8240174c2688d1939d090c 100755 GIT binary patch delta 1053 zcmaKr%TE(g6vn@q>0??7rKQxN#Xdkqd?YGv+=v=6F40J%mR2wt6E%QZQL)&mAS#xE zxhpoBxN~7b9Jd(#6C^H-tX!xYO?2hLX#D0uA~rH7leynHzkBYPbMMvXWPMIv7)=<} z#DXNMX^*I+!XlH>#HZ9-F_!d;gVaORk5Y%XMF2>yG@x-{J+D$lHG-nLqRsC^6fZ2D zGnUft8>JEB*)F9$Gz6J}aRlI^^#z8->%MMj*pM>IN@xa~8GMNd+)yxs8S(W*d#Hj= z$LpcDf{I9=>?&1}w7eQrNT}AB55M4tkIXD$4(TH~TVpoqCsRhsA^jxFHD;4_CRqZ1 zo~3H2TLTT4DB2t{um)LAM(1zaIqOO4HRj`bF*K0LKpf4sZmnX2Ga<+c|LZ{`nOkB$ z+ZlX-jSe3&OA&9f@t!i)JHGI$@_KQMcAOnF``AQAN2^0N{ZrnE*xA3mbOT<-O}d%! zG49KXl5yMG2|K3X4w;phi!rmKcFc{tJQ_S(vWHnbxaau2xDT^MHlIKN+(=ER4AJyKM}2Rqt6;|%vU2qjIH zE#;~lDf7&#*L}njM8u21BjW5}ui-xZMOL3?lfQQ_ON#Nm;0-=6Tnvj`pK27QD$*Zm Cy2u&; delta 1025 zcmaKrPfQa*6vn^VZMWM}C@n1(Dy0P#@lT@Q#S5qj#se{!h(T!!7(8eQf>!(ow$f4r zQA^&z5DzBajfVA#i6?I+8V|;vJa~gdPsSLHZ+8bnLu6kzneTnSoq6+iCR|JOpHhQh!Uyl`;zddKKZZ>JbD#F>)npTTZ6Un2-7RLo$8*3LHjb7+-W zjk7uAD1NRzQ$VAY4MT@OVNisnMJ)M-AvAI3Y+vWGmV%eJxoq-3Y)Aj$zjAL zTCoM{HBmH4(z^v&$xNQNZEin|N+$Ej(_$(_-Th5_3)mqYA3OisY&A0(TIz50-NjDH z`^`1!eSf5D8VxcRD669fr#bq#Rc6C#n8{u&AXR(L1trR2?VYPw) zdn&G2JR3jsBN>g{v1Y5|^#^z@`?S~b zr5MCDI*Ox2DM>7}$mD94GbbR_Ctjhq)17ck`BbCMyER_l$!)*QZI5$aoG zS9=&@5(Ug-8WJV!VUFGc{Q|9NTtu&W&@eha6U5v=4pWrdSYk2aIu~XcxXkVQ_@STk zd}f3sNsd%G(zY_8kIslW4v|!)SVz-7Zjs;P%8G3=d29=mj8M;G6Dtg!E4%^>au}=7%mX*U)4+pgSo93yWve2v%)mMkSXN+F23Clcg$}aV ztWjSx$*~G;)Sxqt1nf%1uMH`T3KzTyR@DEH`XCQGc?Alo`tt1`o!`DN<^izsgNwWK`SSp>UaBoS8w8fsu)g zL56_^&f;Vcocz_md2)cE2s4O%+R#E+nt>B&JR^fN5OQ)pWthbvJXy?W=H~52ri`0R WDj1nwsZFjjy|p>PYysoM1Rem8gDd3#