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(); } /** * Create a RichText object with specified text and font settings. */ protected function addToRichText(RichText $richText, string $text, bool $isBold = false): RichText { $textRun = $richText->createTextRun($text); $font = $textRun->getFont() ?: new Font; $font->setName('Times New Roman')->setSize(10); if ($isBold) { $font->setBold(true); } return $richText; } /** * Fill the cells */ protected function fillTheCells(): void { $data = $this->getTemplateValues(); foreach ($data as $cell => $value) { $this->worksheet->getCell($cell)->setValue($value); } } /** * Get template cells and values * * @return array */ protected function getTemplateValues(): array { return [ 'C6' => $this->hasapFakturaNomeri(), 'C7' => $this->sene(), 'A9' => $this->satyjy(), 'A11' => $this->satyjySalgytBelgi(), 'A12' => $this->satyjyBanky(), 'A13' => sprintf('şäherde (etrapda) %s BAB %s bankyň kor.hasap %s', 'Aşgabat', '390101601', '21101934110100700005000'), 'A16' => 'Satyn alyjy: Türkmenistanyň „Türkmenbaşy“ paýdarlar täjirçilik banky', 'A18' => '744000 Aşgabat ş., Çandebil şaýoly köç., 121,', 'A19' => sprintf('Alyjynyň bankynyň ady %s %s', 'Türkmenistanyň Merkezi Banky', 'Aşgabat ş.'), 'A20' => 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 { $richText = new RichText; $satyjy_salgyt_belgi = $this->addToRichText( richText: $richText, text: 'Satyjynyň şahsy salgyt belgisi: ' ); return $this->addToRichText( richText: $satyjy_salgyt_belgi, text: $this->data->seller_ssb, isBold: true ); } /** * Satyjy bank maglumatlary */ public function satyjyBanky(): RichText { $richText = new RichText; $satyjy_banky = $this->addToRichText( richText: $richText, text: sprintf('Satyjynyň bankynyň ady %s, hasap № ', $this->data->seller_bank_name) ); return $this->addToRichText( richText: $satyjy_banky, text: $this->data->seller_bank_number, isBold: true ); } }