Přidání komponenty do projektu
- unjustolaf
- Člen | 29
Zdravím Nette frameworkeři,
Vytvářím svůj vlastní e-shop a došel jsem do fáze kde potřebuji udělat systém generování faktur k objednávkám. Hledal jsem na internetu různé způsoby a našel tuto komponentu která by mi nemálo usnadnila práci (né-li umožnila tento systém faktur vytvořit, protože když vidím jak složité to je, myslím že bych si sám neporadil). Při instalování komponenty jsem postupoval následovně.
1.krok
Nainstaloval jsem komponentu přes composer require webchemistry/invoice
- v tomto kroku vše proběhlo bez problému
2.krok
Přidal jsem podle souboru readme v dokumentaci u komponenty do souboru config.neon následující:
<?php
extensions:
invoice: WebChemistry\Invoice\DI\InvoiceExtension
invoice:
lang: en
company:
name:
town:
address:
zip:
country:
## Optional
tin:
vaTin:
isTax:
?>
3.krok
V této fázi jsem myslel, že už je vše úspěšně nainstalováno a nastaveno a můžu vyzkoušet systém generování faktur a pohrát si s jeho konfigurací. Problém je že když přidám následující kód do mého presenteru kde se dokončuje objednávka, Presenter nevidí na WebChemistry\Invoice\InvoiceFactory
viz.
<?php
public function handleSendOrder()
{
$company = WebChemistry\Invoice\InvoiceFactory::createCompany('John Doe', 'Los Angeles', 'Cavetown', '720 55', 'USA', '0123456789', 'CZ0123456789');
}
?>
Prosím poraďte mi jak mám správně nainstalovat tuto komponentu, strašně moc by mi to pomohlo. V přidávání komponent do svého Nette projektu jsem nový (celkově i v Nette) a opravdu se snažím něco naučit. Snažil jsem se googlit, zkoušel jsem mnohé způsoby jak toto vyřešit ale neúspěšně. Jak už jsem říkal jsem laik a je zde velká šance, že dělám jeden z kroků špatně nebo přidávám kód na jiné místo než je určen.
Mockrát Vám všem děkuji a doufám, že mi dokážete pomoct.
- Ondřej Kubíček
- Člen | 494
a jakou hlášku ti to přesně vyhodí?
nemáš na začátku volání té třídy \ (zpětné lomítko), tak
předpokládám že máš na začátku dokumentu use
use WebChemistry;
Editoval Ondřej Kubíček (27. 8. 2018 10:45)
- unjustolaf
- Člen | 29
Měl jsem opravdu překlep v usingu, takže si vyřešil můj první error, děkuji.
Nyní mám tenhle kód v presenteru (viz. dokumentace u komponenty):
<?php
public function handleSendOrder()
{
$company = WebChemistry\Invoice\InvoiceFactory::createCompany('John Doe', 'Los Angeles', 'Cavetown', '720 55', 'USA', '0123456789', 'CZ0123456789');
$customer = WebChemistry\Invoice\InvoiceFactory::createCustomer('John Doe', 'Los Angeles', 'Cavetown', '720 55', 'USA');
$account = WebChemistry\Invoice\InvoiceFactory::createAccount('1111', 'CZ4808000000002353462015', 'GIGACZPX');
$payment = WebChemistry\Invoice\InvoiceFactory::createPaymentInformation('Kč', '0123456789', '1234', 0.21);
$order = WebChemistry\Invoice\InvoiceFactory::createOrder('20160001', new \DateTime('+ 14 days'), $account, $payment);
$order->addItem('Logitech G700s Rechargeable Gaming Mouse', 4, 1790);
}
?>
a error:
Non-static method WebChemistry\Invoice\InvoiceFactory::createCompany() should not be called statically
- unjustolaf
- Člen | 29
unjustolaf napsal(a):
Měl jsem opravdu překlep v usingu, takže si vyřešil můj první error, děkuji.
Nyní mám tenhle kód v presenteru (viz. dokumentace u komponenty):
<?php public function handleSendOrder() { $company = WebChemistry\Invoice\InvoiceFactory::createCompany('John Doe', 'Los Angeles', 'Cavetown', '720 55', 'USA', '0123456789', 'CZ0123456789'); $customer = WebChemistry\Invoice\InvoiceFactory::createCustomer('John Doe', 'Los Angeles', 'Cavetown', '720 55', 'USA'); $account = WebChemistry\Invoice\InvoiceFactory::createAccount('1111', 'CZ4808000000002353462015', 'GIGACZPX'); $payment = WebChemistry\Invoice\InvoiceFactory::createPaymentInformation('Kč', '0123456789', '1234', 0.21); $order = WebChemistry\Invoice\InvoiceFactory::createOrder('20160001', new \DateTime('+ 14 days'), $account, $payment); $order->addItem('Logitech G700s Rechargeable Gaming Mouse', 4, 1790); } ?>
a error:
Non-static method WebChemistry\Invoice\InvoiceFactory::createCompany() should not be called statically
A ten handle je samozřejmě jen provizorní abych to otestoval, pak to budu řešit jinak.
- unjustolaf
- Člen | 29
Aha, já myslel že když něco instaluji přes composer, že to automaticky stáhne nejnovější verzi dané komponenty. Mám zkoušet composer -update nebo stáhnout normálně zip té nejnovější verze a přemazat soubory ve složce vendor ?
Díky moc
- Tyraxor
- Člen | 31
To jaká verze se ti nainstaluje není tak jednoduché, musí se splňovat závislosti pro konkrétní verzi, definované v composer.json konkrétně tato část:
"require": {
"php": ">=7.1",
"nette/utils": "^2.3",
"setasign/fpdf": "^1.8"
},
tipoval bych to že nemáš php 7.1, ale třeba jen 5.6
- unjustolaf
- Člen | 29
To máš naprostou pravdu mám php verzi 5.6, chtěl bych ale upgradnout na 7.1 ale absolutně jsem nedokázal najít jak a nemyslím si že to je jen o tom změnit to číslo a hodit composer update.
- unjustolaf
- Člen | 29
Každopádně komponenta už nevyhodila žádnou chybu po úpravě metod. Takže všem zúčastněným mnohokrát děkuji.
Teď se snažím přijít na to kam se tyto faktury ukládají a jak toto úložiště změnit, ale je to jak hledat jehlu v kupce sena :D
- unjustolaf
- Člen | 29
Tak jsem se v tom naprosto ztratil, nedokázal jsem v žádném souboru v této komponentě najít nějakou metodu či cokoliv jiného která by výslednou fakturu někam ukládala. Když tedy vygeneruji fakturu, vše proběhne bez errorů ale žádná se nikam nevygeneruje :( Nevíte někdo co s tím ? Jsem už tak daleko a přijde mi škoda to celé vyhazovat jen kvůli tomu že nedokážu vygenerovat (uložit) finální podobu faktury.
- unjustolaf
- Člen | 29
MajklNajt napsal(a):
Generating invoices
$invoice = new \WebChemistry\Invoice\Invoice($company); header('Content-Type: application/pdf'); echo $invoice->create($customer, $order);
Vyřešil jsem to použitím starší verze která renderuje fakturu jako obrázek a ne jako pdf. PDF se mi zobrazovalo prázdné a když jsem ho uložil a otevřel bylo poškozené (bude to asi tím že na to nemám dostatečnou verzi komponenty kvůli verzi php).
Moje stávající řešení:
<?php
$invoice = new WebChemistry\Invoice\Invoice($company);
$images = $invoice->create($customer, $order);
foreach ($images as $page => $invoice) {
$invoice->save(__DIR__ . "/invoice-$page.jpg");
}
?>
Mám už na vás jen poslední otázku, chtěl bych aby se mi faktura uložila do složky www/images/faktury jak toho docílím místo
<?php
$invoice->save(__DIR__ . "/invoice-$page.jpg");
?>
snažil jsem se tam vložit $basePath ale je to červený jak rajče nezávisle na tom jak to napisu nebo zabalim.
Za všechno ještě jednou díky <3