public function addAction() { $invoice = new Invoice(); $formManager = $this->serviceLocator->get('FormElementManager'); $form = $formManager->get('MvitInvoice\\Form\\InvoiceForm'); $invoice->setBaseDate(date('Y-m-d')); $invoice->setOwnReference($this->zfcUserAuthentication()->getIdentity()->getDisplayname()); $form->bind($invoice); $request = $this->getRequest(); if ($request->isPost()) { $form->setInputFilter($invoice->getInputFilter()); $form->setData($request->getPost()); if ($form->isValid()) { $this->invoiceService->saveInvoice($invoice); // Redirect to list of clients return $this->redirect()->toRoute('mvitinvoice'); } } $form->get('invoice')->get('addressId')->setAttributes(array('disabled' => 'disabled')); return array('form' => $form); }
public function saveInvoice(Invoice $invoice) { $data = array('I_Number' => $invoice->getNumber(), 'I_BaseDate' => $invoice->getBaseDate(), 'I_DueDays' => $invoice->getDueDays(), 'I_SentDate' => $invoice->getSentDate(), 'I_PayedDate' => $invoice->getPayedDate(), 'I_ClientId' => $invoice->getClientId(), 'I_ClientReference' => $invoice->getClientReference(), 'I_OwnReference' => $invoice->getOwnReference(), 'I_AddressId' => $invoice->getAddressId(), 'I_Text' => $invoice->getText(), 'I_Updated' => $invoice->getUpdated()); $id = (int) $invoice->getId(); if ($id == 0) { $this->insert($data); $invoice->setId($this->getLastInsertValue()); } else { $tmpInvoice = $this->getInvoiceById($id); if ($tmpInvoice) { if ($invoice->getUpdated() > $tmpInvoice->getUpdated()) { $this->update($data, array('I_Id' => $id)); } } else { throw new \Exception('Form id does not exist'); } } }
private function generatePdf(Invoice $invoice) { $pdf = new PdfDocument(); // Add new page generated by ZendPdf\Page object $page1 = new Page(Page::SIZE_A4); $pdf->pages[] = $page1; // Load the needed fonts $fontHelvetica = Font::fontWithName(Font::FONT_HELVETICA); $fontHelveticaBold = Font::fontWithName(Font::FONT_HELVETICA_BOLD); $fontTimes = Font::fontWithName(Font::FONT_TIMES); $fontTimesBold = Font::fontWithName(Font::FONT_TIMES_BOLD); $colorWhite = new \ZendPdf\Color\GrayScale(1); $colorBlack = new \ZendPdf\Color\GrayScale(0); $pdf->properties['Author'] = 'Marinvägen IT'; $pdf->properties['Creator'] = 'Marinvägen IT'; $pdf->properties['Title'] = 'Invoice'; $pdf->properties['Subject'] = 'Invoice'; $page1->setFillColor($colorWhite)->setLineColor($colorBlack)->drawRectangle(50, 747, 295, 787)->drawRectangle(300, 747, 545, 787)->drawRectangle(50, 622, 295, 742)->drawRectangle(300, 622, 545, 742)->drawRectangle(50, 95, 545, 617)->drawRectangle(50, 597, 545, 617)->drawRectangle(50, 30, 545, 90); // Draw header $page1->setFont($fontTimes, 10)->setFillColor($colorBlack)->drawText('Faktura nr', 305, 775)->drawText('Kund nr', 540 - $this->widthForStringUsingFontSize('Kund nr', $fontTimes, 10), 775)->drawText('Fakturadatum', 55, 775)->drawText('Förfallodatum', 290 - $this->widthForStringUsingFontSize('Förfallodatum', $fontTimes, 10), 775)->drawText('Fakturaadress', 305, 730)->drawText('Er referens:', 55, 730)->drawText($invoice->getClientReference(), 290 - $this->widthForStringUsingFontSize($invoice->getClientReference(), $fontTimes, 10), 730)->drawText('Vår referens:', 55, 719)->drawText($invoice->getOwnReference(), 290 - $this->widthForStringUsingFontSize($invoice->getOwnReference(), $fontTimes, 10), 719)->drawText('Betalningsvillkor:', 55, 708)->drawText($invoice->getDueDays() . ' dagar netto', 290 - $this->widthForStringUsingFontSize($invoice->getDueDays() . ' dagar netto', $fontTimes, 10), 708)->drawText('Dröjsmålsränta:', 55, 697)->drawText('9,50 %', 290 - $this->widthForStringUsingFontSize('9,50 %', $fontTimes, 10), 697)->drawText('Innehar F-skattebevis', 290 - $this->widthForStringUsingFontSize('Innehar F-skattebevis', $fontTimes, 10), 627)->drawText('Adress:', 55, 80)->drawText('Telefon:', 178, 80)->drawText('Bankgiro:', 178, 52)->drawText('E-post:', 301, 80)->drawText('Organisationsnr:', 301, 52)->drawText('Hemsida:', 424, 80)->drawText('Momsreg.nr:', 424, 52)->drawText('Netto', 125 - $this->widthForStringUsingFontSize('Netto', $fontTimes, 10), 122)->drawText('Moms kr', 330 - $this->widthForStringUsingFontSize('Moms kr', $fontTimes, 10), 122)->drawText('Avrundning', 410 - $this->widthForStringUsingFontSize('Avrundning', $fontTimes, 10), 122); // Footer texts $page1->setFont($fontTimes, 12)->setFillColor($colorBlack)->drawText($this->settingTable->getSettingByName('CompanyName'), 55, 68)->drawText($this->settingTable->getSettingByName('CompanyAddress'), 55, 56)->drawText($this->settingTable->getSettingByName('CompanyPostAddress'), 55, 44)->drawText($this->settingTable->getSettingByName('CompanyCellphone'), 178, 68)->drawText($this->settingTable->getSettingByName('CompanyBankGiro'), 178, 40)->drawText($this->settingTable->getSettingByName('CompanyEmail'), 301, 68)->drawText($this->settingTable->getSettingByName('CompanyRegistrationNumber'), 301, 40)->drawText($this->settingTable->getSettingByName('CompanyWebpage'), 424, 68)->drawText($this->settingTable->getSettingByName('CompanyVATNumber'), 424, 40); // Invoice headers $page1->setFont($fontTimes, 14)->setFillColor($colorBlack)->drawText('Benämning', 55, 603)->drawText('Antal', 350 - $this->widthForStringUsingFontSize('Antal', $fontTimes, 14), 603)->drawText('á-pris', 450 - $this->widthForStringUsingFontSize('á-pris', $fontTimes, 14), 603)->drawText('Summa', 540 - $this->widthForStringUsingFontSize('Summa', $fontTimes, 14), 603); // Invoice summary text $page1->setFont($fontTimes, 16)->setFillColor($colorBlack)->drawText('ATT BETALA', 540 - $this->widthForStringUsingFontSize('ATT BETALA', $fontTimes, 16), 126)->drawText($invoice->getNumber(), 310, 755)->drawText($invoice->getClientId(), 535 - $this->widthForStringUsingFontSize($invoice->getClientId(), $fontTimes, 16), 755)->drawText(date("Y-m-d", strtotime($invoice->getBaseDate())), 60, 755)->drawText(date("Y-m-d", strtotime($invoice->getBaseDate() . ' +' . $invoice->getDueDays() . ' days')), 285 - $this->widthForStringUsingFontSize($invoice->getBaseDate(), $fontTimes, 16), 755); // Draw header $page1->setFont($fontTimes, 22)->setFillColor($colorBlack)->drawText('Faktura', 478, 792); // Draw company name $page1->setFont($fontHelveticaBold, 32)->setFillColor($colorBlack)->drawText($this->settingTable->getSettingByName('CompanyName'), 50, 792); $intPosition = 582; $intTotalSum = 0; $intTotalVat = 0; $intTotalSumWithVat = 0; foreach ($invoice->getRows() as $row) { $intRowPrice = number_format($row->getPrice(), 2, ',', ' '); $intRowSum = number_format($row->getQuantity() * $row->getPrice(), 2, ',', ' '); $intTotalSum = $intTotalSum + $row->getQuantity() * $row->getPrice(); $intTotalVat = $intTotalVat + $row->getQuantity() * $row->getPrice() * ($row->getVat() / 100); $page1->setFont($fontTimes, 12)->setFillColor($colorBlack)->drawText($row->getText(), 55, $intPosition)->drawText($row->getQuantity(), 350 - $this->widthForStringUsingFontSize($row->getQuantity(), $fontTimes, 12), $intPosition)->drawText($intRowPrice, 450 - $this->widthForStringUsingFontSize($intRowPrice, $fontTimes, 12), $intPosition)->drawText($intRowSum, 540 - $this->widthForStringUsingFontSize($intRowSum, $fontTimes, 12), $intPosition); $intPosition = $intPosition - 14; } $intTotalSumWithVat = $intTotalSum + $intTotalVat; $intRound = round($intTotalSumWithVat) - $intTotalSumWithVat; $intTotalSumWithVat = $intTotalSumWithVat + $intRound; $intTotalSum = number_format($intTotalSum, 2, ',', ' '); $intTotalVat = number_format($intTotalVat, 2, ',', ' '); $intRound = number_format($intRound, 2, ',', ' '); $intTotalSumWithVat = number_format($intTotalSumWithVat, 2, ',', ' '); $page1->setFont($fontTimes, 12)->setFillColor($colorBlack)->drawText($intTotalSum, 125 - $this->widthForStringUsingFontSize($intTotalSum, $fontTimes, 12), 110)->drawText($intTotalVat, 330 - $this->widthForStringUsingFontSize($intTotalVat, $fontTimes, 12), 110)->drawText($intRound, 410 - $this->widthForStringUsingFontSize($intRound, $fontTimes, 12), 110); $page1->setFont($fontTimes, 16)->setFillColor($colorBlack)->drawText($intTotalSumWithVat, 540 - $this->widthForStringUsingFontSize($intTotalSumWithVat, $fontTimes, 16), 110); // Draw address $intAddressPosition = 710; foreach (explode(';', $invoice->getAddress()) as $part) { $page1->setFont($fontTimes, 16)->setFillColor($colorBlack)->drawText($part, 315, $intAddressPosition); $intAddressPosition = $intAddressPosition - 20; } try { $pdf->save('data/invoice/invoice-' . sprintf('%06d', $invoice->getNumber()) . '.pdf'); } catch (\ZendPdf\Exception\IOException $e) { throw $e; } }