Beispiel #1
0
 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'];
 }
Beispiel #2
0
 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;
 }