invoice done

This commit is contained in:
2024-11-12 17:26:54 +05:00
parent 3b795bb696
commit b4f043a2c3
6 changed files with 148 additions and 41 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -66,7 +66,7 @@ class HomeController extends Controller
total: 200000, total: 200000,
), ),
new InvoiceItem( new InvoiceItem(
name: 'Programma üpjünçiligini işäň taýýarlamak barada', name: 'Programma üpjünçiligini işläp taýýarlamak barada',
unit: 'ay', unit: 'ay',
quantity: 2, quantity: 2,
unit_price: 100000, unit_price: 100000,

View File

@@ -5,7 +5,9 @@ namespace App\Modules\Invoice\Actions;
use App\Modules\Invoice\Data\InvoiceExcellData; use App\Modules\Invoice\Data\InvoiceExcellData;
use App\Modules\Invoice\Data\InvoiceItem; use App\Modules\Invoice\Data\InvoiceItem;
use App\Modules\Makeable; use App\Modules\Makeable;
use App\Modules\TurkmenNumberFormatter\Repositories\TurkmenNumberFormatter;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Illuminate\Support\Str;
use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\RichText\RichText; use PhpOffice\PhpSpreadsheet\RichText\RichText;
use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Spreadsheet;
@@ -126,9 +128,10 @@ class GenerateInvoiceExcell
$items = collect($this->data->items); $items = collect($this->data->items);
$total = 0;
$itemCellNumber = 25; $itemCellNumber = 25;
$numberFormat = $this->worksheet->getStyle('E'. 25)->getNumberFormat()->getFormatCode(); $numberFormat = '#,##0.00';
$items->each(function (InvoiceItem $item, int $index) use (&$itemCellNumber, $numberFormat) { $items->each(function (InvoiceItem $item, int $index) use (&$itemCellNumber, &$total, $numberFormat) {
$this->worksheet->getCell('A'.$itemCellNumber)->setValue($index + 1); $this->worksheet->getCell('A'.$itemCellNumber)->setValue($index + 1);
$this->worksheet->getCell('B'.$itemCellNumber)->setValue($item->name); $this->worksheet->getCell('B'.$itemCellNumber)->setValue($item->name);
$this->worksheet->getCell('C'.$itemCellNumber)->setValue($item->unit); $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('H'.$itemCellNumber)->setValue($item->vat_percentage);
$this->worksheet->getCell('I'.$itemCellNumber)->setValue($item->vat_tmt); $this->worksheet->getCell('I'.$itemCellNumber)->setValue($item->vat_tmt);
$total += ($item->quantity * $item->unit_price);
$this->worksheet->setCellValue( $this->worksheet->setCellValue(
'J'.$itemCellNumber, 'J'.$itemCellNumber,
"=D{$itemCellNumber}*E{$itemCellNumber}" "=D{$itemCellNumber}*E{$itemCellNumber}"
); );
// Set font-family, alingment, and borders for all of them... // Set font-family, alingment, and borders for all of them...
$this->worksheet->getStyle('A'.$itemCellNumber.':J'.$itemCellNumber)->applyFromArray([ $this->worksheet->getStyle('A'.$itemCellNumber.':J'.$itemCellNumber)->applyFromArray($this->defaultCellStyles());
'font' => [
'bold' => false,
'size' => 10,
'name' => 'Times New Roman',
],
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER,
'vertical' => Alignment::VERTICAL_CENTER,
],
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN,
],
],
]);
// Invoice Name... // Invoice Name...
$this->worksheet->getCell('B'.$itemCellNumber)->getStyle()->applyFromArray([ $this->worksheet->getCell('B'.$itemCellNumber)->getStyle()->applyFromArray($this->cellStyleCenter());
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_LEFT,
'vertical' => Alignment::VERTICAL_CENTER,
],
]);
$this->worksheet->getCell('D'.$itemCellNumber)->getStyle()->applyFromArray([ // Bold cells...
'font' => [ $this->worksheet->getCell('D'.$itemCellNumber)->getStyle()->applyFromArray($this->cellStyleBold());
'bold' => true, $this->worksheet->getCell('E'.$itemCellNumber)->getStyle()->applyFromArray($this->cellStyleBold());
], $this->worksheet->getCell('J'.$itemCellNumber)->getStyle()->applyFromArray($this->cellStyleBold());
]);
$this->worksheet->getCell('E'.$itemCellNumber)->getStyle()->applyFromArray([
'font' => [
'bold' => true,
],
]);
$this->worksheet->getCell('J'.$itemCellNumber)->getStyle()->applyFromArray([
'font' => [
'bold' => true,
],
]);
// Invoice number format... // Invoice number format...
$this->worksheet->getStyle('E'.$itemCellNumber)->getNumberFormat()->setFormatCode($numberFormat); $this->worksheet->getStyle('E'.$itemCellNumber)->getNumberFormat()->setFormatCode($numberFormat);
@@ -193,6 +165,87 @@ class GenerateInvoiceExcell
$itemCellNumber++; $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; return 'Satyn alyjynyň '.$this->data->buyer_bank_data;
} }
/**
* Default cell styles
*
* @return array<string, array<string, array<string, string>|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<string, array<string, string|bool|int>>
*/
public function cellStyleBold(): array
{
return [
'font' => [
'bold' => true,
],
];
}
/**
* Cell style center
*
* @return array<string, array<string, string>>
*/
public function cellStyleCenter(): array
{
return [
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_LEFT,
'vertical' => Alignment::VERTICAL_CENTER,
],
];
}
} }

Binary file not shown.

Binary file not shown.