?> <tr> <td class="key"><strong><?php echo vmText::_('COM_VIRTUEMART_COUPON_CODE'); ?> </strong></td> <td><?php echo $this->orderbt->coupon_code; ?> </td> </tr> <?php } ?> <?php if ($this->orderbt->invoiceNumber and !shopFunctionsF::InvoiceNumberReserved($this->orderbt->invoiceNumber)) { $invoice_url = juri::root() . 'index.php?option=com_virtuemart&view=invoice&layout=invoice&format=pdf&tmpl=component&virtuemart_order_id=' . $this->orderbt->virtuemart_order_id . '&order_number=' . $this->orderbt->order_number . '&order_pass='******'COM_VIRTUEMART_INVOICE_PRINT') . "\" href=\"javascript:void window.open('{$invoice_url}', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no');\" >"; $invoice_link .= $this->orderbt->invoiceNumber . '</a>'; ?> <tr> <td class="key"><strong><?php echo vmText::_('COM_VIRTUEMART_INVOICE'); ?> </strong></td> <td><?php echo $invoice_link; ?> </td> </tr> <?php
function getInvoicePDF($orderDetails = 0, $viewName = 'invoice', $layout = 'invoice', $format = 'html', $force = false) { // $force = true; $path = tsmConfig::get('forSale_path', 0); if (empty($path)) { vmError('No path set to store invoices'); return false; } else { $path .= shopFunctionsF::getInvoiceFolderName() . DS; if (!file_exists($path)) { vmError('Path wrong to store invoices, folder invoices does not exist ' . $path); return false; } else { if (!is_writable($path)) { vmError('Cannot store pdf, directory not writeable ' . $path); return false; } } } $orderModel = tmsModel::getModel('orders'); $invoiceNumberDate = array(); if (!$orderModel->createInvoiceNumber($orderDetails['details']['BT'], $invoiceNumberDate)) { return false; } if (!empty($invoiceNumberDate[0])) { $invoiceNumber = $invoiceNumberDate[0]; } else { $invoiceNumber = FALSE; } if (!$invoiceNumber or empty($invoiceNumber)) { vmError('Cant create pdf, createInvoiceNumber failed'); return 0; } if (shopFunctionsF::InvoiceNumberReserved($invoiceNumber)) { return 0; } //$path .= preg_replace('/[^A-Za-z0-9_\-\.]/', '_', 'vm'.$layout.'_'.$invoiceNumber.'.pdf'); $path .= shopFunctionsF::getInvoiceName($invoiceNumber, $layout) . '.pdf'; if (file_exists($path) and !$force) { return $path; } //We come from the be, so we need to load the FE language tsmConfig::loadJLang('com_virtuemart', true); $this->addViewPath(VMPATH_SITE . DS . 'views'); $view = $this->getView($viewName, $format); $this->writeJs = false; $view->addTemplatePath(VMPATH_SITE . DS . 'views' . DS . $viewName . DS . 'tmpl'); if (!class_exists('VmTemplate')) { require VMPATH_SITE . DS . 'helpers' . DS . 'vmtemplate.php'; } $template = VmTemplate::loadVmTemplateStyle(); $templateName = VmTemplate::setTemplate($template); if (!empty($templateName)) { $TemplateOverrideFolder = JPATH_SITE . DS . "templates" . DS . $templateName . DS . "html" . DS . "com_virtuemart" . DS . "invoice"; if (file_exists($TemplateOverrideFolder)) { $view->addTemplatePath($TemplateOverrideFolder); } } $view->invoiceNumber = $invoiceNumberDate[0]; $view->invoiceDate = $invoiceNumberDate[1]; $view->orderDetails = $orderDetails; $view->uselayout = $layout; $view->showHeaderFooter = false; $vendorModel = tmsModel::getModel('vendor'); $virtuemart_vendor_id = 1; //We could set this automatically by the vendorId stored in the order. $vendor = $vendorModel->getVendor($virtuemart_vendor_id); $metadata = array('title' => tsmText::sprintf('COM_VIRTUEMART_INVOICE_TITLE', $vendor->vendor_store_name, $view->invoiceNumber, $orderDetails['details']['BT']->order_number), 'keywords' => tsmText::_('COM_VIRTUEMART_INVOICE_CREATOR')); return VmPdf::createVmPdf($view, $path, 'F', $metadata); }
static function InvoiceNumberReserved($invoice_number) { if (!class_exists('ShopFunctionsF')) { require JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'; } return shopFunctionsF::InvoiceNumberReserved($invoice_number); }
public function display($tpl = null) { $document = JFactory::getDocument(); tsmConfig::loadJLang('com_virtuemart_shoppers', true); /* It would be so nice to be able to load the override of the FE additionally from here * joomlaWantsThisFolder\language\overrides\en-GB.override.ini * $jlang =JFactory::getLanguage(); $tag = $jlang->getTag(); $jlang->load('override', 'language/overrides',$tag,true);*/ //We never want that the cart is indexed $document->setMetaData('robots', 'NOINDEX, NOFOLLOW, NOARCHIVE, NOSNIPPET'); if (empty($this->uselayout)) { $layout = vRequest::getCmd('layout', 'mail'); } else { $layout = $this->uselayout; } switch ($layout) { case 'invoice': $this->doctype = $layout; $title = tsmText::_('COM_VIRTUEMART_INVOICE'); break; case 'deliverynote': $this->doctype = $layout; $layout = 'invoice'; $title = tsmText::_('COM_VIRTUEMART_DELIVERYNOTE'); break; case 'confirmation': $this->doctype = $layout; $layout = 'confirmation'; $title = tsmText::_('COM_VIRTUEMART_CONFIRMATION'); break; case 'mail': if (tsmConfig::get('order_mail_html')) { $layout = 'mail_html'; } else { $layout = 'mail_raw'; } } $this->setLayout($layout); $tmpl = vRequest::getCmd('tmpl'); $this->print = false; if ($tmpl and !$this->isPdf) { $this->print = true; } $this->format = vRequest::getCmd('format', 'html'); if ($layout == 'invoice') { $document->setTitle(tsmText::_('COM_VIRTUEMART_INVOICE')); } $order_print = false; if ($this->print and $this->format == 'html') { $order_print = true; } $orderModel = tmsModel::getModel('orders'); $orderDetails = $this->orderDetails; if ($orderDetails == 0) { $orderDetails = $orderModel->getMyOrderDetails(); if (!$orderDetails) { echo tsmText::_('COM_VIRTUEMART_CART_ORDER_NOTFOUND'); vmdebug('COM_VIRTUEMART_CART_ORDER_NOTFOUND and $orderDetails ', $orderDetails); return; } else { if (empty($orderDetails['details'])) { echo tsmText::_('COM_VIRTUEMART_CART_ORDER_DETAILS_NOTFOUND'); return; } } } if (empty($orderDetails['details'])) { echo tsmText::_('COM_VIRTUEMART_ORDER_NOTFOUND'); return 0; } if (!empty($orderDetails['details']['BT']->order_language)) { tsmConfig::loadJLang('com_virtuemart', true, $orderDetails['details']['BT']->order_language); tsmConfig::loadJLang('com_virtuemart_shoppers', true, $orderDetails['details']['BT']->order_language); tsmConfig::loadJLang('com_virtuemart_orders', true, $orderDetails['details']['BT']->order_language); } //QuicknDirty, caching of the result VirtueMartModelCustomfields::calculateModificators must be deleted, /*if(!empty($orderDetails['items']) and is_array($orderDetails['items'])){ $nbPr = count($orderDetails['items']); for($k = 0; $k<$nbPr ;$k++){ $orderDetails['items'][$k]->modificatorSum = null; } vmdebug('$nbPr',$nbPr); }*/ $this->assignRef('orderDetails', $orderDetails); // if it is order print, invoice number should not be created, either it is there, either it has not been created if (empty($this->invoiceNumber) and !$order_print) { $invoiceNumberDate = array(); if ($orderModel->createInvoiceNumber($orderDetails['details']['BT'], $invoiceNumberDate)) { if (shopFunctionsF::InvoiceNumberReserved($invoiceNumberDate[0])) { if ($this->uselayout != 'mail') { $document->setTitle(tsmText::_('COM_VIRTUEMART_PAYMENT_INVOICE')); return; } } $this->invoiceNumber = $invoiceNumberDate[0]; $this->invoiceDate = $invoiceNumberDate[1]; if (!$this->invoiceNumber or empty($this->invoiceNumber)) { vmError('Cant create pdf, createInvoiceNumber failed'); if ($this->uselayout != 'mail') { return; } } } else { // Could OR should not create Invoice Number, createInvoiceNumber failed if ($this->uselayout != 'mail') { return; } } } $virtuemart_vendor_id = $orderDetails['details']['BT']->virtuemart_vendor_id; $emailCurrencyId = $orderDetails['details']['BT']->user_currency_id; $exchangeRate = FALSE; if (!class_exists('vmPSPlugin')) { require JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'; } JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmgetEmailCurrency', array($orderDetails['details']['BT']->virtuemart_paymentmethod_id, $orderDetails['details']['BT']->virtuemart_order_id, &$emailCurrencyId)); if (!class_exists('CurrencyDisplay')) { require VMPATH_ADMIN . DS . 'helpers' . DS . 'currencydisplay.php'; } $currency = CurrencyDisplay::getInstance($emailCurrencyId, $virtuemart_vendor_id); if ($emailCurrencyId) { $currency->exchangeRateShopper = $orderDetails['details']['BT']->user_currency_rate; } $this->assignRef('currency', $currency); //Create BT address fields $userFieldsModel = tmsModel::getModel('userfields'); $_userFields = $userFieldsModel->getUserFields('account', array('captcha' => true, 'delimiters' => true), array('delimiter_userinfo', 'user_is_vendor', 'username', 'password', 'password2', 'agreed', 'address_type')); $userfields = $userFieldsModel->getUserFieldsFilled($_userFields, $orderDetails['details']['BT']); $this->assignRef('userfields', $userfields); //Create ST address fields $orderst = array_key_exists('ST', $orderDetails['details']) ? $orderDetails['details']['ST'] : $orderDetails['details']['BT']; $shipmentFieldset = $userFieldsModel->getUserFields('shipment', array(), array('delimiter_userinfo', 'username', 'email', 'password', 'password2', 'agreed', 'address_type')); $shipmentfields = $userFieldsModel->getUserFieldsFilled($shipmentFieldset, $orderst); $this->assignRef('shipmentfields', $shipmentfields); $civility = ""; foreach ($userfields['fields'] as $field) { if ($field['name'] == "title") { $civility = $field['value']; break; } } $company = empty($orderDetails['details']['BT']->company) ? "" : $orderDetails['details']['BT']->company . ", "; $shopperName = $company . $civility . ' ' . $orderDetails['details']['BT']->first_name . ' ' . $orderDetails['details']['BT']->last_name; $this->assignRef('shopperName', $shopperName); $this->assignRef('civility', $civility); // Create an array to allow orderlinestatuses to be translated // We'll probably want to put this somewhere in ShopFunctions.. $orderStatusModel = tmsModel::getModel('orderstatus'); $_orderstatuses = $orderStatusModel->getOrderStatusList(true); $orderstatuses = array(); foreach ($_orderstatuses as $_ordstat) { $orderstatuses[$_ordstat->order_status_code] = tsmText::_($_ordstat->order_status_name); } $this->assignRef('orderstatuslist', $orderstatuses); $this->assignRef('orderstatuses', $orderstatuses); $_itemStatusUpdateFields = array(); $_itemAttributesUpdateFields = array(); foreach ($orderDetails['items'] as $_item) { // $_itemStatusUpdateFields[$_item->virtuemart_order_item_id] = JHtml::_('select.genericlist', $orderstatuses, "item_id[".$_item->virtuemart_order_item_id."][order_status]", 'class="selectItemStatusCode"', 'order_status_code', 'order_status_name', $_item->order_status, 'order_item_status'.$_item->virtuemart_order_item_id,true); $_itemStatusUpdateFields[$_item->virtuemart_order_item_id] = $_item->order_status; } if (empty($orderDetails['shipmentName'])) { if (!class_exists('vmPSPlugin')) { require JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'; } JPluginHelper::importPlugin('vmshipment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEShipment', array($orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_shipmentmethod_id, &$orderDetails['shipmentName'])); } if (empty($orderDetails['paymentName'])) { if (!class_exists('vmPSPlugin')) { require JPATH_VM_PLUGINS . DS . 'vmpsplugin.php'; } JPluginHelper::importPlugin('vmpayment'); $dispatcher = JDispatcher::getInstance(); $returnValues = $dispatcher->trigger('plgVmOnShowOrderFEPayment', array($orderDetails['details']['BT']->virtuemart_order_id, $orderDetails['details']['BT']->virtuemart_paymentmethod_id, &$orderDetails['paymentName'])); } $vendorModel = tmsModel::getModel('vendor'); $vendor = $vendorModel->getVendor($virtuemart_vendor_id); $vendorModel->addImages($vendor); $vendor->vendorFields = $vendorModel->getVendorAddressFields($virtuemart_vendor_id); if (tsmConfig::get('enable_content_plugin', 0)) { if (!class_exists('shopFunctionsF')) { require VMPATH_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php'; } shopFunctionsF::triggerContentPlugin($vendor, 'vendor', 'vendor_store_desc'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor', 'vendor_terms_of_service'); shopFunctionsF::triggerContentPlugin($vendor, 'vendor', 'vendor_legal_info'); } $this->assignRef('vendor', $vendor); if (strpos($layout, 'mail') !== false) { $lineSeparator = "<br />"; } else { $lineSeparator = "\n"; } $this->assignRef('headFooter', $this->showHeaderFooter); //Attention, this function will be removed, it wont be deleted, but it is obsoloete in any view.html.php $vendorAddress = shopFunctionsF::renderVendorAddress($virtuemart_vendor_id, $lineSeparator); $this->assignRef('vendorAddress', $vendorAddress); $vendorEmail = $vendorModel->getVendorEmail($virtuemart_vendor_id); $vars['vendorEmail'] = $vendorEmail; // this is no setting in BE to change the layout ! //shopFunctionsF::setVmTemplate($this,0,0,$layoutName); if (strpos($layout, 'mail') !== false) { if ($this->doVendor) { //Old text key COM_VIRTUEMART_MAIL_SUBJ_VENDOR_C $this->subject = tsmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_' . $orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($currency->priceDisplay($orderDetails['details']['BT']->order_total, $currency)), $orderDetails['details']['BT']->order_number); $recipient = 'vendor'; } else { $this->subject = tsmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_SHOPPER_' . $orderDetails['details']['BT']->order_status, $vendor->vendor_store_name, strip_tags($currency->priceDisplay($orderDetails['details']['BT']->order_total, $currency)), $orderDetails['details']['BT']->order_number); $recipient = 'shopper'; } $this->assignRef('recipient', $recipient); } $tpl = null; parent::display($tpl); }