diff --git a/.DS_Store b/.DS_Store index a820ce6..6bc49a8 100644 Binary files a/.DS_Store and b/.DS_Store differ 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 88b7b97..3043b7b 100644 Binary files a/app/Modules/Invoice/Resources/.DS_Store and b/app/Modules/Invoice/Resources/.DS_Store differ diff --git a/app/Modules/Invoice/Resources/Docs/invoice-original.xls b/app/Modules/Invoice/Resources/Docs/invoice-original.xls index 139ae31..fd920b6 100755 Binary files a/app/Modules/Invoice/Resources/Docs/invoice-original.xls and b/app/Modules/Invoice/Resources/Docs/invoice-original.xls differ diff --git a/public/write.xls b/public/write.xls index ee1eb92..92110ef 100644 Binary files a/public/write.xls and b/public/write.xls differ