[+] BO: Add BackOffice orders

This commit is contained in:
rGaillard
2011-11-02 09:18:45 +00:00
parent a44f5fc8a1
commit bf3d89e1fb
9 changed files with 1156 additions and 26 deletions
+28 -11
View File
@@ -105,8 +105,8 @@ class AdminCartsController extends AdminController
return;
$customer = new Customer($cart->id_customer);
$products = $cart->getProducts();
$customizedDatas = Product::getAllCustomizedDatas((int)($cart->id));
Product::addCustomizationPrice($products, $customizedDatas);
$customized_datas = Product::getAllCustomizedDatas((int)($cart->id));
Product::addCustomizationPrice($products, $customized_datas);
$summary = $cart->getSummaryDetails();
$currency = new Currency($cart->id_currency);
@@ -153,8 +153,7 @@ class AdminCartsController extends AdminController
$productObj = new Product($product['id_product']);
$product['qty_in_stock'] = StockAvailable::getStockAvailableForProduct($product['id_product'], isset($product['id_product_attribute']) ? $product['id_product_attribute'] : null, (int)$order->id_shop);
/* Customization display */
//$this->displayCustomizedDatas($customizedDatas, $product, $currency, $image, $tokenCatalog, $stock);
$imageProduct = new Image($image['id_image']);
$product['image'] = (isset($image['id_image']) ? cacheImage(_PS_IMG_DIR_.'p/'.$imageProduct->getExistingImgPath().'.jpg', 'product_mini_'.(int)($product['id_product']).(isset($product['id_product_attribute']) ? '_'.(int)($product['id_product_attribute']) : '').'.jpg', 45, 'jpg') : '--');
}
@@ -169,7 +168,8 @@ class AdminCartsController extends AdminController
'total_discounts' => $total_discounts,
'total_wrapping' => $total_wrapping,
'total_price' => $total_price,
'total_shipping' => $total_shipping
'total_shipping' => $total_shipping,
'customized_datas' => $customized_datas
));
}
@@ -186,6 +186,8 @@ class AdminCartsController extends AdminController
$this->context->cart->id_customer = $id_customer;
if ($this->context->cart->OrderExists())
return;
if (!$this->context->cart->id_shop)
$this->context->cart->id_shop = (int)$this->context->shop->id;
if (!$this->context->cart->id_lang)
$this->context->cart->id_lang = (($id_lang = (int)Tools::getValue('id_lang')) ? $id_lang : Configuration::get('PS_LANG_DEFAULT'));
if (!$this->context->cart->id_currency)
@@ -203,7 +205,6 @@ class AdminCartsController extends AdminController
$this->context->cart->id_address_delivery = $addresses[0]['id_address'];
elseif ($id_address_delivery)
$this->context->cart->id_address_delivery = (int)$id_address_delivery;
$this->context->cart->save();
$currency = new Currency((int)$this->context->cart->id_currency);
$this->context->currency = $currency;
@@ -233,11 +234,15 @@ class AdminCartsController extends AdminController
$errors[] = Tools::displayError('Invalid product');
elseif (!$qty = Tools::getValue('qty') OR $qty == 0)
$errors[] = Tools::displayError('Invalid quantity');
elseif (($id_product_attribute = Tools::getValue('id_product_attribute')) != 0 && !Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty((int)$id_product_attribute, (int)$qty))
$errors[] = Tools::displayError('There is not enough product in stock');
elseif (!$product->checkQty((int)$qty))
$errors[] = Tools::displayError('There is not enough product in stock');
elseif (!$id_customization = (int)Tools::getValue('id_customization', 0) AND !$product->hasAllRequiredCustomizableFields())
if (($id_product_attribute = Tools::getValue('id_product_attribute')) != 0)
{
if(!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty((int)$id_product_attribute, (int)$qty))
$errors[] = Tools::displayError('There is not enough product in stock');
}
else
if(!$product->checkQty((int)$qty))
$errors[] = Tools::displayError('There is not enough product in stock');
if (!$id_customization = (int)Tools::getValue('id_customization', 0) AND !$product->hasAllRequiredCustomizableFields())
$errors[] = Tools::displayError('Please fill in all required fields');
$this->context->cart->save();
if (!count($errors))
@@ -321,6 +326,18 @@ class AdminCartsController extends AdminController
$errors[] = Tools::displayError('Can\'t add the voucher');
echo Tools::jsonEncode(array_merge($this->ajaxReturnVars(), array('errors' => $errors)));
}
public function ajaxProcessUpdateAddresses()
{
if (($id_address_delivery = (int)Tools::getValue('id_address_delivery')) && $address_delivery = new Address((int)$id_address_delivery) && $address_delivery->id_customer = $this->context->cart->id_customer)
$this->context->cart->id_address_delivery = (int)$address_delivery->id;
if (($id_address_invoice = (int)Tools::getValue('id_address_invoice')) && $address_invoice = new Address((int)$id_address_invoice) && $address_invoice->id_customer = $this->context->cart->id_customer)
$this->context->cart->id_address_invoice = (int)$address_invoice->id;
$this->context->cart->save();
echo Tools::jsonEncode($this->ajaxReturnVars());
}
protected function getCartSummary()
{
+94 -12
View File
@@ -32,7 +32,7 @@ class AdminOrdersControllerCore extends AdminController
$this->table = 'order';
$this->className = 'Order';
$this->lang = false;
$this->edit = true;
$this->addRowAction('view');
$this->deleted = false;
@@ -74,18 +74,20 @@ class AdminOrdersControllerCore extends AdminController
parent::__construct();
}
public function initContent()
public function initForm()
{
$this->display = 'list';
if (Tools::isSubmit('view'.$this->table))
{
$this->display = 'view';
$this->viewOrder();
}
parent::initContent();
parent::initForm();
$this->addJqueryPlugin(array('autocomplete', 'fancybox', 'typewatch'));
$cart = new Cart((int)Tools::getValue('id_cart'));
$this->context->smarty->assign(array('recyclable_pack' => (int)Configuration::get('PS_RECYCLABLE_PACK'),
'gift_wrapping' => (int)Configuration::get('PS_GIFT_WRAPPING'),
'cart' => $cart,
'currencies' => Currency::getCurrencies(),
'langs' => Language::getLanguages(true, Context::getContext()->shop->id),
'payment_modules' => PaymentModule::getInstalledPaymentModules(),
'order_states' => OrderState::getOrderStates((int)Context::getContext()->cookie->id_lang)));
$this->content .= $this->context->smarty->fetch('orders/form.tpl');
}
public function printPDFIcons($id_order, $tr)
@@ -445,6 +447,19 @@ class AdminOrdersControllerCore extends AdminController
unset($order, $pcc);
}
elseif (Tools::isSubmit('submitAddOrder') == 1 && ($id_cart = Tools::getValue('id_cart')) && ($module_name = pSQL(Tools::getValue('payment_module_name'))) && ($id_order_state = Tools::getValue('id_order_state')))
{
if ($this->tabAccess['edit'] === '1')
{
$payment_module = Module::getInstanceByName($module_name);
$cart = new Cart((int)$id_cart);
$payment_module->validateOrder((int)$cart->id, (int)$id_order_state, $cart->getOrderTotal(true, Cart::BOTH), $payment_module->displayName, $this->l(sprintf('Manual order - ID Employee :%1', (int)Context::getContext()->cookie->id_employee)));
if($payment_module->currentOrder)
Tools::redirectAdmin(self::$currentIndex.'&id_order='.$payment_module->currentOrder.'&vieworder'.'&token='.$this->token);
}
else
$this->_errors[] = Tools::displayError('You do not have permission to add here.');
}
parent::postProcess();
}
@@ -536,4 +551,71 @@ class AdminOrdersControllerCore extends AdminController
'HOOK_ADMIN_ORDER' => Module::hookExec('adminOrder', array('id_order' => $order->id))
));
}
public function ajaxProcessSearchCustomers()
{
if ($customers = Customer::searchByName(pSQL(Tools::getValue('customer_search'))))
$to_return = array('customers' => $customers,
'found' => true);
else
$to_return = array('found' => false);
$this->content = Tools::jsonEncode($to_return);
}
public function ajaxProcessSearchProducts()
{
$currency = new Currency((int)Tools::getValue('id_currency'));
if ($products = Product::searchByName((int)$this->context->language->id, pSQL(Tools::getValue('product_search'))))
{
foreach ($products AS &$product)
{
$product['price'] = Tools::displayPrice(Tools::convertPrice($product['price'], $currency), $currency);
$productObj = new Product((int)$product['id_product'], false, (int)$this->context->language->id);
$combinations = array();
$attributes = $productObj->getAttributesGroups((int)$this->context->language->id);
$product['qty_in_stock'] = StockAvailable::getStockAvailableForProduct((int)$product['id_product'], 0, (int)$this->context->shop->getID());
foreach($attributes AS $attribute)
{
if (!isset($combinations[$attribute['id_product_attribute']]['attributes']))
$combinations[$attribute['id_product_attribute']]['attributes'] = '';
$combinations[$attribute['id_product_attribute']]['attributes'] .= $attribute['attribute_name'].' - ';
$combinations[$attribute['id_product_attribute']]['id_product_attribute'] = $attribute['id_product_attribute'];
$combinations[$attribute['id_product_attribute']]['default_on'] = $attribute['default_on'];
if (!isset($combinations[$attribute['id_product_attribute']]['price']))
$combinations[$attribute['id_product_attribute']]['price'] = Tools::displayPrice(Tools::convertPrice(Product::getPriceStatic((int)$product['id_product'], true, $attribute['id_product_attribute']), $currency), $currency);
if (!isset($combinations[$attribute['id_product_attribute']]['qty_in_stock']))
$combinations[$attribute['id_product_attribute']]['qty_in_stock']= StockAvailable::getStockAvailableForProduct((int)$product['id_product'], $attribute['id_product_attribute'], (int)$this->context->shop->getID());
}
foreach ($combinations AS &$combination)
$combination['attributes'] = rtrim($combination['attributes'], ' - ');
$product['combinations'] = $combinations;
}
$to_return = array('products' => $products,
'found' => true);
}
else
$to_return = array('found' => false);
$this->content = Tools::jsonEncode($to_return);
}
public function ajaxProcessSendMailValidateOrder()
{
$errors = array();
$cart = new Cart((int)Tools::getValue('id_cart'));
if (Validate::isLoadedObject($cart))
{
$customer = new Customer((int)$cart->id_customer);
if (Validate::isLoadedObject($customer))
{
$mailVars = array('{order_link}' => Context::getContext()->link->getPageLink('order', false, (int)$cart->id_lang, 'step=3&recover_cart='.(int)$cart->id.'&token_cart='.md5(_COOKIE_KEY_.'recover_cart_'.(int)$cart->id)),
'{firstname}' => $customer->firstname,
'{lastname}' => $customer->lastname,);
if (Mail::Send((int)$cart->id_lang, 'backoffice_order', Mail::l('Process the payment of your order'), $mailVars, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, NULL, NULL,_PS_MAIL_DIR_, true))
die(Tools::jsonEncode(array('errors' => false, 'result' => $this->l('The mail was sent to your customer.'))));
}
}
$this->content = Tools::jsonEncode(array('errors' => true, 'result' => $this->l('Error in sending the email to your customer.')));
}
}