/** * This function is used to migrate the tax and shipping charge detail to new format. * OLD: order tax = SUM(item Tax) similary for shipping charges * NEW: Item level tax is not add in order tax fields. Order tax fields contain only order tax. * * @return ''. * * @since 2.2.5 */ public function test() { $db = JFactory::getDBO(); $comquick2cartHelper = new Comquick2cartHelper(); $path = JPATH_SITE . '/components/com_quick2cart/models/cartcheckout.php'; $ckoutModel = $comquick2cartHelper->loadqtcClass($path, "Quick2cartModelcartcheckout"); // A.Check for column itemTaxShipIncluded. If present then only migration required else not. $query = "SHOW COLUMNS FROM `#__kart_orders`"; $db->setQuery($query); $columns = $db->loadColumn(); // B.If col is not present then add if (!in_array('itemTaxShipIncluded', $columns)) { // C. Else add column= 'itemTaxShipIncluded' to db $query = "ALTER TABLE `#__kart_orders` ADD `itemTaxShipIncluded` tinyint(1) NOT NULL DEFAULT '0' " . " COMMENT 'Flag : whether order tax and shipping is summation of order item tax and ship or not. 1 => orderTax = sum(order item tax)'"; $db->setQuery($query); if (!$db->execute()) { echo JText::_('COM_QUICK2CART_UNABLE_TO_ALTER_COLUMN') . " - #__kart_orders."; echo $db->getErrorMsg(); return 0; } // D. Set its value column value to 1 $query = $db->getQuery(true); // Fields to update. $fields = array($db->quoteName('itemTaxShipIncluded') . ' = 1'); // Conditions for which records should be updated. $conditions = array(); $query->update($db->quoteName('#__kart_orders'))->set($fields); $db->setQuery($query); $result = $db->execute(); } // E: $query = $db->getQuery(true); $query->select(' o.* '); $query->from('#__kart_orders as o'); $query->where("(o.order_tax > 0 OR o.order_shipping > 0 )"); $query->where("itemTaxShipIncluded=1"); $query->order("o.id DESC"); $db->setQuery($query); $orderList = $db->loadObjectList('id'); foreach ($orderList as $order) { $query = $db->getQuery(true); $modifiedOrder = new stdClass(); $modifiedOrder->id = $order->id; // Get order item details $query->select('order_id, sum(product_final_price) as totalItemprice,sum(item_tax) as totalItemTax,sum(item_shipcharges) as totalShipCharge'); $query->from('#__kart_order_item as i'); $query->where("order_id= " . $order->id); $db->setQuery($query); $itemDetail = $db->loadAssoc('id'); // 1. Update original amount $modifiedOrder->original_amount = $itemDetail['totalItemprice']; // 2.update tax and ship $OrderLevelTax = $order->order_tax - $itemDetail['totalItemTax']; if ($OrderLevelTax >= 0) { $modifiedOrder->order_tax = $OrderLevelTax; } else { $modifiedOrder->order_tax = 0; } $OrderLevelShip = $order->order_shipping - $itemDetail['totalShipCharge']; if ($OrderLevelTax >= 0) { $modifiedOrder->order_shipping = $OrderLevelShip; } else { $modifiedOrder->order_shipping = 0; } // 3. Check for coupon $copDiscount = 0; if ($order->coupon_code) { $copDiscount = $ckoutModel->afterDiscountPrice($modifiedOrder->original_amount, $order->coupon_code, "", "order", $modifiedOrder->id); $copDiscount = $copDiscount >= 0 ? $copDiscount : 0; } // 4. Update amount column according to discount,tax,shipping details $modifiedOrder->amount = $modifiedOrder->original_amount + $modifiedOrder->order_tax + $modifiedOrder->order_shipping - $copDiscount; if (!$db->updateObject('#__kart_orders', $modifiedOrder, 'id')) { $this->setError($db->getErrorMsg()); return 0; } } }
/** * Updatecart updates the cart, Attributes, shipping charges. * * @since 2.2.2 * * @return status. */ public function updateOrderCartItemAttributes() { $jinput = JFactory::getApplication()->input; $post = $jinput->post; // Get parsed form data parse_str($post->get('formData', '', 'STRING'), $formData); $comquick2cartHelper = new Comquick2cartHelper(); $path = JPATH_SITE . '/components/com_quick2cart/models/cartcheckout.php'; $checkoutModel = $comquick2cartHelper->loadqtcClass($path, "Quick2cartModelcartcheckout"); $order_id = $jinput->get('order_id', '', 'INT'); $orderInfo = $this->getorderinfo($order_id); $userId = $orderInfo['order_info'][0]->user_id; $orderItems = $orderInfo['items']; // $cart_item_id = $post->get('order_item_id', '', 'INT'); $item_id = $post->get('item_id', '', 'INT'); $cartItems = $formData['cartDetail']; // Required while order update $modifiedOrder = new stdClass(); $modifiedOrder->id = $order_id; $modifiedOrder->coupon_code = $orderInfo['order_info'][0]->coupon_code; $totalItemTax = 0; $totalItemShip = 0; $modifiedOrder->original_amount = 0; // Update items first foreach ($cartItems as $cartIndex => $item) { $dbOrderItemDetail = array(); // Get order item details foreach ($orderItems as $oitem) { if ($cartIndex == $oitem->order_item_id) { $dbOrderItemDetail = $oitem; break; } } $orderItem = new stdClass(); $orderItem->order_item_id = $item['order_item_id']; $orderItem->product_quantity = $item['cart_count']; $orderItem->product_item_price = $dbOrderItemDetail->product_item_price; $orderItem->product_attributes_price = 0; $OrderitemAttrTbIds = array(); $product_attribute_names = array(); // Check for count // 1. If item has attribute if (!empty($item['attrDetail'])) { // Get attribute list for order items $DBoptionList = $this->getOrderItemOptionList($item['order_item_id']); foreach ($item['attrDetail'] as $key => $attr) { /* Control come if user has changed option value to not compulsory. (none) Just removing the empty option field */ if ($attr['type'] == 'Select' && empty($attr['value'])) { continue; } // If type = select and option present in Db attribute array then nothing have to update // For text type, we hv to update if ($attr['type'] == "Textbox") { $itemattributeoption_id = $attr['itemattributeoption_id']; // Update option - text field value and update option entry $optionDetails['orderitemattribute_name'] = $attr['value']; } elseif ($attr['type'] == 'Select') { $itemattributeoption_id = $attr['value']; } // Get attribute option details $optDetail = $this->productHelper->getOrderAttributeOptionDetails($item['order_item_id'], $itemattributeoption_id); // For new option, it will be empty if (empty($optDetail)) { // Get option details $result = $this->productHelper->getAttributeOptionDetails($itemattributeoption_id); $optionDetails['order_item_id'] = $item['order_item_id']; $optionDetails['itemattributeoption_id'] = $result['itemattributeoption_id']; $optionDetails['orderitemattribute_name'] = $result['itemattributeoption_name']; // It is recalculated in next function - insertOptionToOrderItems $optionDetails['orderitemattribute_price'] = 0; $optionDetails['orderitemattribute_prefix'] = $result['itemattributeoption_prefix']; } else { $optionDetails = $optDetail; } // Insert/update option and get latest option detail $newOptionDetails = $this->productHelper->insertOptionToOrderItems($optionDetails); if ($newOptionDetails['orderitemattribute_prefix'] == '+') { $orderItem->product_attributes_price += $newOptionDetails['orderitemattribute_price']; } elseif ($newOptionDetails['orderitemattribute_prefix'] == '-') { $orderItem->product_attributes_price -= $newOptionDetails['orderitemattribute_price']; } $OrderitemAttrTbIds[] = $newOptionDetails['itemattributeoption_id']; $product_attribute_names[] = $newOptionDetails['orderitemattribute_name']; // Remove from DBoptionList if ($itemattributeoption_id && isset($DBoptionList[$itemattributeoption_id])) { unset($DBoptionList[$itemattributeoption_id]); } } // Delete extra options $this->deleteExtraOrderoptions($DBoptionList); // Get attribute ids and names $orderItem->product_attributes = !empty($OrderitemAttrTbIds) ? implode(',', $OrderitemAttrTbIds) : ''; $orderItem->product_attribute_names = !empty($product_attribute_names) ? implode(',', $product_attribute_names) : ''; } // ProductPrice = Base price + attribute price) * qty $productPrice = ((double) $orderItem->product_item_price + (double) $orderItem->product_attributes_price) * $orderItem->product_quantity; $orderItem->original_price = $productPrice; // Check for item discount and update product price if (isset($dbOrderItemDetail->params)) { $param = json_decode($dbOrderItemDetail->params, true); $cop_code = isset($param['coupon_code']) ? $param['coupon_code'] : ''; if ($cop_code) { $path = JPATH_SITE . "/components/com_quick2cart/models/cartcheckout.php"; $checkoutModel = $this->comquick2cartHelper->loadqtcClass($path, 'Quick2cartModelcartcheckout'); $valid = $checkoutModel->getcoupon($cop_code, $userId, "order", $order_id); if (!empty($valid)) { if ($valid[0]->val_type == 1) { $cval = $valid[0]->value / 100 * $productPrice; } else { $cval = $valid[0]->value; } $afterDiscount = $productPrice - $cval; if ($afterDiscount <= 0) { $afterDiscount = 0; } $productPrice = $afterDiscount >= 0 ? $afterDiscount : $totalamt; } } } // Leval of taxation order leval or item leval $taxShipLeval = isset($formData['editLeval_taxship']) ? $formData['editLeval_taxship'] : ''; $itemTaxShipDetail = isset($formData['itemTaxShipDetail']) ? $formData['itemTaxShipDetail'] : ''; if (isset($itemTaxShipDetail[$orderItem->order_item_id]['tax'])) { // Update the item tax detail $DBitem_tax_detail = array(); if (!empty($dbOrderItemDetail->item_tax_detail)) { $DBitem_tax_detail = json_decode($dbOrderItemDetail->item_tax_detail, true); } $DBitem_tax_detail['adminUpdate'] = "Admin updated the tax. Old tax = " . $dbOrderItemDetail->item_tax . " && new = " . $itemTaxShipDetail[$orderItem->order_item_id]['tax']; $orderItem->item_tax_detail = json_encode($DBitem_tax_detail); // Update the item tax $orderItem->item_tax = $dbOrderItemDetail->item_tax = $itemTaxShipDetail[$orderItem->order_item_id]['tax']; $totalItemTax += $orderItem->item_tax; } if (isset($itemTaxShipDetail[$orderItem->order_item_id]['ship'])) { // Update the item ship detail $DBitem_ship_detail = array(); if (!empty($dbOrderItemDetail->item_shipDetail)) { $DBitem_ship_detail = json_decode($dbOrderItemDetail->item_shipDetail, true); } $DBitem_ship_detail['adminUpdate'] = "Admin updated the ship. Old tax = " . $dbOrderItemDetail->item_shipcharges . " && new = " . $itemTaxShipDetail[$orderItem->order_item_id]['ship']; $orderItem->item_tax_detail = json_encode($DBitem_tax_detail); $orderItem->item_shipcharges = $dbOrderItemDetail->item_shipcharges = $itemTaxShipDetail[$orderItem->order_item_id]['ship']; $totalItemShip += $orderItem->item_shipcharges; } $orderItem->product_final_price = $productPrice + $dbOrderItemDetail->item_tax + $dbOrderItemDetail->item_shipcharges; $modifiedOrder->original_amount += $orderItem->product_final_price; try { $db = JFactory::getDbo(); if (!$db->updateObject('#__kart_order_item', $orderItem, 'order_item_id')) { echo $db->stderr(); } } catch (Exception $e) { $this->setError($e->getMessage()); } } // NOW: Update the order table $copDiscount = 0; if ($modifiedOrder->coupon_code) { $copDiscount = $checkoutModel->afterDiscountPrice($modifiedOrder->original_amount, $modifiedOrder->coupon_code, "", "order", $modifiedOrder->id); $copDiscount = $copDiscount >= 0 ? $copDiscount : 0; } // Get order detail $dbOrderDetail = $this->getOrderEntry($modifiedOrder->id); $modifiedOrder->order_tax_details = $dbOrderDetail->order_tax_details; $modifiedOrder->order_tax = $dbOrderDetail->order_tax; $modifiedOrder->order_shipping_details = $dbOrderDetail->order_shipping_details; $modifiedOrder->order_shipping = $dbOrderDetail->order_shipping; // 4. Update amount column according to discount,tax,shipping details if (isset($formData['OrderTaxShipDetail'])) { $newOrderTax = isset($formData['OrderTaxShipDetail']['tax']) ? $formData['OrderTaxShipDetail']['tax'] : 0; // If tax is updated then only update field if ($newOrderTax != $dbOrderDetail->order_tax) { // Update the item tax detail $DBTax_detail = array(); if (!empty($dbOrderDetail->order_tax_details)) { $DBTax_detail = json_decode($dbOrderDetail->order_tax_details, true); } $DBTax_detail['adminUpdate'][]['old'] = $dbOrderDetail->order_tax; $DBTax_detail['adminUpdate'][]['new'] = $newOrderTax; $modifiedOrder->order_tax_details = json_encode($DBTax_detail); $modifiedOrder->order_tax = $newOrderTax; } $newOrderShip = isset($formData['OrderTaxShipDetail']['ship']) ? $formData['OrderTaxShipDetail']['ship'] : 0; // If shipping is updated then only update field if ($newOrderShip != $dbOrderDetail->order_shipping) { // Update the item tax detail $DBTax_detail = array(); if (!empty($dbOrderDetail->order_shipping_details)) { $DBTax_detail = json_decode($dbOrderDetail->order_shipping_details, true); } $DBTax_detail['adminUpdate'][]['old'] = $dbOrderDetail->order_shipping; $DBTax_detail['adminUpdate'][]['new'] = $newOrderShip; $modifiedOrder->order_shipping_details = json_encode($DBTax_detail); $modifiedOrder->order_shipping = $newOrderShip; } $modifiedOrder->amount = $modifiedOrder->original_amount + $modifiedOrder->order_tax + $modifiedOrder->order_shipping - $copDiscount; } else { $modifiedOrder->amount = $modifiedOrder->original_amount; // + $totalItemTax + $totalItemShip - $copDiscount; } if (!$db->updateObject('#__kart_orders', $modifiedOrder, 'id')) { $this->setError($db->getErrorMsg()); return 0; } return 1; }