public function execute() { $request_uri = $_SERVER['REQUEST_URI']; $template_processor = SJB_System::getTemplateProcessor(); $callback_page_uri = ''; preg_match('#.*/system/payment/callback/([^/?]+)#', $request_uri, $mm); if (!empty($mm)) { $gateway_id = $mm[1]; $redirectPage = $callback_page_uri . $gateway_id . "/"; preg_match("(.*{$redirectPage}([^/]*)/?)", $request_uri, $invoice_sid); $invoice_sid = !empty($invoice_sid[1]) ? $invoice_sid[1] : ''; $redirectPage = $callback_page_uri . $gateway_id . "/" . $invoice_sid; preg_match("(.*{$redirectPage}([^/]*)/?)", $request_uri, $tt); $redirectPage = !empty($tt[1]) ? $tt[1] : ''; $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); if (!empty($invoice) && $invoice->getStatus() == SJB_Invoice::INVOICE_STATUS_PAID) { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . "/payment-completed/"); } $gateway = SJB_PaymentGatewayManager::getObjectByID($gateway_id); $gateway_caption = $gateway->getPropertyValue('caption'); $invoice = $gateway->getPaymentFromCallbackData($_REQUEST); SJB_PaymentLogManager::recordPaymentLog($gateway->getPaymentStatusFromCallbackData($_REQUEST), $gateway_caption, $_REQUEST); if (is_null($invoice)) { $errors = $gateway->getErrors(); $template_processor->assign('errors', $errors); $template_processor->display('callback_payment_page.tpl'); } else { $status = $invoice->getStatus(); if ($status == SJB_Invoice::INVOICE_STATUS_VERIFIED) { SJB_Statistics::addStatisticsFromInvoice($invoice); $success_url = $invoice->getSuccessPageURL(); $page = empty($redirectPage) ? '' : '&' . $redirectPage; SJB_HelperFunctions::redirect($success_url . '?invoice_sid=' . $invoice->getSID() . $page); } elseif ($status == SJB_Invoice::INVOICE_STATUS_PENDING) { $template_processor->assign('message', 'INVOICE_WAITING'); $template_processor->display('callback_payment_page.tpl'); } else { SJB_InvoiceManager::markUnPaidInvoiceBySID($invoice_sid); $payment_error = 1; if ($gateway_id == 'paypal_pro') { $httpPostResponse = SJB_Request::getVar('http_post_response', false); if (!empty($httpPostResponse['L_SHORTMESSAGE0']) && urldecode($httpPostResponse['L_SHORTMESSAGE0']) == 'Authentication/Authorization Failed') { $payment_error = 2; } } SJB_HelperFunctions::redirect(SJB_System::getSystemSettings("SITE_URL") . "/view-invoice/?sid=" . $invoice_sid . "&payment_error=" . $payment_error . "&payment_gateway=" . $gateway_id); } } } else { $errors['INVOICE_ID_IS_NOT_SET'] = 1; $template_processor->assign('errors', $errors); $template_processor->display('callback_payment_page.tpl'); } }
public function execute() { if (SJB_Request::isAjax()) { die(json_encode($this->getPayPalStateList())); } $getInvoiceId = SJB_Request::getInt('payment_id', 0, 'GET'); $this->invoice = SJB_InvoiceManager::getObjectBySID($getInvoiceId); if ($this->invoiceValidation($this->invoice)) { if ($this->isPayNowButtonPressed()) { $this->processPayNowButtonClick(); } else { $this->displayForm(); } } }
public function execute() { $ou = SJB_UserManager::getOnlineUsers(); $onlineUsers = array(); $totalOnlineUsers = 0; $userGroups = SJB_UserGroupManager::createTemplateStructureForUserGroups(); foreach ($userGroups as $userGroup) { $onlineUsers[$userGroup["id"]]["count"] = 0; $onlineUsers[$userGroup["id"]]["caption"] = $userGroup["caption"]; } foreach ($ou as $value) { $onlineUsers[$value["type"]]["count"]++; $totalOnlineUsers++; } $theme = SJB_Settings::getValue('TEMPLATE_USER_THEME', 'default'); $themePath = SJB_TemplatePathManager::getAbsoluteThemePath($theme); // FLAGGED LISTINGS $allListingTypes = SJB_ListingTypeManager::getAllListingTypesInfo(); $totalFlagsNum = array(); foreach ($allListingTypes as $type) { $totalFlagsNum[$type['id']] = SJB_ListingManager::getFlagsNumberByListingTypeSID($type['sid'], $filter = null, $groupByListingSID = true); } $files = $this->getCssFiles($themePath); $tp = SJB_System::getTemplateProcessor(); $tp->assign('totalFlagsNum', $totalFlagsNum); $tp->assign('usersInfo', SJB_UserManager::getUsersInfo()); $tp->assign('groupsInfo', SJB_UserManager::getGroupsInfo()); $tp->assign('listingsInfo', SJB_ListingManager::getListingsInfo()); $tp->assign('listingTypesInfo', SJB_ListingTypeManager::getAllListingTypesInfo()); $tp->assign('invoicesInfo', SJB_InvoiceManager::getInvoicesInfo()); $tp->assign('unpaidInvoices', SJB_InvoiceManager::getTotalUnpaidInvoices()); $tp->assign('totalInvoices', SJB_InvoiceManager::getTotalInvoices()); $i18n = SJB_I18N::getInstance(); $lang = $i18n->getLanguageData($i18n->getCurrentLanguage()); $tp->assign("today", strftime($lang['date_format'], time())); // ранее были данные за период: месяц (последние 30 дней), неделя (последние 7 дней) // теперь - текущий месяц и текущая неделя $currMonth = strftime($lang['date_format'], mktime(0, 0, 0, date("m"), 1, date("Y"))); $currWeek = strftime($lang['date_format'], mktime(0, 0, 0, date("m"), date("d") - date("N") + 1, date("Y"))); $tp->assign("weekAgo", $currWeek); $tp->assign("monthAgo", $currMonth); $tp->assign('onlineUsers', $onlineUsers); $tp->assign('totalOnlineUsers', $totalOnlineUsers); if (count($files) > 0) { $tp->assign("file", $files[0]); } $tp->display("index.tpl"); }
public function execute() { $listingSid = SJB_Request::getVar("listing_id", null, 'default', 'int'); if ($listingSid) { $listing = SJB_ListingManager::getObjectBySID($listingSid); if (!is_null($listing) && !$listing->isPriority()) { $productInfo = $listing->getProductInfo(); if ($productInfo['priority']) { SJB_ListingManager::makePriorityBySID($listingSid); } else { $userSid = $listing->getUserSID(); $productSid = $productInfo['product_sid']; $subTotalPrice = $productInfo['upgrade_to_priority_listing_price']; $listingTitle = $listing->getProperty('Title')->getValue(); $listingTypeSid = $listing->getListingTypeSID(); $listingTypeId = SJB_ListingTypeManager::getListingTypeIDBySID($listingTypeSid); $newProductName = "Upgrade of \"{$listingTitle}\" {$listingTypeId} to priority"; $newProductInfo = SJB_ShoppingCart::createInfoForCustomProduct($userSid, $productSid, $listingSid, $subTotalPrice, $newProductName, 'priorityListing'); if ($subTotalPrice <= 0) { SJB_InvoiceManager::generateInvoice($newProductInfo, $userSid, $subTotalPrice, SJB_System::getSystemSettings('SITE_URL') . '/make-priority/'); SJB_ListingManager::makeFeaturedBySID($listingSid); } else { SJB_ShoppingCart::createCustomProduct($newProductInfo, $userSid); $shoppingUrl = SJB_System::getSystemSettings('SITE_URL') . '/shopping-cart/'; SJB_HelperFunctions::redirect($shoppingUrl); } } } else { if (is_null($listing)) { $errors['INVALID_LISTING_ID'] = 1; } else { $errors['LISTING_ALREADY_PRIORITY'] = 1; } } } else { $errors['PARAMETERS_MISSED'] = 1; } $tp = SJB_System::getTemplateProcessor(); $tp->assign("errors", isset($errors) ? $errors : null); $tp->display("make_listing_priority.tpl"); }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $action = SJB_Request::getVar('action', false); $sid = SJB_Request::getVar('sid', 0); $errors = array(); switch ($action) { case 'activate': SJB_ProductsManager::activateProductBySID($sid); break; case 'deactivate': SJB_ProductsManager::deactivateProductBySID($sid); break; case 'delete': if (SJB_ContractManager::getContractQuantityByProductSID($sid) || SJB_InvoiceManager::getInvoiceQuantityByProductSID($sid)) { $errors['PRODUCT_IS_IN_USE'] = 1; } else { SJB_ProductsManager::deleteProductBySID($sid); } break; } $products = SJB_ProductsManager::getAllProductsInfo(); foreach ($products as $key => $productInfo) { $product = new SJB_Product($productInfo, $productInfo['product_type']); $product->setNumberOfListings(1); if ($productInfo['product_type'] != 'post_listings' && $productInfo['product_type'] != 'mixed_product') { $products[$key]['number_of_postings'] = '-'; } $products[$key]['price'] = $product->getPrice(); $products[$key]['user_group'] = SJB_UserGroupManager::getUserGroupInfoBySID($productInfo['user_group_sid']); $products[$key]['product_type'] = SJB_ProductsManager::getProductTypeByID($productInfo['product_type']); $products[$key]['subscribed_users'] = SJB_ContractManager::getContractQuantityByProductSID($productInfo['sid']); $products[$key]['invoices'] = SJB_InvoiceManager::getInvoiceQuantityByProductSID($productInfo['sid']); if (!empty($productInfo['availability_to']) && $productInfo['availability_to'] <= date('Y-m-d')) { $products[$key]['expired'] = 1; } } $tp->assign('errors', $errors); $tp->assign('products', $products); $tp->display('products.tpl'); }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $errors = array(); $gatewayId = SJB_Request::getVar('gatewayId', 'cash_gateway'); $gateway = SJB_PaymentGatewayManager::getObjectByID($gatewayId); if (isset($gateway) && in_array($gatewayId, array('cash_gateway', 'wire_transfer'))) { $invoiceSid = SJB_Request::getVar('invoice_sid'); $invoice = SJB_InvoiceManager::getObjectBySID($invoiceSid); if (isset($invoice)) { $currentUser = SJB_UserManager::getCurrentUserInfo(); if ($currentUser['sid'] == $invoice->getPropertyValue('user_sid')) { if ($invoice->getStatus() == SJB_Invoice::INVOICE_STATUS_UNPAID) { $tp->assign('invoice_sid', $invoiceSid); $tp->assign('item_name', $invoice->getProductNames()); $tp->assign('amount', $invoice->getPropertyValue('total')); $tp->assign('user', $currentUser); SJB_InvoiceManager::saveInvoice($invoice); SJB_ShoppingCart::deleteItemsFromCartByUserSID($currentUser['sid']); } else { $errors['INVOICE_IS_NOT_UNPAID'] = true; } } else { $errors['NOT_OWNER'] = true; } } else { $errors['INVALID_INVOICE_ID'] = true; } $template = $gateway->getTemplate(); $tp->assign('errors', $errors); } else { $errors['INVALID_GATEWAY'] = true; $tp->assign('ERRORS', $errors); $template = 'errors.tpl'; } $tp->display($template); }
public function execute() { $invoiceSID = SJB_Request::getVar('invoice_sid', null, 'default', 'int'); $tp = SJB_System::getTemplateProcessor(); $action = SJB_Request::getVar('action', false); $checkPaymentErrors = array(); $currentUser = SJB_UserManager::getCurrentUser(); if ($action == 'pay_for_products') { $subscribe = SJB_Request::getVar('subscribe', false); $subTotalPrice = SJB_Request::getVar('sub_total_price', 0); $products = SJB_ShoppingCart::getAllProductsByUserSID($currentUser->getSID()); $codeInfo = array(); $index = 1; $items = array(); foreach ($products as $product) { $product_info = unserialize($product['product_info']); $items['products'][$index] = $product_info['sid']; $qty = !empty($product_info['number_of_listings']) ? $product_info['number_of_listings'] : null; if ($qty > 0) { $items['price'][$index] = round($product_info['price'] / $qty, 2); } else { $items['price'][$index] = round($product_info['price'], 2); } $items['amount'][$index] = $product_info['price']; $items['custom_item'][$index] = ""; $items['qty'][$index] = $qty; $items['custom_info'][$index]['shoppingCartRecord'] = $product['sid']; if ($product_info['product_type'] == 'banners' && !empty($product_info['banner_info'])) { $items['custom_info'][$index]['banner_info'] = $product_info['banner_info']; } $index++; SJB_PromotionsManager::preparePromoCodeInfoByProductPromoCodeInfo($product_info, $codeInfo); } $userSID = $currentUser->getSID(); $invoiceSID = SJB_InvoiceManager::generateInvoice($items, $userSID, $subTotalPrice, SJB_System::getSystemSettings('SITE_URL') . "/create-contract/", (bool) $subscribe); SJB_PromotionsManager::addCodeToHistory($codeInfo, $invoiceSID, $userSID); } $gatewayId = SJB_Request::getVar('gw', false); if (SJB_Request::$method == SJB_Request::METHOD_POST && !$action && $gatewayId == 'authnet_sim') { if (isset($_REQUEST['submit'])) { $gateway = SJB_PaymentGatewayManager::getObjectByID($gatewayId, true); $subscriptionResult = $gateway->createSubscription($_REQUEST); if ($subscriptionResult !== true) { $tp->assign('form_submit_url', $_SERVER['REQUEST_URI']); $tp->assign('form_data_source', $_REQUEST); $tp->assign('errors', $subscriptionResult); $tp->display('recurring_payment_page.tpl'); } else { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/my-products/?subscriptionComplete=true'); } } else { $tp->assign('form_submit_url', $_SERVER['REQUEST_URI']); $tp->assign('form_data_source', $_REQUEST); $tp->display('recurring_payment_page.tpl'); } } else { if (!is_null($invoiceSID)) { $invoice_info = SJB_InvoiceManager::getInvoiceInfoBySID($invoiceSID); $invoice = new SJB_Invoice($invoice_info); if (SJB_PromotionsManager::isPromoCodeExpired($invoiceSID)) { $checkPaymentErrors['PROMOTION_TOO_MANY_USES'] = true; } else { $invoice->setSID($invoiceSID); if (count($invoice->isValid($invoiceSID)) == 0) { $invoiceUserSID = $invoice->getPropertyValue('user_sid'); $currentUserSID = SJB_UserManager::getCurrentUserSID(); if ($invoiceUserSID === $currentUserSID) { $payment_gateway_forms = SJB_InvoiceManager::getPaymentForms($invoice); $tp->assign('productsNames', $invoice->getProductNames()); $tp->assign('gateways', $payment_gateway_forms); $tp->assign('invoice_info', $invoice_info); } else { $checkPaymentErrors['NOT_OWNER'] = true; } } else { $checkPaymentErrors['WRONG_INVOICE_PARAMETERS'] = true; } } $tp->assign('checkPaymentErrors', $checkPaymentErrors); $tp->display('invoice_payment_page.tpl'); } else { $tp->display('recurring_payment_page.tpl'); } } }
private function redirectToMyProductsPage($callbackData) { $invoice_sid = isset($callbackData['item_number']) ? $callbackData['item_number'] : null; $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); $paymentStatus = $invoice->getStatus(); $invoice->setCallbackData($callbackData); $items = $invoice->getPropertyValue('items'); $countOfProducts = 0; $gatewayId = $this->details->getProperty('id'); $invoice->setPropertyValue('payment_method', $gatewayId->getValue()); $userSid = $invoice->getUserSID(); if ($paymentStatus == SJB_Invoice::INVOICE_STATUS_PENDING) { foreach ($items['products'] as $key => $product) { if ("SUCCESS" == strtoupper($callbackData['http_post_response'][$countOfProducts]["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($callbackData['http_post_response'][$countOfProducts]["ACK"])) { $product_info = $invoice->getItemValue($key); $countOfProducts += 1; SJB_ShoppingCart::deleteItemFromCartBySID($product_info['shoppingCartRecord'], $userSid); } else { $productInfo = SJB_ProductsManager::getProductInfoBySID($product); $this->failedProducts = $this->failedProducts . $productInfo['name'] . ','; $countOfProducts += 1; } } SJB_InvoiceManager::saveInvoice($invoice); $this->failedProducts = substr($this->failedProducts, 0, -1); SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/my-products/?subscriptionComplete=true&failedProducts=' . $this->failedProducts); } else { $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); SJB_InvoiceManager::saveInvoice($invoice); SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/my-products/?subscriptionComplete=false'); } }
public static function sendInvoiceToCustomer($invoice_sid, $user_sid) { $invoice_info = SJB_InvoiceManager::getInvoiceInfoBySID($invoice_sid); $invoice_structure = SJB_InvoiceManager::createInvoiceTemplate($invoice_info); $user = SJB_UserManager::getObjectBySID($user_sid); $userInfo = SJB_UserManager::createTemplateStructureForUser($user); $parentSID = SJB_Array::get($userInfo, 'parent_sid'); if ($parentSID > 0) { $user = SJB_UserManager::getObjectBySID($parentSID); $userInfo = SJB_UserManager::createTemplateStructureForUser($user); } $data = array('user' => $userInfo, 'invoice' => $invoice_structure); $email = SJB_EmailTemplateEditor::getEmail($userInfo['email'], self::SEND_INVOICE_SID, $data); return $email->send('Send Invoice to Customer'); }
public function setNewPropertiesToInvoice($productsInfo) { $subTotal = 0; $items = array(); foreach ($productsInfo as $key => $productInfo) { $items['products'][$key] = $productInfo['sid']; $items['qty'][$key] = !empty($productInfo['number_of_listings']) ? $productInfo['number_of_listings'] : null; $items['price'][$key] = $productInfo['price']; $items['amount'][$key] = $productInfo['amount']; $items['custom_item'][$key] = ""; if ($productInfo['product_type'] == 'banners' && !empty($productInfo['banner_info'])) { $items['custom_info'][$key]['banner_info'] = $productInfo['banner_info']; } $subTotal += $productInfo['amount']; } $taxInfo = SJB_TaxesManager::getTaxInfoByUserSidAndPrice($this->getUserSID(), $subTotal); $totalPrice = SJB_InvoiceManager::getTotalPrice($subTotal, $taxInfo['tax_amount'], $taxInfo['price_includes_tax']); $this->setPropertyValue('total', $totalPrice); $this->setPropertyValue('sub_total', $subTotal); $this->setPropertyValue('tax_info', $taxInfo); $this->setPropertyValue('items', $items); }
function createSubscription($payment_data) { $validation_result = $this->validatePayment($payment_data); if ($validation_result !== true) { return $validation_result; } $properties = $this->details->getProperties(); $api_login_id = $properties['authnet_api_login_id']->getValue(); $transaction_key = $properties['authnet_api_transaction_key']->getValue(); $use_test_account = $properties['authnet_use_test_account']->getValue(); $invoice = SJB_InvoiceManager::getObjectBySID($payment_data['item_number']); if (empty($invoice)) { return; } $items = $invoice->getPropertyValue('items'); $taxInfo = $invoice->getPropertyValue('tax_info'); if (!empty($items['products'])) { foreach ($items['products'] as $key => $product) { if ($product != -1) { $product_info = $invoice->getItemValue($key); $payment_data['item_number'] = $invoice->getSID(); $payment_data['item_name'] = 'Payment for product ' . $product_info['name']; $payment_data['x_description'] = 'Payment for product ' . $product_info['name']; $payment_data['x_amount'] = $product_info['amount']; if ($taxInfo && !$taxInfo['price_includes_tax']) { $payment_data['x_amount'] += SJB_TaxesManager::getTaxAmount($payment_data['x_amount'], $taxInfo['tax_rate'], $taxInfo['price_includes_tax']); } $aimProcessor = new AuthnetAIMProcessor($api_login_id, $transaction_key, $use_test_account); $aimProcessor->setTransactionType('AUTH_CAPTURE'); $aimProcessor->setParameter('x_login', $api_login_id); $aimProcessor->setParameter('x_tran_key', $transaction_key); $aimProcessor->setParameter('x_card_num', $payment_data['x_card_num']); $aimProcessor->setParameter('x_amount', $payment_data['x_amount']); $aimProcessor->setParameter('x_exp_date', $payment_data['x_exp_date']); $aimProcessor->process(); if (!$aimProcessor->isApproved()) { return array($aimProcessor->getResponseMessage()); } $recurringID = null; if (!empty($product_info['recurring'])) { $product = new SJB_Product($product_info, $product_info['product_type']); $expiration_period = $product->getExpirationPeriod(); $arbProcessor = new AuthnetARBProcessor($api_login_id, $transaction_key, $use_test_account); $arbProcessor->setParameter('refID', $payment_data['item_number']); $arbProcessor->setParameter('subscrName', $payment_data['x_description']); $arbProcessor->setParameter('interval_length', $expiration_period); $arbProcessor->setParameter('interval_unit', 'days'); $arbProcessor->setParameter('startDate', date("Y-m-d", strtotime("+ {$expiration_period} days"))); $arbProcessor->setParameter('totalOccurrences', 9999); $arbProcessor->setParameter('trialOccurrences', 0); $arbProcessor->setParameter('amount', $payment_data['x_amount']); $arbProcessor->setParameter('trialAmount', 0.0); $arbProcessor->setParameter('cardNumber', $payment_data['x_card_num']); $arbProcessor->setParameter('expirationDate', $payment_data['x_exp_date']); $arbProcessor->setParameter('orderInvoiceNumber', $payment_data['item_number']); $arbProcessor->setParameter('orderDescription', $payment_data['x_description']); $arbProcessor->setParameter('firstName', $payment_data['x_first_name']); $arbProcessor->setParameter('lastName', $payment_data['x_last_name']); $arbProcessor->setParameter('company', $payment_data['x_company']); $arbProcessor->setParameter('address', $payment_data['x_address']); $arbProcessor->setParameter('city', $payment_data['x_city']); $arbProcessor->setParameter('state', $payment_data['x_state']); $arbProcessor->setParameter('zip', $payment_data['x_zip']); $arbProcessor->createAccount(); if (!$arbProcessor->isSuccessful()) { return array($arbProcessor->getResponse()); } $recurringID = $arbProcessor->getSubscriberID(); } $user_sid = $invoice->getUserSID(); $listingNumber = $product_info['qty']; $contract = new SJB_Contract(array('product_sid' => $product, 'recurring_id' => $recurringID, 'gateway_id' => 'authnet_sim', 'numberOfListings' => $listingNumber)); $contract->setUserSID($user_sid); $contract->setPrice($product_info['amount']); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($product_info['shoppingCartRecord'], $user_sid); $bannerInfo = $product_info['banner_info']; if ($product_info['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $user_sid, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($user_sid, $bannerGroup); } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($user_sid); } if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($user_sid)) { SJB_Notifications::sendSubscriptionActivationLetter($user_sid, $product_info); } } } } $invoice->setCallbackData($payment_data); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); SJB_InvoiceManager::saveInvoice($invoice); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); } return true; }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $template = 'edit_invoice.tpl'; $errors = array(); $invoiceErrors = array(); $invoiceSID = SJB_Request::getVar('sid', false); $action = SJB_Request::getVar('action', false); $tcpdfError = SJB_Request::getVar('error', false); if ($tcpdfError) { $invoiceErrors[] = $tcpdfError; } $invoiceInfo = SJB_InvoiceManager::getInvoiceInfoBySID($invoiceSID); $user_structure = null; if ($invoiceInfo) { $product_info = array(); if (array_key_exists('custom_info', $invoiceInfo['items'])) { $product_info = $invoiceInfo['items']['custom_info']; } $invoiceInfo = array_merge($invoiceInfo, $_REQUEST); $invoiceInfo['items']['custom_info'] = $product_info; $includeTax = $invoiceInfo['include_tax']; $invoice = new SJB_Invoice($invoiceInfo); $invoice->setSID($invoiceSID); $userSID = $invoice->getPropertyValue('user_sid'); $userExists = SJB_UserManager::isUserExistsByUserSid($userSID); $subUserSID = $invoice->getPropertyValue('subuser_sid'); if (!empty($subUserSID)) { $userInfo = SJB_UserManager::getUserInfoBySID($subUserSID); $username = $userInfo['username'] . '/' . $userInfo['email']; } else { $userInfo = SJB_UserManager::getUserInfoBySID($userSID); $username = $userInfo['FirstName'] . ' ' . $userInfo['LastName'] . ' ' . $userInfo['ContactName'] . ' ' . $userInfo['CompanyName'] . '/' . $userInfo['email']; } $taxInfo = $invoice->getPropertyValue('tax_info'); $productsSIDs = SJB_ProductsManager::getProductsIDsByUserGroupSID($userInfo['user_group_sid']); $products = array(); foreach ($productsSIDs as $key => $productSID) { $productInfo = SJB_ProductsManager::getProductInfoBySID($productSID); if (!empty($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'volume_based') { $volumeBasedPricing = $productInfo['volume_based_pricing']; $minListings = min($volumeBasedPricing['listings_range_from']); $maxListings = max($volumeBasedPricing['listings_range_to']); $countListings = array(); for ($i = $minListings; $i <= $maxListings; $i++) { $countListings[$i]['number_of_listings'] = $i; for ($j = 1; $j <= count($volumeBasedPricing['listings_range_from']); $j++) { if ($i >= $volumeBasedPricing['listings_range_from'][$j] && $i <= $volumeBasedPricing['listings_range_to'][$j]) { $countListings[$i]['price'] = $volumeBasedPricing['price_per_unit'][$j]; } } } $productInfo['count_listings'] = $countListings; } $products[$key] = $productInfo; } $addForm = new SJB_Form($invoice); $addForm->registerTags($tp); $tp->assign('userExists', $userExists); $tp->assign('products', $products); $tp->assign('invoice_sid', $invoiceSID); $tp->assign('include_tax', $includeTax); $tp->assign('username', trim($username)); if ($action) { switch ($action) { case 'save': case 'apply': $invoiceErrors = $invoice->isValid(); if (empty($invoiceErrors) && $addForm->isDataValid($errors)) { $invoice->setFloatNumbersIntoValidFormat(); SJB_InvoiceManager::saveInvoice($invoice); if ($action == 'save') { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings("SITE_URL") . '/manage-invoices/'); } } else { $invoiceDate = SJB_I18N::getInstance()->getInput('date', $invoice->getPropertyValue('date')); $invoice->setPropertyValue('date', $invoiceDate); } $invoice->setFloatNumbersIntoValidFormat(); $taxInfo['tax_amount'] = SJB_I18N::getInstance()->getInput('float', $taxInfo['tax_amount']); break; case 'print': case 'download_pdf_version': $user = SJB_UserManager::getObjectBySID($userSID); $user_structure = SJB_UserManager::createTemplateStructureForUser($user); $template = 'print_invoice.tpl'; $username = SJB_Array::get($user_structure, 'CompanyName') . ' ' . SJB_Array::get($user_structure, 'FirstName') . ' ' . SJB_Array::get($user_structure, 'LastName'); $tp->assign('username', trim($username)); $tp->assign('user', $user_structure); $tp->assign('tax', $taxInfo); if ($action == 'download_pdf_version') { $template = 'invoice_to_pdf.tpl'; $filename = 'invoice_' . $invoiceSID . '.pdf'; try { SJB_HelperFunctions::html2pdf($tp->fetch($template), $filename); exit; } catch (Exception $e) { SJB_Error::writeToLog($e->getMessage()); SJB_HelperFunctions::redirect(SJB_System::getSystemSettings("SITE_URL") . '/edit-invoice/?sid=' . $invoiceSID . '&error=TCPDF_ERROR'); } } break; case 'send_invoice': $result = SJB_Notifications::sendInvoiceToCustomer($invoiceSID, $userSID); if ($result) { echo SJB_I18N::getInstance()->gettext("Backend", "Invoice successfully sent"); } else { echo SJB_I18N::getInstance()->gettext("Backend", "Invoice not sent"); } exit; break; } } $transactions = SJB_TransactionManager::getTransactionsByInvoice($invoiceSID); $tp->assign('tax', $taxInfo); $tp->assign('transactions', $transactions); } else { $tp->assign('action', 'edit'); $errors[] = 'WRONG_INVOICE_ID_SPECIFIED'; $template = 'errors.tpl'; } $tp->assign("errors", array_merge($errors, $invoiceErrors)); $tp->display($template); }
public static function generateInvoice($items, $userSID, $subTotalPrice, $successPageUrl, $isRecurring = false) { $taxInfo = SJB_TaxesManager::getTaxInfoByUserSidAndPrice($userSID, $subTotalPrice); $totalPrice = SJB_InvoiceManager::getTotalPrice($subTotalPrice, $taxInfo['tax_amount'], $taxInfo['price_includes_tax']); $invoiceSID = null; if ($totalPrice > 0) { $invoiceSID = SJB_InvoiceManager::getExistingInvoiceSID($userSID, $items, $taxInfo, SJB_Invoice::INVOICE_STATUS_UNPAID, $isRecurring); } if (!$invoiceSID) { $invoiceInfo = array('user_sid' => $userSID, 'include_tax' => !empty($taxInfo['sid']) ? 1 : 0, 'total' => $totalPrice, 'sub_total' => $subTotalPrice, 'success_page_url' => $successPageUrl, 'status' => $totalPrice == 0 ? SJB_Invoice::INVOICE_STATUS_VERIFIED : SJB_Invoice::INVOICE_STATUS_UNPAID, 'tax_info' => $taxInfo, 'items' => $items, 'is_recurring' => $isRecurring); $invoice = new SJB_Invoice($invoiceInfo); SJB_InvoiceManager::saveInvoice($invoice); $invoiceSID = $invoice->getSID(); } return $invoiceSID; }
function getPaymentFromCallbackData($callback_data) { $invoice_sid = isset($callback_data['item_number']) ? $callback_data['item_number'] : null; if (is_null($invoice_sid)) { $this->errors['INVOICE_ID_IS_NOT_SET'] = 1; return null; } $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); if (is_null($invoice)) { $this->errors['NONEXISTED_INVOICE_ID_SPECIFIED'] = 1; return null; } if ($invoice->getStatus() != SJB_Invoice::INVOICE_STATUS_UNPAID) { $this->errors['INVOICE_IS_NOT_UNPAID'] = $invoice->getStatus(); return null; } $invoice->setCallbackData($callback_data); if ($this->isPaymentVerified($invoice)) { $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_VERIFIED); } else { $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); } if (!$this->checkPaymentAmount($invoice)) { return null; } $id = $this->details->getProperty('id'); $invoice->setPropertyValue('payment_method', $id->getValue()); SJB_InvoiceManager::saveInvoice($invoice); if (isset($callback_data['x_trans_id'])) { $transactionId = $callback_data['x_trans_id']; $transactionInfo = array('transaction_id' => $transactionId, 'invoice_sid' => $invoice->getSID(), 'amount' => $invoice->getPropertyValue('total'), 'payment_method' => $invoice->getPropertyValue('payment_method'), 'user_sid' => $invoice->getPropertyValue('user_sid')); $transaction = new SJB_Transaction($transactionInfo); SJB_TransactionManager::saveTransaction($transaction); } return $invoice; }
/** * Recurring notification handlign function * @param array|null $callback_data Notification data */ function handleRecurringNotification($callback_data) { if (SJB_Array::get($callback_data, 'txn_type') == 'subscr_cancel' || SJB_Array::get($callback_data, 'txn_type') == 'subscr_eot') { SJB_ContractManager::removeSubscriptionId(SJB_Array::get($callback_data, 'subscr_id')); return; } if (SJB_Array::get($callback_data, 'txn_type') != 'subscr_payment') { return; } $invoice_sid = isset($callback_data['item_number']) ? $callback_data['item_number'] : null; if (is_null($invoice_sid)) { return; } $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); if (is_null($invoice)) { return null; } $reactivation = false; $status = $invoice->getStatus(); if ($invoice->getStatus() == SJB_Invoice::INVOICE_STATUS_PAID) { // Пришёл рекьюринг платёж $invoice->setSID(null); $invoice->setDate(null); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); $reactivation = true; } $invoice->setCallbackData($callback_data); if ($this->isPaymentVerified($invoice) && in_array($callback_data['payment_status'], array('Completed', 'Processed'))) { $items = $invoice->getPropertyValue('items'); $user_sid = $invoice->getUserSID(); $subscriptionSID = $callback_data['custom']; if (!empty($items['products'])) { $recurringProductsInfo = array(); foreach ($items['products'] as $key => $product) { if ($product != -1) { $productInfo = $invoice->getItemValue($key); if ($status == SJB_Invoice::INVOICE_STATUS_PAID && $subscriptionSID == $product) { $listingNumber = $productInfo['qty']; $contract = new SJB_Contract(array('product_sid' => $product, 'recurring_id' => $callback_data['subscr_id'], 'gateway_id' => 'paypal_standard', 'numberOfListings' => $listingNumber)); $contract->setUserSID($user_sid); $contractSID = SJB_ContractManager::getContractSIDByRecurringId($callback_data['subscr_id']); SJB_ContractManager::deleteAllContractsByRecurringId($callback_data['subscr_id']); $contract->setPrice($productInfo['amount']); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($productInfo['shoppingCartRecord'], $user_sid); $bannerInfo = $productInfo['banner_info']; if ($productInfo['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); if (isset($contractSID)) { $bannerID = $bannersObj->getBannerIDByContract($contractSID); if ($bannerID) { $bannersObj->updateBannerContract($contract->getID(), $bannerID); } } else { $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $user_sid, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($user_sid, $bannerGroup); } } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($user_sid); } SJB_Statistics::addStatistics('payment', 'product', $product, false, 0, 0, $user_sid, $productInfo['amount']); if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($user_sid)) { SJB_Notifications::sendSubscriptionActivationLetter($user_sid, $productInfo, $reactivation); } } $recurringProductsInfo[$key] = $productInfo; } elseif ($status != SJB_Invoice::INVOICE_STATUS_PAID) { $listingNumber = $productInfo['qty']; if ($subscriptionSID == $product) { $contract = new SJB_Contract(array('product_sid' => $product, 'recurring_id' => $callback_data['subscr_id'], 'gateway_id' => 'paypal_standard', 'numberOfListings' => $listingNumber)); } else { $contract = new SJB_Contract(array('product_sid' => $product, 'gateway_id' => 'paypal_standard', 'numberOfListings' => $listingNumber)); } $contract->setUserSID($user_sid); $contract->setPrice($productInfo['amount']); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($productInfo['shoppingCartRecord'], $user_sid); $bannerInfo = $productInfo['banner_info']; if ($productInfo['product_type'] == 'banners' && !empty($bannerInfo) && $contractSID) { $bannersObj = new SJB_Banners(); $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $user_sid, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($user_sid, $bannerGroup); } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($user_sid); } SJB_Statistics::addStatistics('payment', 'product', $product, false, 0, 0, $user_sid, $productInfo['amount']); if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($user_sid)) { SJB_Notifications::sendSubscriptionActivationLetter($user_sid, $productInfo); } } } } } if ($reactivation) { $invoice->setNewPropertiesToInvoice($recurringProductsInfo); } $price = isset($callback_data['payment_gross']) ? $callback_data['payment_gross'] : $invoice->getPropertyValue('total'); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); $id = $this->details->getProperty('id'); $invoice->setPropertyValue('payment_method', $id->getValue()); SJB_InvoiceManager::saveInvoice($invoice); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); $transactionID = $callback_data['txn_id']; $transactionInfo = array('transaction_id' => $transactionID, 'invoice_sid' => $invoice->getSID(), 'amount' => $price, 'payment_method' => $invoice->getPropertyValue('payment_method'), 'user_sid' => $invoice->getPropertyValue('user_sid')); $transaction = new SJB_Transaction($transactionInfo); SJB_TransactionManager::saveTransaction($transaction); } } else { $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); SJB_InvoiceManager::saveInvoice($invoice); } }
public static function deleteTransactionBySID($transaction_sid) { return SJB_InvoiceManager::deleteObject('transactions', $transaction_sid); }
function handleRecurringNotification($callback_data) { if (!isset($callback_data['sale_id']) || !isset($callback_data['vendor_id']) || !isset($callback_data['invoice_id'])) { return; } $properties = $this->getProperties(); $secret_word = $properties['secret_word']->getValue(); $expected_md5 = strtoupper(md5($callback_data['sale_id'] . $callback_data['vendor_id'] . $callback_data['invoice_id'] . $secret_word)); if (!isset($callback_data['md5_hash']) || $callback_data['md5_hash'] != $expected_md5) { return; //платеж не от 2Checkout } $invoice_sid = null; if (isset($callback_data['vendor_order_id'])) { $invoice_sid = $callback_data['vendor_order_id']; } if (is_null($invoice_sid)) { return; } $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); if (is_null($invoice)) { return null; } switch ($callback_data['message_type']) { case 'RECURRING_INSTALLMENT_SUCCESS': if (empty($callback_data['sale_id'])) { return null; } $vendorApi = $this->initAPI(); if (!($saleDetails = $this->getSaleDetails($vendorApi, $callback_data['sale_id']))) { return null; } $itemCount = $callback_data['item_count']; $userSid = $invoice->getUserSID(); $paymentHandler = new SJB_PaymentHandler($invoice->getSID(), '2checkout'); $items = $invoice->getPropertyValue('items'); if (!empty($items['products'])) { $recurringProductsInfo = array(); for ($i = 1; $i < $itemCount + 1; $i++) { if (!empty($callback_data['item_id_' . $i])) { $invoice->setSID(null); $invoice->setDate(null); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); $reactivation = true; foreach ($items['products'] as $key => $product) { if ($product == $callback_data['item_id_' . $i]) { $productInfo = $invoice->getItemValue($key); $recurringID = !empty($callback_data['sale_id']) ? $callback_data['sale_id'] : false; $recurringProductsInfo[$key] = $productInfo; $paymentHandler->setProduct($productInfo); $paymentHandler->setRecurringID($recurringID); $invoiceID = 0; if ($saleDetails && is_array($saleDetails)) { foreach ($saleDetails as $lineitems) { if ($product == $lineitems->vendor_product_id) { $invoiceID = $lineitems->invoice_id; } } } $paymentHandler->createContract($userSid, $invoiceID, $reactivation, 'active'); } } } } $invoice->setNewPropertiesToInvoice($recurringProductsInfo); $invoice->setCallbackData($callback_data); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); $id = $this->details->getProperty('id'); $invoice->setPropertyValue('payment_method', $id->getValue()); SJB_InvoiceManager::saveInvoice($invoice); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); $this->processTransaction($callback_data, $invoice); } break; case 'ORDER_CREATED': case 'FRAUD_STATUS_CHANGED': if (empty($callback_data['fraud_status']) || !in_array($callback_data['fraud_status'], array('pass', 'wait'))) { return; } else { $fraudStatus = $callback_data['fraud_status']; } $saleDetails = false; if ($callback_data['sale_id']) { $vendorApi = $this->initAPI(); if (!($saleDetails = $this->getSaleDetails($vendorApi, $callback_data['sale_id']))) { return null; } } $itemCount = $callback_data['item_count']; $user_sid = $invoice->getUserSID(); $paymentHandler = new SJB_PaymentHandler($invoice->getSID(), '2checkout'); $items = $invoice->getPropertyValue('items'); if (!empty($items['products'])) { $reactivation = false; for ($i = 1; $i < $itemCount + 1; $i++) { if (!empty($callback_data['item_id_' . $i])) { foreach ($items['products'] as $key => $product) { $recurring = !empty($callback_data['item_rec_install_billed_' . $i]) ? true : false; if ($product == $callback_data['item_id_' . $i]) { $productInfo = $invoice->getItemValue($key); $recurringID = false; if ($recurring) { $recurringID = !empty($callback_data['sale_id']) ? $callback_data['sale_id'] : false; $recurringProductsInfo[$key] = $productInfo; } $paymentHandler->setProduct($productInfo); $paymentHandler->setRecurringID($recurringID); $invoiceID = 0; if ($saleDetails && is_array($saleDetails)) { foreach ($saleDetails as $lineitems) { if ($product == $lineitems->vendor_product_id) { $invoiceID = $lineitems->invoice_id; } } } $status = 'active'; if ($fraudStatus != 'pass') { $status = 'pending'; } $paymentHandler->createContract($user_sid, $invoiceID, $reactivation, $status); } } } else { foreach ($items['products'] as $product) { if ($product == -1) { $type = $items['custom_info'][1]['type']; $paymentHandler->setProduct($items['custom_info'][1]); switch ($type) { case 'featuredListing': $paymentHandler->makeFeatured($invoice); break; case 'priorityListing': $paymentHandler->makePriority($invoice); break; case 'activateListing': $paymentHandler->activateListing($invoice); break; } } } } } } else { if (empty($fraudStatus) || $fraudStatus != 'pass') { return; } } $invoice->setCallbackData($callback_data); if ($fraudStatus == 'pass') { $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); } $id = $this->details->getProperty('id'); $invoice->setPropertyValue('payment_method', $id->getValue()); SJB_InvoiceManager::saveInvoice($invoice); if ($fraudStatus != 'pass') { return; } SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); $this->processTransaction($callback_data, $invoice); break; case 'RECURRING_INSTALLMENT_FAILED': $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); SJB_InvoiceManager::saveInvoice($invoice); break; case 'REFUND_ISSUED': $itemCount = $callback_data['item_count']; $user_sid = $invoice->getUserSID(); $paymentHandler = new SJB_PaymentHandler($invoice->getSID(), '2checkout'); $items = $invoice->getPropertyValue('items'); if (!empty($items['products'])) { for ($i = 1; $i <= $itemCount; $i++) { if (!empty($callback_data['item_id_' . $i])) { $paymentHandler->setProduct($callback_data['item_id_' . $i]); $paymentHandler->deleteContract($callback_data['invoice_id'], $callback_data['item_id_' . $i], $user_sid); } } foreach ($items['products'] as $product) { if ($product == -1) { $type = $items['custom_info'][1]['type']; $paymentHandler->setProduct($items['custom_info'][1]); switch ($type) { case 'featured_listing': $paymentHandler->unmakeFeatured($user_sid, $invoice->getPropertyValue('total')); break; case 'priority_listing': $paymentHandler->unmakePriority($user_sid, $invoice->getPropertyValue('total')); break; case 'activate_listing': $paymentHandler->deactivateListing($user_sid, $invoice->getPropertyValue('total')); break; default: break; } } } } $invoice->setCallbackData($callback_data); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); SJB_InvoiceManager::saveInvoice($invoice); break; case 'RECURRING_STOPPED': case 'RECURRING_COMPLETE': default: break; } }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $displayForm = new SJB_Form(); $displayForm->registerTags($tp); $invoiceSid = SJB_Request::getVar('sid', false); if (SJB_Request::getVar('error', false)) { SJB_FlashMessages::getInstance()->addWarning('TCPDF_ERROR'); } $action = SJB_Request::getVar('action', false); $paymentGateway = SJB_Request::getVar('payment_gateway', false); $template = 'print_invoice.tpl'; $currentUserSID = SJB_UserManager::getCurrentUserSID(); $invoiceInfo = SJB_InvoiceManager::getInvoiceInfoBySID($invoiceSid); if ($invoiceInfo) { if ($currentUserSID == $invoiceInfo['user_sid']) { $taxInfo = SJB_TaxesManager::getTaxInfoBySID($invoiceInfo['tax_info']['sid']); $invoiceInfo = array_merge($invoiceInfo, $_REQUEST); if (is_array($taxInfo)) { $taxInfo = array_merge($invoiceInfo['tax_info'], $taxInfo); } else { $taxInfo = $invoiceInfo['tax_info']; } $invoice = new SJB_Invoice($invoiceInfo); $invoice->setSID($invoiceSid); $userInfo = SJB_UserManager::getUserInfoBySID($currentUserSID); $username = $userInfo['CompanyName'] . ' ' . $userInfo['FirstName'] . ' ' . $userInfo['LastName']; $user = SJB_UserManager::getObjectBySID($currentUserSID); $productsSIDs = SJB_ProductsManager::getProductsIDsByUserGroupSID($userInfo['user_group_sid']); $products = array(); foreach ($productsSIDs as $key => $productSID) { $product = SJB_ProductsManager::getProductInfoBySID($productSID); $products[$key] = $product; } $displayForm = new SJB_Form($invoice); $displayForm->registerTags($tp); $show = true; if ($action == 'download_pdf_version' || $action == 'print') { $show = false; } $tp->assign('show', $show); $tp->assign('products', $products); $tp->assign('invoice_sid', $invoiceSid); $tp->assign('invoice_status', $invoiceInfo['status']); $tp->assign('username', trim($username)); $tp->assign('user_sid', $currentUserSID); $tp->assign('tax', $taxInfo); $userStructure = SJB_UserManager::createTemplateStructureForUser($user); $tp->assign('user', $userStructure); $tp->assign('include_tax', $invoiceInfo['include_tax']); if ($action == 'download_pdf_version') { $template = 'invoice_to_pdf.tpl'; $filename = 'invoice_' . $invoiceSid . '.pdf'; try { SJB_HelperFunctions::html2pdf($tp->fetch($template), $filename); exit; } catch (Exception $e) { SJB_Error::writeToLog($e->getMessage()); SJB_HelperFunctions::redirect(SJB_System::getSystemSettings("SITE_URL") . '/print-invoice/?sid=' . $invoiceSid . '&action=print&error=TCPDF_ERROR'); } } } else { SJB_FlashMessages::getInstance()->addError('NOT_OWNER'); } } else { SJB_FlashMessages::getInstance()->addError('WRONG_INVOICE_ID_SPECIFIED'); } if ($paymentGateway) { $gatewaySID = SJB_PaymentGatewayManager::getSIDByID($paymentGateway); $gatewayInfo = SJB_PaymentGatewayManager::getInfoBySID($gatewaySID); $tp->assign('gatewayInfo', $gatewayInfo); } $tp->assign('paymentError', SJB_Request::getVar('payment_error', false)); $tp->display($template); }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $template = SJB_Request::getVar('template', 'manage_invoices.tpl'); $searchTemplate = SJB_Request::getVar('search_template', 'invoice_search_form.tpl'); $action = SJB_Request::getVar('action_name'); if (!empty($action)) { $invoicesSIDs = SJB_Request::getVar('invoices', array()); $_REQUEST['restore'] = 1; switch ($action) { case 'paid': foreach (array_keys($invoicesSIDs) as $invoiceSID) { $invoice = SJB_InvoiceManager::getObjectBySID($invoiceSID); $userSID = $invoice->getPropertyValue('user_sid'); if (SJB_UserManager::isUserExistsByUserSid($userSID)) { $items = $invoice->getPropertyValue('items'); $productSIDs = $items['products']; foreach ($productSIDs as $key => $productSID) { if ($productSID != -1) { if (SJB_ProductsManager::isProductExists($productSID)) { $productInfo = $invoice->getItemValue($key); $listingNumber = $productInfo['qty']; $contract = new SJB_Contract(array('product_sid' => $productSID, 'numberOfListings' => $listingNumber, 'is_recurring' => $invoice->isRecurring())); $contract->setUserSID($userSID); $contract->setPrice($items['amount'][$key]); if ($contract->saveInDB()) { SJB_ListingManager::activateListingsAfterPaid($userSID, $productSID, $contract->getID(), $listingNumber); SJB_ShoppingCart::deleteItemFromCartBySID($productInfo['shoppingCartRecord'], $userSID); $bannerInfo = $productInfo['banner_info']; if ($productInfo['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $userSID, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($userSID, $bannerGroup); } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($userSID); } if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($userSID)) { SJB_Notifications::sendSubscriptionActivationLetter($userSID, $productInfo); } } } } else { $type = SJB_Array::getPath($items, 'custom_info/' . $key . '/type'); switch ($type) { case 'featuredListing': $listingId = SJB_Array::getPath($items, 'custom_info/' . $key . '/listing_id'); SJB_ListingManager::makeFeaturedBySID($listingId); break; case 'priorityListing': $listingId = SJB_Array::getPath($items, 'custom_info/' . $key . '/listing_id'); SJB_ListingManager::makePriorityBySID($listingId); break; case 'activateListing': $listingsIds = explode(",", SJB_Array::getPath($items, 'custom_info/' . $key . '/listings_ids')); foreach ($listingsIds as $listingId) { SJB_ListingManager::activateListingBySID($listingId); } break; } } } SJB_Statistics::addStatisticsFromInvoice($invoice); } $total = $invoice->getPropertyValue('total'); if ($total > 0) { $gatewayID = $invoice->getPropertyValue('payment_method'); $gatewayID = isset($gatewayID) ? $gatewayID : 'cash_payment'; $transactionId = md5($invoiceSID . $gatewayID); $transactionInfo = array('transaction_id' => $transactionId, 'invoice_sid' => $invoiceSID, 'amount' => $total, 'payment_method' => $gatewayID, 'user_sid' => $invoice->getPropertyValue('user_sid')); $transaction = new SJB_Transaction($transactionInfo); SJB_TransactionManager::saveTransaction($transaction); } SJB_InvoiceManager::markPaidInvoiceBySID($invoiceSID); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoiceSID); } SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . "/manage-invoices/"); break; case 'unpaid': foreach (array_keys($invoicesSIDs) as $invoiceSID) { SJB_InvoiceManager::markUnPaidInvoiceBySID($invoiceSID); } SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/manage-invoices/'); break; case 'delete': foreach (array_keys($invoicesSIDs) as $invoiceSID) { SJB_InvoiceManager::deleteInvoiceBySID($invoiceSID); } SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/manage-invoices/'); break; default: unset($_REQUEST['restore']); break; } } /***************************************************************/ $_REQUEST['action'] = 'search'; $invoice = new SJB_Invoice(array()); $invoice->addProperty(array('id' => 'username', 'type' => 'string', 'value' => '', 'is_system' => true)); $aliases = new SJB_PropertyAliases(); $aliases->addAlias(array('id' => 'username', 'real_id' => 'user_sid', 'transform_function' => 'SJB_UserDBManager::getUserSIDsLikeSearchString')); $searchFormBuilder = new SJB_SearchFormBuilder($invoice); $criteriaSaver = new SJB_InvoiceCriteriaSaver(); if (isset($_REQUEST['restore'])) { $_REQUEST = array_merge($_REQUEST, $criteriaSaver->getCriteria()); } $criteria = $searchFormBuilder->extractCriteriaFromRequestData($_REQUEST, $invoice); $searchFormBuilder->setCriteria($criteria); $searchFormBuilder->registerTags($tp); $tp->display($searchTemplate); /********************** S O R T I N G *********************/ $paginator = new SJB_InvoicePagination(); $innerJoin = false; if ($paginator->sortingField == 'username') { $innerJoin = array('users' => array('sort_field' => array(36 => array('FirstName', 'LastName'), 41 => 'CompanyName'), 'join_field' => 'sid', 'join_field2' => 'user_sid', 'main_table' => 'invoices', 'join' => 'LEFT JOIN')); } $searcher = new SJB_InvoiceSearcher(array('limit' => ($paginator->currentPage - 1) * $paginator->itemsPerPage, 'num_rows' => $paginator->itemsPerPage), $paginator->sortingField, $paginator->sortingOrder, $innerJoin); $foundInvoices = array(); $foundInvoicesInfo = array(); if (SJB_Request::getVar('action', '') == 'search') { $foundInvoices = $searcher->getObjectsByCriteria($criteria, $aliases); if (empty($foundInvoices) && $paginator->currentPage != 1) { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/manage-invoices/?page=1'); } $criteriaSaver->setSession($_REQUEST, $searcher->getFoundObjectSIDs()); } elseif (isset($_REQUEST['restore'])) { $foundInvoices = $criteriaSaver->getObjectsFromSession(); } foreach ($foundInvoices as $id => $invoice) { $subUserSID = $invoice->getPropertyValue('subuser_sid'); if ($subUserSID) { $subUserInfo = SJB_UserManager::getUserInfoBySID($subUserSID); $parentInfo = SJB_UserManager::getUserInfoBySID($subUserInfo['parent_sid']); $username = $parentInfo['CompanyName']; } else { $userSID = $invoice->getPropertyValue('user_sid'); $userInfo = SJB_UserManager::getUserInfoBySID($userSID); if (SJB_UserGroupManager::getUserGroupIDBySID($userInfo['user_group_sid']) == 'Employer') { $username = $userInfo['CompanyName']; } else { if (SJB_UserGroupManager::getUserGroupIDBySID($userInfo['user_group_sid']) == 'JobSeeker') { $username = $userInfo['FirstName'] . ' ' . $userInfo['LastName']; } else { $username = $userInfo['username']; } } } $invoice->addProperty(array('id' => 'sid', 'type' => 'string', 'value' => $invoice->getSID())); $invoice->addProperty(array('id' => 'username', 'type' => 'string', 'value' => $username)); $foundInvoices[$id] = $invoice; $foundInvoicesInfo[$invoice->getSID()] = SJB_InvoiceManager::getInvoiceInfoBySID($invoice->getSID()); $foundInvoicesInfo[$invoice->getSID()]['userExists'] = !empty($username) ? 1 : 0; } /****************************************************************/ $paginator->setItemsCount($searcher->getAffectedRows()); $form_collection = new SJB_FormCollection($foundInvoices); $form_collection->registerTags($tp); $tp->assign('paginationInfo', $paginator->getPaginationInfo()); $tp->assign("found_invoices", $foundInvoicesInfo); $tp->display($template); }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $userSID = SJB_Request::getVar('user_sid', false); $includeTax = SJB_Request::getVar('include_tax', SJB_Settings::getSettingByName('enable_taxes')); $errors = array(); $invoiceErrors = array(); $template = 'add_invoice.tpl'; $userInfo = SJB_UserManager::getUserInfoBySID($userSID); if ($userInfo) { if (!empty($userInfo['parent_sid'])) { $parent_sid = $userInfo['parent_sid']; $username = $userInfo['username'] . '/' . $userInfo['email']; } else { $parent_sid = $userSID; $username = $userInfo['FirstName'] . ' ' . $userInfo['LastName'] . ' ' . $userInfo['ContactName'] . ' ' . $userInfo['CompanyName'] . '/' . $userInfo['email']; } $formSubmitted = SJB_Request::getVar('action', '') == 'save'; $productsSIDs = SJB_ProductsManager::getProductsIDsByUserGroupSID($userInfo['user_group_sid']); $products = array(); foreach ($productsSIDs as $key => $productSID) { $productInfo = SJB_ProductsManager::getProductInfoBySID($productSID); if (!empty($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'volume_based') { $volumeBasedPricing = $productInfo['volume_based_pricing']; $minListings = min($volumeBasedPricing['listings_range_from']); $maxListings = max($volumeBasedPricing['listings_range_to']); $countListings = array(); for ($i = $minListings; $i <= $maxListings; $i++) { $countListings[$i]['number_of_listings'] = $i; for ($j = 1; $j <= count($volumeBasedPricing['listings_range_from']); $j++) { if ($i >= $volumeBasedPricing['listings_range_from'][$j] && $i <= $volumeBasedPricing['listings_range_to'][$j]) { $countListings[$i]['price'] = $volumeBasedPricing['price_per_unit'][$j]; } } } $productInfo['count_listings'] = $countListings; } elseif (!empty($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'fixed') { unset($productInfo['volume_based_pricing']); } $products[$key] = $productInfo; } $total = SJB_I18N::getInstance()->getInput('float', SJB_Request::getVar('total', 0)); $taxInfo = SJB_TaxesManager::getTaxInfoByUserSidAndPrice($parent_sid, $total); $invoice = new SJB_Invoice($_REQUEST); $addForm = new SJB_Form($invoice); $addForm->registerTags($tp); if ($formSubmitted) { $invoiceErrors = $invoice->isValid(); if (empty($invoiceErrors) && $addForm->isDataValid($errors)) { $invoice->setFloatNumbersIntoValidFormat(); $invoice->setPropertyValue('success_page_url', SJB_System::getSystemSettings('USER_SITE_URL') . '/create-contract/'); SJB_InvoiceManager::saveInvoice($invoice); if (SJB_Request::getVar('send_invoice', false)) { SJB_Notifications::sendInvoiceToCustomer($invoice->getSID(), $userSID); } SJB_HelperFunctions::redirect(SJB_System::getSystemSettings("SITE_URL") . '/manage-invoices/'); } else { $invoiceDate = SJB_I18N::getInstance()->getInput('date', $invoice->getPropertyValue('date')); $invoice->setPropertyValue('date', $invoiceDate); } } else { $invoice->setPropertyValue('date', date('Y-m-d')); $invoice->setPropertyValue('status', SJB_Invoice::INVOICE_STATUS_UNPAID); } $invoice->setFloatNumbersIntoValidFormat(); $tp->assign('username', $username); $tp->assign('user_sid', $userSID); $tp->assign('products', $products); $tp->assign('tax', $taxInfo); $tp->assign('include_tax', $includeTax); } else { $errors[] = 'CUSTOMER_NOT_SELECTED'; $tp->assign('action', 'add'); $template = 'errors.tpl'; } $tp->assign("errors", array_merge($errors, $invoiceErrors)); $tp->display($template); }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $invoice_sid = SJB_Request::getVar('invoice_sid', null, false, 'int'); $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); $user = null; $errors = null; $userHasContract = false; if (!is_null($invoice)) { $status = $invoice->getStatus(); if ($status == SJB_Invoice::INVOICE_STATUS_VERIFIED) { $userSID = $invoice->getPropertyValue('user_sid'); $items = $invoice->getPropertyValue('items'); $products = $items['products']; $user = SJB_UserManager::getObjectBySID($userSID); $userHasContract = $user->hasContract(); $paymentStatus = false; foreach ($products as $key => $productSID) { if ($productSID != -1) { $product_info = $invoice->getItemValue($key); $products[$key] = $product_info; if (!empty($product_info['listing_type_sid'])) { $listingTypeID = SJB_ListingTypeDBManager::getListingTypeIDBySID($product_info['listing_type_sid']); $listingTypeName = SJB_ListingTypeManager::getListingTypeNameBySID($product_info['listing_type_sid']); if (!in_array($listingTypeID, array('Job', 'Resume'))) { $listingTypeName .= ' Listing'; } $listingTypes[] = array('ID' => $listingTypeID, 'name' => $listingTypeName); } $listingNumber = $product_info['qty']; $contract = new SJB_Contract(array('product_sid' => $productSID, 'numberOfListings' => $listingNumber, 'is_recurring' => $invoice->isRecurring())); $contract->setUserSID($userSID); $contract->setPrice($items['amount'][$key]); if ($contract->saveInDB()) { SJB_ListingManager::activateListingsAfterPaid($userSID, $productSID, $contract->getID(), $listingNumber); SJB_ShoppingCart::deleteItemFromCartBySID($product_info['shoppingCartRecord'], $userSID); $bannerInfo = $product_info['banner_info']; $paymentStatus = true; if ($product_info['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $userSID, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($userSID, $bannerGroup); } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($userSID); } if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($userSID)) { SJB_Notifications::sendSubscriptionActivationLetter($userSID, $product_info); } } } else { if (isset($items['custom_info'][$key]['type'])) { $products[$key] = $this->updateListing($items['custom_info'][$key]['type'], $key, $items, $userSID); } else { $products[$key] = array('name' => $items['custom_item'][$key]); } $paymentStatus = true; } } if ($paymentStatus) { $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); SJB_InvoiceManager::saveInvoice($invoice); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); } if (isset($listingTypes)) { $tp->assign('listingTypes', $listingTypes); } $tp->assign('products', $products); } else { $errors['INVOICE_IS_NOT_VERIFIED'] = 1; } } else { $errors['INVALID_INVOICE_ID'] = 1; } if (!$errors) { $subTotal = $invoice->getPropertyValue('sub_total'); if (empty($subTotal)) { SJB_Statistics::addStatisticsFromInvoice($invoice); } $isUserJustRegistered = SJB_UserManager::isCurrentUserJustRegistered(); if (isset($items['products']) && count($items['products']) == 1 && $isUserJustRegistered && !$userHasContract) { $userGroupInfo = SJB_UserGroupManager::getUserGroupInfoBySID($user->getUserGroupSID()); $pageId = !empty($userGroupInfo['after_registration_redirect_to']) ? $userGroupInfo['after_registration_redirect_to'] : ''; $redirectUrl = SJB_UserGroupManager::getRedirectUrlByPageID($pageId); SJB_HelperFunctions::redirect($redirectUrl); } } $tp->assign('errors', $errors); $tp->display('create_contract.tpl'); }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $currentUser = SJB_UserManager::getCurrentUser(); $action = SJB_Request::getVar('action', false); $error = SJB_Request::getVar('error', false); $applyPromoCode = SJB_Request::getVar('applyPromoCode', false); $action = $applyPromoCode ? 'applyPromoCode' : $action; $numberOfListings = SJB_Request::getVar('number_of_listings'); $productInfo = null; $errors = array(); switch ($action) { case 'delete': $itemSID = SJB_Request::getVar('item_sid', 0, false, 'int'); if (SJB_UserManager::isUserLoggedIn()) { if (SJB_Settings::getSettingByName('allow_to_post_before_checkout') == true) { $this->findCheckoutedListingsByProduct($itemSID, $currentUser->getSID()); } SJB_ShoppingCart::deleteItemFromCartBySID($itemSID, $currentUser->getSID()); } else { $products = SJB_Session::getValue('products'); if (!empty($products[$itemSID])) { unset($products[$itemSID]); SJB_Session::setValue('products', $products); } } break; case 'checkout': if (SJB_UserManager::isUserLoggedIn()) { $products = SJB_Session::getValue('products'); $products = $products ? $products : array(); $trialProduct = false; foreach ($products as $product) { if (!empty($product['product_info'])) { $productInfo = unserialize($product['product_info']); if ($currentUser->getUserGroupSID() != $productInfo['user_group_sid']) { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . "/shopping-cart/?error=user_group"); } elseif (in_array($productInfo['sid'], $currentUser->getTrialProductSIDByUserSID())) { $trialProduct = true; } else { $product = new SJB_Product($productInfo, $productInfo['product_type']); $number_of_listings = !empty($productInfo['number_of_listings']) ? $productInfo['number_of_listings'] : 1; $product->setNumberOfListings($number_of_listings); $productInfo['price'] = $product->getPrice(); SJB_ShoppingCart::addToShoppingCart($productInfo, $currentUser->getSID()); } } } SJB_Session::unsetValue('products'); if ($trialProduct) { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . "/shopping-cart/?error=trial_product"); } elseif ($products) { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . "/shopping-cart/"); } $products = SJB_ShoppingCart::getAllProductsByUserSID($currentUser->getSID()); if (empty($products)) { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . "/my-account/"); } $isRecurring = false; $subTotal = 0; foreach ($products as $key => $product) { $productInfo = unserialize($product['product_info']); if (!empty($productInfo['recurring'])) { $isRecurring = true; } if (!empty($productInfo['pricing_type']) == 'volume_based' && isset($numberOfListings[$productInfo['sid']][$product['sid']])) { $productInfo['number_of_listings'] = $numberOfListings[$productInfo['sid']][$product['sid']]; $productObj = new SJB_Product($productInfo, $productInfo['product_type']); $number_of_listings = !empty($productInfo['number_of_listings']) ? $productInfo['number_of_listings'] : 1; $productObj->setNumberOfListings($number_of_listings); $productInfo['price'] = $productObj->getPrice(); if (!empty($productInfo['code_info'])) { SJB_PromotionsManager::applyPromoCodeToProduct($productInfo, $productInfo['code_info']); } SJB_ShoppingCart::updateItemBySID($product['sid'], $productInfo); } $subTotal += $productInfo['price']; $products[$key] = $productInfo; $products[$key]['item_sid'] = $product['sid']; $products[$key]['product_info'] = serialize($productInfo); } $index = 1; $items = array(); $codeInfo = array(); if ($isRecurring) { $tp->assign('confirmation', 1); $tp->assign('sub_total_price', $subTotal); } else { foreach ($products as $product) { $product_info = unserialize($product['product_info']); SJB_PromotionsManager::preparePromoCodeInfoByProductPromoCodeInfo($product, $product['code_info']); $qty = !empty($product_info['number_of_listings']) ? $product_info['number_of_listings'] : null; $items['products'][$index] = $product_info['sid']; if ($qty > 0) { $items['price'][$index] = round($product['price'] / $qty, 2); } else { $items['price'][$index] = round($product['price'], 2); } $items['amount'][$index] = $product['price']; $items['qty'][$index] = $qty; if (isset($product['custom_item'])) { $items['custom_item'][$index] = $product['custom_item']; } else { $items['custom_item'][$index] = ""; } if (isset($product['custom_info'])) { $items['custom_info'][$index] = $product['custom_info']; } else { $items['custom_info'][$index]['shoppingCartRecord'] = $product['item_sid']; } if ($product_info['product_type'] == 'banners' && !empty($product_info['banner_info'])) { $items['custom_info'][$index]['banner_info'] = $product_info['banner_info']; } $index++; SJB_PromotionsManager::preparePromoCodeInfoByProductPromoCodeInfo($product_info, $codeInfo); } $subUserInfo = $currentUser->getSubuserInfo(); $userSID = isset($subUserInfo['sid']) ? $subUserInfo['sid'] : $currentUser->getSID(); $invoiceSID = SJB_InvoiceManager::generateInvoice($items, $userSID, $subTotal, SJB_System::getSystemSettings('SITE_URL') . "/create-contract/"); SJB_PromotionsManager::addCodeToHistory($codeInfo, $invoiceSID, $userSID); if ($subTotal <= 0) { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/create-contract/?invoice_sid=' . $invoiceSID); } else { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . "/payment-page/?invoice_sid=" . $invoiceSID); } } } break; case 'applyPromoCode': $promotionCode = SJB_Request::getVar('promotion_code', false); if ($promotionCode) { if (SJB_UserManager::isUserLoggedIn()) { $products = SJB_ShoppingCart::getAllProductsByUserSID($currentUser->getSID()); } else { $products = SJB_Session::getValue('products'); $products = $products ? $products : array(); krsort($products); } $allowShoppingItems = array(); $productSIDs = array(); foreach ($products as $product) { $productInfo = unserialize($product['product_info']); if (!isset($productInfo['code_info'])) { if (isset($productInfo['custom_info'])) { $allowShoppingItems[] = $product['sid']; $productSIDs[] = $productInfo['custom_info']['productSid']; } else { $allowShoppingItems[] = $product['sid']; $productSIDs[] = $productInfo['sid']; } } else { $appliedPromoCode = $productInfo['code_info']; } } if ($codeInfo = SJB_PromotionsManager::checkCode($promotionCode, $productSIDs)) { $productSIDs = $codeInfo['product_sid'] ? explode(',', $codeInfo['product_sid']) : false; $appliedProducts = array(); $codeValid = false; foreach ($products as $key => $product) { $productInfo = unserialize($product['product_info']); if ($productInfo['sid'] != '-1') { $productSid = $productInfo['sid']; } else { $productSid = $productInfo['custom_info']['productSid']; } if ($productSIDs && in_array($productSid, $productSIDs) && $allowShoppingItems && in_array($product['sid'], $allowShoppingItems)) { $currentUsesCount = SJB_PromotionsManager::getUsesCodeBySID($codeInfo['sid']); if ($codeInfo['maximum_uses'] != 0 && $codeInfo['maximum_uses'] > $currentUsesCount || $codeInfo['maximum_uses'] == 0) { $codeValid = true; SJB_PromotionsManager::applyPromoCodeToProduct($productInfo, $codeInfo); $appliedProducts[] = $productInfo; if (SJB_UserManager::isUserLoggedIn()) { SJB_ShoppingCart::updateItemBySID($product['sid'], $productInfo); } else { $products[$key]['product_info'] = serialize($productInfo); SJB_Session::setValue('products', $products); } } } } if (!$codeValid) { $errors['NOT_VALID'] = 'Invalid promotion code'; unset($promotionCode); } $tp->assign('applied_products', $appliedProducts); $tp->assign('code_info', $codeInfo); } else { $errors['NOT_VALID'] = 'Invalid promotion code'; } if (isset($promotionCode) && isset($appliedPromoCode)) { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/shopping-cart/'); } } else { $errors['EMPTY_VALUE'] = 'Promotion code'; } break; case 'deletePromoCode': if (SJB_UserManager::isUserLoggedIn()) { $products = SJB_ShoppingCart::getAllProductsByUserSID($currentUser->getSID()); } else { $products = SJB_Session::getValue('products'); $products = $products ? $products : array(); krsort($products); } foreach ($products as $key => $product) { $productInfo = unserialize($product['product_info']); SJB_PromotionsManager::removePromoCodeFromProduct($productInfo); if (SJB_UserManager::isUserLoggedIn()) { $numberOfListings = is_array($numberOfListings) ? array_pop($numberOfListings) : false; if (is_array($numberOfListings)) { foreach ($numberOfListings as $listingSid => $listingsCount) { if ($listingSid == $product['sid']) { $productInfo['number_of_listings'] = $listingsCount; } } } SJB_ShoppingCart::updateItemBySID($product['sid'], $productInfo); } else { $products[$key]['product_info'] = serialize($productInfo); SJB_Session::setValue('products', $products); } } break; } if (SJB_UserManager::isUserLoggedIn()) { $products = SJB_ShoppingCart::getAllProductsByUserSID($currentUser->getSID()); // To display products in shopping cart after user has been registered from shopping cart page if (empty($products)) { $products = SJB_Session::getValue('products'); $products = $products ? $products : array(); } } else { $products = SJB_Session::getValue('products'); $products = $products ? $products : array(); krsort($products); } $allowShoppingItems = array(); foreach ($products as $product) { $productInfo = unserialize($product['product_info']); if (!empty($productInfo['code_info'])) { $promotionCode = $productInfo['code_info']['code']; $promotionCodeInfo = $productInfo['code_info']; } else { $allowShoppingItems[] = $product['sid']; } } $promotionCode = isset($promotionCode) ? $promotionCode : ''; $totalPrice = 0; $discountTotalAmount = 0; $numberOfListings = SJB_Request::getVar('number_of_listings', false); foreach ($products as $key => $product) { $productInfo = unserialize($product['product_info']); if ($allowShoppingItems && in_array($product['sid'], $allowShoppingItems)) { $this->applyPromoCodesToProduct($promotionCode, $productInfo); if (SJB_UserManager::isUserLoggedIn()) { SJB_ShoppingCart::updateItemBySID($product['sid'], $productInfo); } else { $products[$key]['product_info'] = serialize($productInfo); } } if ($numberOfListings && array_key_exists('number_of_listings', $productInfo) && array_key_exists($productInfo['sid'], $numberOfListings)) { $productInfo['number_of_listings'] = $numberOfListings[$productInfo['sid']][$product['sid']]; } $productObj = new SJB_Product($productInfo, $productInfo['product_type']); $productExtraInfo = unserialize($productInfo['serialized_extra_info']); if (!empty($productInfo['expiration_period']) && !is_numeric($productInfo['expiration_period'])) { $productInfo['primaryPrice'] = $productExtraInfo['price']; $productInfo['period'] = ucwords($productInfo['expiration_period']); } elseif (!empty($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'volume_based') { $volumeBasedPricing = $productInfo['volume_based_pricing']; $number_of_listings = !empty($productInfo['number_of_listings']) ? $productInfo['number_of_listings'] : 1; $productObj->setNumberOfListings($number_of_listings); $productInfo['price'] = $productObj->getPrice(); $productInfo['primaryPrice'] = $productObj->getPrice(); $this->applyPromoCodesToProduct($promotionCode, $productInfo); $minListings = min($volumeBasedPricing['listings_range_from']); $maxListings = max($volumeBasedPricing['listings_range_to']); $countListings = array(); for ($i = $minListings; $i <= $maxListings; $i++) { $countListings[$i]['number_of_listings'] = $i; for ($j = 1; $j <= count($volumeBasedPricing['listings_range_from']); $j++) { if ($i >= $volumeBasedPricing['listings_range_from'][$j] && $i <= $volumeBasedPricing['listings_range_to'][$j]) { $countListings[$i]['price'] = $volumeBasedPricing['price_per_unit'][$j] * $i; $countListings[$i]['primaryPrice'] = $volumeBasedPricing['price_per_unit'][$j] * $i; if (!empty($productInfo['code_info']['type'])) { switch ($productInfo['code_info']['type']) { case 'percentage': $countListings[$i]['price'] = round($countListings[$i]['price'] - $countListings[$i]['primaryPrice'] / 100 * $productInfo['code_info']['discount'], 2); $countListings[$i]['percentPromoAmount'] = round($countListings[$i]['primaryPrice'] - $countListings[$i]['price'], 2); $countListings[$i]['percentPromoCode'] = $productInfo['code_info']['code']; break; case 'fixed': $countListings[$i]['price'] = round($countListings[$i]['price'] - $productInfo['code_info']['discount'], 2); break; } } } } } $productInfo['count_listings'] = $countListings; } elseif (!empty($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'fixed') { $productInfo['primaryPrice'] = $productObj->getPrice(); $this->applyPromoCodesToProduct($promotionCode, $productInfo); unset($productInfo['volume_based_pricing']); } if (isset($productInfo['code_info'])) { if ($productInfo['code_info']['type'] != 'fixed' && isset($productInfo['pricing_type']) && $productInfo['pricing_type'] == 'volume_based') { $discountTotalAmount += (double) $productInfo['count_listings'][$productInfo['number_of_listings']]['percentPromoAmount']; } else { $discountTotalAmount += (double) $productInfo['code_info']['promoAmount']; } } if (empty($productInfo['volume_based_pricing'])) { $productInfo['primaryPrice'] = $productExtraInfo['price']; $this->applyPromoCodesToProduct($promotionCode, $productInfo); $totalPrice += (double) $productInfo['price']; } $products[$key] = $productInfo; $products[$key]['item_sid'] = $product['sid']; } if ($currentUser) { $taxInfo = SJB_TaxesManager::getTaxInfoByUserSidAndPrice($currentUser->getSID(), $totalPrice); $tp->assign('tax', $taxInfo); } $userGroupID = $productInfo ? SJB_UserGroupDBManager::getUserGroupIDBySID($productInfo['user_group_sid']) : false; $tp->assign('promotionCodeAlreadyUsed', $promotionCode && empty($errors)); if (isset($promotionCodeInfo)) { $tp->assign('promotionCodeInfo', $promotionCodeInfo); } $tp->assign('error', $error); $tp->assign('errors', $errors); $tp->assign('total_price', $totalPrice); $tp->assign('discountTotalAmount', $discountTotalAmount); $tp->assign('products', $products); $tp->assign('userGroupID', $userGroupID); $tp->assign('account_activated', SJB_Request::getVar('account_activated', '')); $tp->display('shopping_cart.tpl'); }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $userInfo = SJB_Authorization::getCurrentUserInfo(); if (empty($userInfo)) { $tp->assign("ERROR", "NOT_LOGIN"); $tp->display("../miscellaneous/error.tpl"); return; } $template = SJB_Request::getVar('template', 'my_invoices.tpl'); $searchTemplate = SJB_Request::getVar('search_template', 'invoice_search_form.tpl'); /***************************************************************/ $_REQUEST['action'] = 'search'; $_REQUEST['user_sid']['equal'] = $userInfo['sid']; if (!isset($_REQUEST['date'])) { $i18n = SJB_ObjectMother::createI18N(); $_REQUEST['date']['not_less'] = $i18n->getDate(date('Y-m-d', time() - 30 * 24 * 60 * 60)); $_REQUEST['date']['not_more'] = $i18n->getDate(date('Y-m-d')); } $invoice = new SJB_Invoice(array()); $invoice->addProperty(array('id' => 'username', 'type' => 'string', 'value' => '', 'is_system' => true)); $aliases = new SJB_PropertyAliases(); $aliases->addAlias(array('id' => 'username', 'real_id' => 'user_sid', 'transform_function' => 'SJB_UserDBManager::getUserSIDsLikeSearchString')); $searchFormBuilder = new SJB_SearchFormBuilder($invoice); $criteriaSaver = new SJB_InvoiceCriteriaSaver(); if (isset($_REQUEST['restore'])) { $_REQUEST = array_merge($_REQUEST, $criteriaSaver->getCriteria()); } $criteria = $searchFormBuilder->extractCriteriaFromRequestData($_REQUEST, $invoice); $searchFormBuilder->setCriteria($criteria); $searchFormBuilder->registerTags($tp); $tp->display($searchTemplate); /********************** S O R T I N G *********************/ $criteria = $searchFormBuilder->extractCriteriaFromRequestData($_REQUEST, $invoice); $searcher = new SJB_InvoiceSearcher(); $foundInvoices = array(); $foundInvoicesInfo = array(); if (SJB_Request::getVar('action', '') == 'search') { $foundInvoices = $searcher->getObjectsByCriteria($criteria, $aliases); $criteriaSaver->setSession($_REQUEST, $searcher->getFoundObjectSIDs()); } elseif (isset($_REQUEST['restore'])) { $foundInvoices = $criteriaSaver->getObjectsFromSession(); } foreach ($foundInvoices as $id => $invoice) { $invoice->addProperty(array('id' => 'sid', 'type' => 'string', 'value' => $invoice->getSID())); $subUserSid = $invoice->getPropertyValue('subuser_sid'); if ($subUserSid) { $payer = SJB_UserManager::getUserNameByUserSID($subUserSid); } else { $userSid = $invoice->getPropertyValue('user_sid'); $payer = SJB_UserManager::getUserNameByUserSID($userSid); } $invoice->addProperty(array('id' => 'payer', 'type' => 'string', 'value' => $payer)); $foundInvoices[$id] = $invoice; $foundInvoicesInfo[$invoice->getSID()] = SJB_InvoiceManager::getInvoiceInfoBySID($invoice->getSID()); } $sortingField = SJB_Request::getVar('sorting_field', 'sid'); $sortingOrder = SJB_Request::getVar('sorting_order', 'DESC'); if ($invoice->propertyIsSet($sortingField)) { $sortArray = array(); $sortedFoundInvoicesInfo = array(); foreach ($foundInvoices as $id => $invoice) { $sortArray[$id] = $invoice->getPropertyValue($sortingField); } if ($sortingOrder == 'ASC') { asort($sortArray); } elseif ($sortingOrder == 'DESC') { arsort($sortArray); } foreach ($sortArray as $id => $value) { $sortedFoundInvoicesInfo[$id] = $foundInvoicesInfo[$id]; } } else { $sortedFoundInvoicesInfo = $foundInvoicesInfo; } $formCollection = new SJB_FormCollection($foundInvoices); $formCollection->registerTags($tp); $subUsers = SJB_UserManager::getSubUsers($userInfo['sid']); $isSubUserExists = !empty($subUsers) ? true : false; $tp->assign('isSubUserExists', $isSubUserExists); $tp->assign('sorting_field', $sortingField); $tp->assign('sorting_order', $sortingOrder); $tp->assign('found_invoices', $sortedFoundInvoicesInfo); $tp->display($template); }