public function addInvoice($Data, $orderId, $invoiceTypeId, $orderData) { $content = ''; $fileHandler = ''; switch ($invoiceTypeId) { case 1: $file = 'pro.tpl'; $invoiceTypeName = _('TXT_INVOICE_TYPE_PRO'); break; case 2: $file = 'vat.tpl'; $invoiceTypeName = _('TXT_INVOICE_TYPE_VAT'); break; case 3: $file = 'cor.tpl'; $invoiceTypeName = _('TXT_INVOICE_TYPE_COR'); break; } $theme = $this->registry->loader->getParam('theme'); $fh = $theme !== '' ? $theme . '/templates/invoice/' . $file : 'invoice/' . $file; $lp = 1; foreach ($orderData['products'] as $key => $val) { $orderData['products'][$key]['lp'] = $lp; $orderData['products'][$key]['net_price'] = sprintf('%01.2f', $orderData['products'][$key]['net_price']); $orderData['products'][$key]['subtotal'] = sprintf('%01.2f', $orderData['products'][$key]['subtotal']); $orderData['products'][$key]['net_subtotal'] = sprintf('%01.2f', $orderData['products'][$key]['net_subtotal']); $lp++; } $orderData['products'][] = array('name' => $orderData['delivery_method']['deliverername'], 'net_price' => sprintf('%01.2f', $orderData['delivery_method']['delivererpricenetto']), 'quantity' => 1, 'net_subtotal' => sprintf('%01.2f', $orderData['delivery_method']['delivererpricenetto']), 'vat' => sprintf('%01.2f', $orderData['delivery_method']['deliverervat']), 'vat_value' => sprintf('%01.2f', $orderData['delivery_method']['deliverervatvalue']), 'subtotal' => sprintf('%01.2f', $orderData['delivery_method']['delivererprice']), 'lp' => $lp); $orderData['order_date'] = date('Y-m-d', strtotime($Data['invoicedate'])); $Data['invoiceTypeName'] = $invoiceTypeName; $Data['symbol'] = $Data['invoicenumber']; $allpricebrutto = sprintf('%01.2f', $orderData['total']); $stringAllPriceBrutto = (string) $allpricebrutto; $explodePrice = explode('.', $stringAllPriceBrutto); $zl = $explodePrice[0]; if (isset($explodePrice[1]) && $explodePrice[1] != NULL) { $gr = $explodePrice[1]; } else { $gr = '0'; } $InWordsZl = Amountinwords::slownie($zl); $amountInWords = $InWordsZl . ' ' . $orderData['currencysymbol'] . ' ' . (int) $explodePrice[1] . '/100'; $slogan = $this->checkLogoShopNameTag($orderData['viewid']); if ($slogan['isinvoiceshopslogan'] == 1) { $this->registry->template->assign('invoiceshopslogan', $slogan['invoiceshopslogan']); } else { $this->registry->template->assign('invoiceshopslogan', ''); } $summary = $this->getOrderSummary($orderId); // ADD RULES SUPPORT if ($orderData['pricebeforepromotion'] > 0 && $orderData['pricebeforepromotion'] > $orderData['total']) { // use default VAT value for rules $vat_id = App::getModel('view')->getDefaultVatId(); $vat_values = App::getModel('vat')->getVATValuesAll(); $vat = $vat_values[$vat_id]; $price = $orderData['total'] - $orderData['pricebeforepromotion']; $price_net = $price / (1 + $vat / 100); $vat_value = $price - $price_net; if (!empty($orderData['rulescartid'])) { $discountName = App::getModel('rulescart')->getRulesCartTranslation($orderData['rulescartid']); $discountName = $discountName[Helper::getLanguageId()]['name']; } else { $discountName = _('TXT_DISCOUNT'); } $orderData['products'][] = array('name' => $discountName, 'net_price' => sprintf('%01.2f', $price_net), 'quantity' => 1, 'net_subtotal' => sprintf('%01.2f', $price_net), 'vat' => $vat, 'vat_value' => sprintf('%01.2f', $vat_value), 'subtotal' => sprintf('%01.2f', $price), 'lp' => $lp++); $exists = false; foreach ($summary as $id => $values) { if ($values['vat'] == $vat) { $exists = true; $summary[$id]['netto'] += $price_net; $summary[$id]['brutto'] += $price; $summary[$id]['vatvalue'] += $vat_value; } } if (!$exists) { $summary[] = array('vat' => $vat, 'netto' => sprintf('%01.2f', $price_net), 'brutto' => sprintf('%01.2f', $price), 'vatvalue' => sprintf('%01.2f', $vat_value)); } } // END $bDelivererVatExists = false; foreach ($summary as $key => $group) { if ($group['vat'] == $orderData['delivery_method']['deliverervat']) { $summary[$key]['netto'] = $group['netto'] + $orderData['delivery_method']['delivererpricenetto']; $summary[$key]['brutto'] = $group['brutto'] + $orderData['delivery_method']['delivererprice']; $summary[$key]['vatvalue'] = $group['vatvalue'] + $orderData['delivery_method']['deliverervatvalue']; $bDelivererVatExists = true; break; } } if ($bDelivererVatExists == false) { $summary[] = array('vat' => $orderData['delivery_method']['deliverervat'], 'netto' => $orderData['delivery_method']['delivererpricenetto'], 'brutto' => $orderData['delivery_method']['delivererprice'], 'vatvalue' => $orderData['delivery_method']['deliverervatvalue']); } $companyaddress = $this->getMainCompanyAddress($orderData['viewid']); $Total = array('netto' => 0, 'brutto' => 0, 'vatvalue' => 0); foreach ($summary as $key => $group) { $Total['netto'] += $group['netto']; $Total['brutto'] += $group['brutto']; $Total['vatvalue'] += $group['vatvalue']; } $this->registry->template->assign('invoiceData', $Data); $this->registry->template->assign('order', $orderData); $this->registry->template->assign('comment', $Data['comment']); $this->registry->template->assign('amountInWords', $amountInWords); $this->registry->template->assign('companyaddress', $companyaddress); $this->registry->template->assign('summary', $summary); $this->registry->template->assign('total', $Total); $this->registry->template->assign('originalCopy', _('TXT_ORIGINAL')); $contentOriginalHtml = $this->registry->template->fetch($fh); $this->registry->template->assign('invoiceData', $Data); $this->registry->template->assign('order', $orderData); $this->registry->template->assign('amountPayed', $Data['totalpayed']); $this->registry->template->assign('amountToPay', $orderData['total'] - $Data['totalpayed']); $this->registry->template->assign('amountInWords', $amountInWords); $this->registry->template->assign('companyaddress', $companyaddress); $this->registry->template->assign('summary', $summary); $this->registry->template->assign('total', $Total); $this->registry->template->assign('originalCopy', _('TXT_COPY')); $contentCopyHtml = $this->registry->template->fetch($fh); $sql = "INSERT INTO invoice SET\n\t\t\t\t\tsymbol = :symbol,\n\t\t\t\t\tinvoicedate = :invoicedate,\n\t\t\t\t\tsalesdate = :salesdate,\n\t\t\t\t\tpaymentduedate = :paymentduedate,\n\t\t\t\t\tsalesperson = :salesperson,\n\t\t\t\t\tinvoicetype = :invoicetype,\n\t\t\t\t\tcomment = :comment,\n\t\t\t\t\tcontentoriginal = :contentoriginal,\n\t\t\t\t\tcontentcopy = :contentcopy,\n\t\t\t\t\torderid = :orderid,\n\t\t\t\t\ttotalpayed = :totalpayed,\n\t\t\t\t\tviewid = :viewid"; $stmt = Db::getInstance()->prepare($sql); $stmt->bindValue('symbol', $Data['invoicenumber']); $stmt->bindValue('invoicedate', $Data['invoicedate']); $stmt->bindValue('salesdate', $orderData['order_date']); $stmt->bindValue('paymentduedate', $Data['duedate']); $stmt->bindValue('salesperson', $Data['salesperson']); $stmt->bindValue('invoicetype', $invoiceTypeId); $stmt->bindValue('comment', $Data['comment']); $stmt->bindValue('contentoriginal', $contentOriginalHtml); $stmt->bindValue('contentcopy', $contentCopyHtml); $stmt->bindValue('orderid', $orderId); $stmt->bindValue('totalpayed', $Data['totalpayed']); $stmt->bindValue('viewid', $orderData['viewid']); try { $stmt->execute(); } catch (Exception $e) { throw new Exception($e->getMessage()); } return $Data['invoicenumber']; }
public function addInvoice($Data, $orderId, $invoiceTypeId, $orderData) { $content = ''; $fileHandler = ''; switch ($invoiceTypeId) { case 1: $file = 'pro.tpl'; $invoiceTypeName = _('TXT_INVOICE_TYPE_PRO'); break; case 2: $file = 'vat.tpl'; $invoiceTypeName = _('TXT_INVOICE_TYPE_VAT'); break; case 3: $file = 'cor.tpl'; $invoiceTypeName = _('TXT_INVOICE_TYPE_COR'); break; } $namespace = $this->registry->loader->getCurrentNamespace(); $systemFile = ROOTPATH . 'design' . DS . '_tpl' . DS . 'invoiceTemplates' . DS . 'core' . DS . $file; $namespaceFile = ROOTPATH . 'design' . DS . '_tpl' . DS . 'invoiceTemplates' . DS . $namespace . DS . $file; if (is_file($namespaceFile)) { $fh = $namespaceFile; } elseif (is_file($systemFile)) { $fh = $systemFile; } else { throw new Exception('Invoice template file (' . $file . ')not found.'); } $lp = 1; foreach ($orderData['products'] as $key => $val) { $orderData['products'][$key]['lp'] = $lp; $orderData['products'][$key]['net_price'] = sprintf('%01.2f', $orderData['products'][$key]['net_price']); $orderData['products'][$key]['subtotal'] = sprintf('%01.2f', $orderData['products'][$key]['subtotal']); $orderData['products'][$key]['net_subtotal'] = sprintf('%01.2f', $orderData['products'][$key]['net_subtotal']); $lp++; } $orderData['products'][] = array('name' => $orderData['delivery_method']['deliverername'], 'net_price' => sprintf('%01.2f', $orderData['delivery_method']['delivererpricenetto']), 'quantity' => 1, 'net_subtotal' => sprintf('%01.2f', $orderData['delivery_method']['delivererpricenetto']), 'vat' => sprintf('%01.2f', $orderData['delivery_method']['deliverervat']), 'vat_value' => sprintf('%01.2f', $orderData['delivery_method']['deliverervatvalue']), 'subtotal' => sprintf('%01.2f', $orderData['delivery_method']['delivererprice']), 'lp' => $lp); $orderData['order_date'] = date('Y-m-d', strtotime($orderData['order_date'])); $Data['invoiceTypeName'] = $invoiceTypeName; $Data['symbol'] = $Data['invoicenumber']; $allpricebrutto = sprintf('%01.2f', $orderData['total']); $stringAllPriceBrutto = (string) $allpricebrutto; $explodePrice = explode('.', $stringAllPriceBrutto); $zl = $explodePrice[0]; if (isset($explodePrice[1]) && $explodePrice[1] != NULL) { $gr = $explodePrice[1]; } else { $gr = '0'; } $InWordsZl = Amountinwords::slownie($zl); $amountInWords = $InWordsZl . ' ' . $orderData['currencysymbol'] . ' ' . (int) $explodePrice[1] . '/100'; $slogan = $this->checkLogoShopNameTag($orderData['viewid']); if ($slogan['isinvoiceshopslogan'] == 1) { $this->registry->template->assign('invoiceshopslogan', $slogan['invoiceshopslogan']); } else { $this->registry->template->assign('invoiceshopslogan', ''); } $summary = $this->getOrderSummary($orderId); $bDelivererVatExists = false; foreach ($summary as $key => $group) { if ($group['vat'] == $orderData['delivery_method']['deliverervat']) { $summary[$key]['netto'] = $group['netto'] + $orderData['delivery_method']['delivererpricenetto']; $summary[$key]['brutto'] = $group['brutto'] + $orderData['delivery_method']['delivererprice']; $summary[$key]['vatvalue'] = $group['vatvalue'] + $orderData['delivery_method']['deliverervatvalue']; $bDelivererVatExists = true; break; } } if ($bDelivererVatExists == false) { $summary[] = array('vat' => $orderData['delivery_method']['deliverervat'], 'netto' => $orderData['delivery_method']['delivererpricenetto'], 'brutto' => $orderData['delivery_method']['delivererprice'], 'vatvalue' => $orderData['delivery_method']['deliverervatvalue']); } $companyaddress = $this->getMainCompanyAddress($orderData['viewid']); $Total = array('netto' => 0, 'brutto' => 0, 'vatvalue' => 0); foreach ($summary as $key => $group) { $Total['netto'] += $group['netto']; $Total['brutto'] += $group['brutto']; $Total['vatvalue'] += $group['vatvalue']; } $this->registry->template->assign('invoiceData', $Data); $this->registry->template->assign('order', $orderData); $this->registry->template->assign('comment', $Data['comment']); $this->registry->template->assign('amountInWords', $amountInWords); $this->registry->template->assign('companyaddress', $companyaddress); $this->registry->template->assign('summary', $summary); $this->registry->template->assign('total', $Total); $this->registry->template->assign('originalCopy', _('TXT_ORIGINAL')); $contentOriginalHtml = $this->registry->template->fetch($fh); $this->registry->template->assign('invoiceData', $Data); $this->registry->template->assign('order', $orderData); $this->registry->template->assign('amountPayed', $Data['totalpayed']); $this->registry->template->assign('amountToPay', $orderData['total'] - $Data['totalpayed']); $this->registry->template->assign('amountInWords', $amountInWords); $this->registry->template->assign('companyaddress', $companyaddress); $this->registry->template->assign('summary', $summary); $this->registry->template->assign('total', $Total); $this->registry->template->assign('originalCopy', _('TXT_COPY')); $contentCopyHtml = $this->registry->template->fetch($fh); $sql = "INSERT INTO invoice SET\n\t\t\t\t\tsymbol = :symbol,\n\t\t\t\t\tinvoicedate = :invoicedate,\n\t\t\t\t\tsalesdate = :salesdate,\n\t\t\t\t\tpaymentduedate = :paymentduedate,\n\t\t\t\t\tsalesperson = :salesperson,\n\t\t\t\t\tinvoicetype = :invoicetype,\n\t\t\t\t\tcomment = :comment,\n\t\t\t\t\tcontentoriginal = :contentoriginal,\n\t\t\t\t\tcontentcopy = :contentcopy,\n\t\t\t\t\torderid = :orderid,\n\t\t\t\t\ttotalpayed = :totalpayed,\n\t\t\t\t\tviewid = :viewid"; $stmt = Db::getInstance()->prepare($sql); $stmt->bindValue('symbol', $Data['invoicenumber']); $stmt->bindValue('invoicedate', $Data['invoicedate']); $stmt->bindValue('salesdate', $orderData['order_date']); $stmt->bindValue('paymentduedate', $Data['duedate']); $stmt->bindValue('salesperson', $Data['salesperson']); $stmt->bindValue('invoicetype', $invoiceTypeId); $stmt->bindValue('comment', $Data['comment']); $stmt->setBlob('contentoriginal', $contentOriginalHtml); $stmt->setBlob('contentcopy', $contentCopyHtml); $stmt->bindValue('orderid', $orderId); $stmt->bindValue('totalpayed', $Data['totalpayed']); $stmt->bindValue('viewid', $orderData['viewid']); try { $stmt->execute(); $rs = $stmt->fetch(); } catch (Exception $e) { throw new Exception($e->getMessage()); } $id = Db::getInstance()->lastInsertId(); return $id; }