Generování faktur Enciovni
- iru
- Člen | 110
Zprovoznila jsem generátor faktur OndrejBrejla/Enciovni. Je funkční, ale jen když generuji jednu fakturu, nevím, jak na to, abych mohla vygenerovat více faktur v cyklu po sobě. Pomůžete mi nasměrovat?
Když udělám toto, tak se mi sice vygeneruje více faktur s odlišným číslem faktury, ale s daty, které patří první faktuře v cyklu.
V presenteru:
foreach ($data_order as $data){
$mpdf=new mPDF('utf-8');
$fa_name ='faktura-'. date('Y') .'00' .$data->id.'.pdf';
$this["eciovni"]->exportToPdf($mpdf, 'files/faktury/'.$fa_name, 'F');
}
protected function createComponentEciovni() {
var_dump($this->data_order['prodavajici']['name']); //tady jsou data správně, v každém průchodu cyklem jiná a ty která k dané faktuře patří...
$dateNow = new \DateTime();
$dateExp = new \DateTime();
$dateExp->modify('+14 days');
$variableSymbol = date('Y') .'00' .$this->data_order['faktura']['id'];
$supplierBuilder = new ParticipantBuilder($this->data_order['prodavajici']['name'], $this->data_order['prodavajici']['ulice'], $this->data_order['prodavajici']['cp'], $this->data_order['prodavajici']['mesto'], $this->data_order['prodavajici']['psc']);
$supplier = $supplierBuilder->setIn($this->data_order['prodavajici']['ic'])->setTin($this->data_order['prodavajici']['dic'])->setAccountNumber($this->data_order['prodavajici']['ucet'])->build();
$customerBuilder = new ParticipantBuilder($this->data_order['customer']['name'], $this->data_order['customer']['ulice'], $this->data_order['customer']['cp'], $this->data_order['customer']['mesto'], $this->data_order['customer']['psc']);
$customer = $customerBuilder->setAccountNumber('')->build();
foreach ($this->data_order['products'] as $product){
$items[] = new ItemImpl( $product->name, $product->quantity, $product->price, TaxImpl::fromPercent($product->dph));
}
$dataBuilder = new DataBuilder($variableSymbol, 'Faktura - faktura číslo', $supplier, $customer, $dateExp, $dateNow, $items);
$dataBuilder->setVariableSymbol($variableSymbol)->setDateOfVatRevenueRecognition($dateNow);
$data = $dataBuilder->build();
return new Eciovni($data);
}
Děkuji
- Oli
- Člen | 1215
Sice tenhle doplněk neznám, ale hledal bych problém v tom, že se to vše
provádí nad jednou instancí Eciovni
. Zkus použít multiplier, který je
schopen udělat víc instancí createComponentEciovni
.
- CZechBoY
- Člen | 3608
Je potřeba mít to v komponentě?
Pokud by se to přepsalo do obyčejné funkce tak si myslím že to
bude ok.
foreach ($data_order as $data) {
$mpdf = new mPDF('utf-8');
$fa_name = 'faktura-' . date('Y') . '00' .$data->id . '.pdf';
$this->createPdf()->exportToPdf($mpdf, 'files/faktury/' . $fa_name, 'F');
}
private function createPdf()
{
$dateNow = new \DateTime();
$dateExp = new \DateTime();
$dateExp->modify('+14 days');
$variableSymbol = date('Y') .'00' .$this->data_order['faktura']['id'];
$supplierBuilder = new ParticipantBuilder($this->data_order['prodavajici']['name'], $this->data_order['prodavajici']['ulice'], $this->data_order['prodavajici']['cp'], $this->data_order['prodavajici']['mesto'], $this->data_order['prodavajici']['psc']);
$supplier = $supplierBuilder->setIn($this->data_order['prodavajici']['ic'])->setTin($this->data_order['prodavajici']['dic'])->setAccountNumber($this->data_order['prodavajici']['ucet'])->build();
$customerBuilder = new ParticipantBuilder($this->data_order['customer']['name'], $this->data_order['customer']['ulice'], $this->data_order['customer']['cp'], $this->data_order['customer']['mesto'], $this->data_order['customer']['psc']);
$customer = $customerBuilder->setAccountNumber('')->build();
foreach ($this->data_order['products'] as $product){
$items[] = new ItemImpl( $product->name, $product->quantity, $product->price, TaxImpl::fromPercent($product->dph));
}
$dataBuilder = new DataBuilder($variableSymbol, 'Faktura - faktura číslo', $supplier, $customer, $dateExp, $dateNow, $items);
$dataBuilder->setVariableSymbol($variableSymbol)->setDateOfVatRevenueRecognition($dateNow);
$data = $dataBuilder->build();
return new Eciovni($data);
}
Editoval CZechBoY (28. 9. 2016 20:18)
- iru
- Člen | 110
CZechBoY napsal(a):
Je potřeba mít to v komponentě?
Pokud by se to přepsalo do obyčejné funkce tak si myslím že to bude ok.
když to takhle udělám, tak mi to vyhazuje chybovou hlášku:
Component '' is not attached to ‚Nette\Application\UI\Presenter‘
jenom v té komponentě to funguje
- iru
- Člen | 110
Oli napsal(a):
Sice tenhle doplněk neznám, ale hledal bych problém v tom, že se to vše provádí nad jednou instancí
Eciovni
. Zkus použít multiplier, který je schopen udělat víc instancícreateComponentEciovni
.
zkusila jsem použít multiplier, ale hlásí chybu: Call to undefined method Nette\Application\UI\Multiplier::exportToPdf()
protected function createComponentEciovni() {
return new Multiplier(function () {
...............
return new Eciovni($data);
});
}
tak už jsem na to přišla. Kdyby to někdo potřeboval, tak to vypadá takto:
protected function createComponentEciovni() {
$id = $this->data_order['faktura']['id'];
return new Multiplier(function ($id) {
...........
return new Eciovni($data);
});
}
a volání komponenty:
$this["eciovni-$id"]->exportToPdf($mpdf, 'files/faktury/'.$fa_name, 'F');
Děkuji vám všem za pomoc :-)
Editoval iru (28. 9. 2016 21:17)
- Oli
- Člen | 1215
Protože jsi to nepoužila dobře :-) Ty jsi zavolala tu komponentu, ve
které je ale multiplier. Takže se snažíš zavolat metodu
exportToPdf
nad multiplierem
. Ten ale takovou metodu
nemá. Musíš jít víc do hloubky. Správně by mělo být něco takového
(doufám):
protected function createComponentEciovni() {
return new Multiplier(function ($id) { // Tady to $id možná nemusí být, nevím
// ...............
return new Eciovni($data);
});
}
foreach ($data_order as $id => $data){
$mpdf=new mPDF('utf-8');
$fa_name ='faktura-'. date('Y') .'00' .$data->id.'.pdf';
$this["eciovni-$id"]->exportToPdf($mpdf, 'files/faktury/'.$fa_name, 'F');
// Možná je ten zápis v presenteru pro vnořenou komponentu takhle $this['eciovni'][$id], to si z hlavy nepamatuju :)
}
- iru
- Člen | 110
Oli napsal(a):
Protože jsi to nepoužila dobře :-) Ty jsi zavolala tu komponentu, ve které je ale multiplier. Takže se snažíš zavolat metodu
exportToPdf
nadmultiplierem
. Ten ale takovou metodu nemá. Musíš jít víc do hloubky. Správně by mělo být něco takového (doufám):protected function createComponentEciovni() { return new Multiplier(function ($id) { // Tady to $id možná nemusí být, nevím // ............... return new Eciovni($data); }); }
foreach ($data_order as $id => $data){ $mpdf=new mPDF('utf-8'); $fa_name ='faktura-'. date('Y') .'00' .$data->id.'.pdf'; $this["eciovni-$id"]->exportToPdf($mpdf, 'files/faktury/'.$fa_name, 'F'); // Možná je ten zápis v presenteru pro vnořenou komponentu takhle $this['eciovni'][$id], to si z hlavy nepamatuju :) }
máš pravdu… funguje to s $id i bez … return new Multiplier(function ($id) {
- Shaman
- Člen | 2
Taky jsem se snažil zprovoznit generátor faktur OndrejBrejla/Enciovni. Nakonec jsem si udělal vlastní fork, protože aktuální (4 roky stará) verze nefungovala s novým mPDF (6.1) a php (7.0). Přidal jsem README.md s popisem mého použití. Třeba to někomu pomůže.
https://github.com/…goci/Eciovni
V kostce – udělal jsem servisu, která injectuje templateFactory a linkGenerator. Pak odkudkoliv zavolám generování faktury. Snad to někomu ušetří čas.