invoice exporter to a seperete class

This commit is contained in:
2024-11-10 00:23:01 +05:00
parent 7ae9123eca
commit 93092f2f14
10 changed files with 244 additions and 91 deletions

View File

@@ -0,0 +1,205 @@
<?php
namespace App\Modules\Invoice\Actions;
use App\Modules\Invoice\Data\InvoiceExcellData;
use App\Modules\Makeable;
use Illuminate\Support\Carbon;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\RichText\RichText;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class GenerateInvoiceExcell
{
use Makeable;
/** Template file */
protected string $templateFile;
/** Excell Spreadsheet */
protected Spreadsheet $spreadsheet;
/** Active worksheet */
protected Worksheet $worksheet;
/** Invoice data */
protected InvoiceExcellData $data;
/**
* Let's generate an invoice excell file...
*/
public function __construct()
{
// For turkmen date format...
Carbon::setLocale('tk');
}
/**
* Run conversion process
*/
public function handle(): self
{
$this->setSpreadsheetFile();
$this->setWorksheetFile();
$this->fillTheCells();
return $this;
}
/**
* Save the invoice
*/
public function save(): void
{
$writer = IOFactory::createWriter($this->spreadsheet, 'Xls');
$writer->save('write.xls');
}
/**
* Set template file path
*/
public function setTemplateFile(string $file): self
{
$this->templateFile = $file;
return $this;
}
/**
* Set data
*/
public function setData(InvoiceExcellData $data): self
{
$this->data = $data;
return $this;
}
/**
* Load template to a new spreadsheet
*/
protected function setSpreadsheetFile(): void
{
$this->spreadsheet = IOFactory::load($this->templateFile);
}
/**
* Set working spreadsheet
*/
protected function setWorksheetFile(): void
{
$this->worksheet = $this->spreadsheet->getActiveSheet();
}
/**
* Fill the cells
*/
protected function fillTheCells(): void
{
// Hasap faktura nomeri...
$this->worksheet->getCell('C6')->setValue($this->hasapFakturaNomeri());
// Sene...
$this->worksheet->getCell('C7')->setValue($this->sene());
// Satyjy...
$this->worksheet->getCell('A9')->setValue($this->satyjy());
// Satyjy şahsy salgyt belgi...
$this->worksheet->getCell('A11')->setValue($this->satyjySalgytBelgi());
// Satyjy banky...
$this->worksheet->getCell('A12')->setValue($this->satyjyBanky());
// Satyjy bank maglumatlary...
$this->worksheet->getCell('A13')->setValue(sprintf('şäherde (etrapda) %s BAB %s bankyň kor.hasap %s', 'Aşgabat', '390101601', '21101934110100700005000'));
// Satyn alyjy...
$this->worksheet->getCell('A16')->setValue(sprintf('Satyn alyjy: %s', 'Türkmenistanyň „Türkmenbaşy“ paýdarlar täjirçilik banky'));
// Satyn alyjy salgy...
$this->worksheet->getCell('A18')->setValue(sprintf('744000 Aşgabat ş., Çandebil şaýoly köç., 121,'));
// Satyn alyjy banky...
$this->worksheet->getCell('A19')->setValue(sprintf('Alyjynyň bankynyň ady %s %s', 'Türkmenistanyň Merkezi Banky', 'Aşgabat ş.'));
// Satyn alyjy banky maglumatlary...
$this->worksheet->getCell('A20')->setValue(sprintf('Satyn alyjynyň şahsy salgyt belgisi %s, MFO %s, Hasap № %s', '101301000408', '390101304', '21101934110100300007000'));
}
/**
* Hasap faktura nomeri
*/
public function hasapFakturaNomeri(): string
{
return 'Hasap-faktura № '.$this->data->number;
}
/**
* Sene
*/
public function sene(): string
{
$date = $this->data->date;
$year = $date->year;
$day = $date->format('d');
$month_as_string = $date->translatedFormat('F');
return sprintf('%s ýylyň «%s» %s', $year, $day, $month_as_string);
}
/**
* Satyjy
*/
public function satyjy(): string
{
return sprintf('Satyjy: %s %s', $this->data->seller_firm_type, $this->data->seller_firm_name);
}
/**
* Satyjy salgyt belgisi
*/
public function satyjySalgytBelgi(): RichText
{
$satyjy_salgyt_belgi = new RichText;
$satyjy_salgyt_belgi
->createTextRun('Satyjynyň şahsy salgyt belgisi: ')
->getFont()
->setName('Times New Roman')
->setSize(10);
$satyjy_salgyt_belgi
->createTextRun($this->data->seller_ssb)
->getFont()
->setBold(true)
->setName('Times New Roman')
->setSize(10);
return $satyjy_salgyt_belgi;
}
/**
* Satyjy bank maglumatlary
*/
public function satyjyBanky(): RichText
{
$satyjy_banky = new RichText;
$satyjy_banky
->createTextRun(sprintf('Satyjynyň bankynyň ady %s, hasap № ', $this->data->seller_bank_name))
->getFont()
->setName('Times New Roman')
->setSize(10);
$satyjy_banky
->createTextRun($this->data->seller_bank_number)
->getFont()
->setBold(true)
->setName('Times New Roman')
->setSize(10);
return $satyjy_banky;
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Modules\Invoice\Data;
use Carbon\Carbon;
class InvoiceExcellData
{
public function __construct(
public int|string $number,
public Carbon $date,
public string $seller_firm_type,
public string $seller_firm_name,
public string $seller_ssb,
public string $seller_bank_name,
public string $seller_bank_number,
) {}
}

View File

@@ -1,8 +1,6 @@
<?php <?php
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration return new class extends Migration
{ {

View File

@@ -2,10 +2,6 @@
namespace App\Modules\Invoice\Models; namespace App\Modules\Invoice\Models;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Invoice extends Model class Invoice extends Model {}
{
}

View File

@@ -2,9 +2,4 @@
namespace App\Modules\Invoice\Repositories; namespace App\Modules\Invoice\Repositories;
use App\Modules\Invoice\Models\Invoice; class InvoiceRepository {}
class InvoiceRepository
{
}

BIN
public/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -1,85 +1,26 @@
<?php <?php
use App\Modules\Invoice\Actions\GenerateInvoiceExcell;
use App\Modules\Invoice\Data\InvoiceExcellData;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\RichText\RichText;
// Route::redirect('/', '/panel'); // Route::redirect('/', '/panel');
Route::get('/', function () { Route::get('/', function () {
$spreadsheet = IOFactory::load(app_path('Modules/Invoice/Resources/Docs/invoice.xls')); GenerateInvoiceExcell::make()
->setTemplateFile(app_path('Modules/Invoice/Resources/Docs/invoice.xls'))
$worksheet = $spreadsheet->getActiveSheet(); ->setData(new InvoiceExcellData(
number: random_int(1, 99),
Carbon::setLocale('tk'); date: new Carbon('2024-11-08'),
seller_firm_type: 'Telekeçi',
// Define vars... seller_firm_name: 'Nurmuhammet Allanov Parahatowiç',
$number = random_int(1, 99); seller_ssb: '201126532321',
$date = new Carbon('2024-11-08'); seller_bank_name: 'Türkmenistanyň „Halkbank“ paýdarlar täjirçilik banky',
$year = $date->year; seller_bank_number: '23206934160169902250000'
$day = $date->format('d'); ))
$month_as_string = $date->translatedFormat('F'); ->handle()
$seller_firm_type = 'Telekeçi'; ->save();
$seller_firm_name = 'Nurmuhammet Allanov Parahatowiç';
$seller_ssb = '201126532321';
$seller_bank_name = 'Türkmenistanyň „Halkbank“ paýdarlar täjirçilik banky';
$seller_bank_number = "23206934160169902250000";
// Cell vars...
$hasap_faktura = 'Hasap-faktura № ' . $number;
$sene = sprintf('%s ýylyň «%s» %s', $year, $day, $month_as_string);
$satyjy = sprintf('Satyjy: %s %s', $seller_firm_type, $seller_firm_name);
$satyjy_salgyt_belgi = new RichText();
$satyjy_salgyt_belgi
->createTextRun('Satyjynyň şahsy salgyt belgisi: ')
->getFont()
->setName('Times New Roman')
->setSize(10);
$satyjy_salgyt_belgi
->createTextRun($seller_ssb)
->getFont()
->setBold(true)
->setName('Times New Roman')
->setSize(10);
$satyjy_bank_maglumatlary = new RichText();
$satyjy_bank_maglumatlary
->createTextRun(sprintf('Satyjynyň bankynyň ady %s, hasap № ', $seller_bank_name))
->getFont()
->setName('Times New Roman')
->setSize(10);
$satyjy_bank_maglumatlary
->createTextRun($seller_bank_number)
->getFont()
->setBold(true)
->setName('Times New Roman')
->setSize(10);
// Set cell vars...
$worksheet->getCell('C6')->setValue($hasap_faktura);
$worksheet->getCell('C7')->setValue($sene);
$worksheet->getCell('A9')->setValue($satyjy);
$worksheet->getCell('A11')->setValue($satyjy_salgyt_belgi);
$worksheet->getCell('A12')->setValue($satyjy_bank_maglumatlary);
$worksheet->getCell('A13')->setValue(sprintf('şäherde (etrapda) %s BAB %s bankyň kor.hasap %s', 'Aşgabat', '390101601', '21101934110100700005000'));
$worksheet->getCell('A16')->setValue(sprintf('Satyn alyjy: %s', 'Türkmenistanyň „Türkmenbaşy“ paýdarlar täjirçilik banky'));
$worksheet->getCell('A18')->setValue(sprintf('744000 Aşgabat ş., Çandebil şaýoly köç., 121,'));
$worksheet->getCell('A19')->setValue(sprintf('Alyjynyň bankynyň ady %s %s', 'Türkmenistanyň Merkezi Banky', 'Aşgabat ş.'));
$worksheet->getCell('A20')->setValue(sprintf('Satyn alyjynyň şahsy salgyt belgisi %s, MFO %s, Hasap № %s', '101301000408', '390101304', '21101934110100300007000'));
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('write.xls');
return 'F'; return 'F';
}); });