invoice done
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
app/Modules/Invoice/Resources/.DS_Store
vendored
BIN
app/Modules/Invoice/Resources/.DS_Store
vendored
Binary file not shown.
Binary file not shown.
BIN
public/write.xls
BIN
public/write.xls
Binary file not shown.
Reference in New Issue
Block a user