function updateInventoryProductRel($entity) { global $log, $adb, $updateInventoryProductRel_update_product_array; $entity_id = vtws_getIdComponents($entity->getId()); $entity_id = $entity_id[1]; $update_product_array = $updateInventoryProductRel_update_product_array; $log->debug("Entering into function updateInventoryProductRel(" . $entity_id . ")."); if (!empty($update_product_array)) { foreach ($update_product_array as $id => $seq) { foreach ($seq as $seq => $product_info) { foreach ($product_info as $key => $index) { $updqtyinstk = getPrdQtyInStck($key); $upd_qty = $updqtyinstk + $index; updateProductQty($key, $upd_qty); } } } } $adb->pquery("UPDATE vtiger_inventoryproductrel SET incrementondel=1 WHERE id=?", array($entity_id)); $product_info = $adb->pquery("SELECT productid,sequence_no, quantity from vtiger_inventoryproductrel WHERE id=?", array($entity_id)); $numrows = $adb->num_rows($product_info); for ($index = 0; $index < $numrows; $index++) { $productid = $adb->query_result($product_info, $index, 'productid'); $qty = $adb->query_result($product_info, $index, 'quantity'); $sequence_no = $adb->query_result($product_info, $index, 'sequence_no'); $qtyinstk = getPrdQtyInStck($productid); $upd_qty = $qtyinstk - $qty; updateProductQty($productid, $upd_qty); $sub_prod_query = $adb->pquery("SELECT productid from vtiger_inventorysubproductrel WHERE id=? AND sequence_no=?", array($entity_id, $sequence_no)); if ($adb->num_rows($sub_prod_query) > 0) { for ($j = 0; $j < $adb->num_rows($sub_prod_query); $j++) { $sub_prod_id = $adb->query_result($sub_prod_query, $j, "productid"); $sqtyinstk = getPrdQtyInStck($sub_prod_id); $supd_qty = $sqtyinstk - $qty; updateProductQty($sub_prod_id, $supd_qty); } } } $log->debug("Exit from function updateInventoryProductRel(" . $entity_id . ")"); }
/** Function used to save the Inventory product details for the passed entity * @param object reference $focus - object reference to which we want to save the product details from REQUEST values where as the entity will be out,in * @param string $module - module name * @param $update_prod_stock - true or false (default), if true we have to update the stock for PO only * @return void */ function updateQtyInStock() { global $log; $log->debug("Entering into function updateQtyInStock()."); $query = "select productid, quantity from ec_inventoryproductrel where id='" . $this->id . "'"; $result = $this->db->query($query); while ($row = $this->db->fetch_array($result)) { $productid = $row['productid']; $quantity = $row['quantity']; $qtyinstock = getPrdQtyInStck($productid); $lates_qty = $qtyinstock + $quantity; updateProductQty($productid, $lates_qty); } $log->debug("Exit from function updateQtyInStock()."); }
$smarty->assign("ASSOCIATEDPRODUCTS", $associated_prod); $smarty->assign("MODE", $focus->mode); } elseif (isset($_REQUEST['isDuplicate']) && $_REQUEST['isDuplicate'] == 'true') { $associated_prod = $INVOICE_associated_prod; $smarty->assign("AVAILABLE_PRODUCTS", 'true'); $smarty->assign("MODE", $focus->mode); } elseif (isset($_REQUEST['product_id']) && $_REQUEST['product_id'] != '' || isset($_REQUEST['opportunity_id']) && $_REQUEST['opportunity_id'] != '') { $smarty->assign("ASSOCIATEDPRODUCTS", $associated_prod); $InvTotal = getInventoryTotal($_REQUEST['return_module'], $_REQUEST['return_id']); $smarty->assign("MODE", $focus->mode); //this is to display the Product Details in first row when we create new PO from Product relatedlist if ($_REQUEST['return_module'] == 'Products') { $smarty->assign("PRODUCT_ID", vtlib_purify($_REQUEST['product_id'])); $smarty->assign("PRODUCT_NAME", getProductName($_REQUEST['product_id'])); $smarty->assign("UNIT_PRICE", vtlib_purify($_REQUEST['product_id'])); $smarty->assign("QTY_IN_STOCK", getPrdQtyInStck($_REQUEST['product_id'])); $smarty->assign("VAT_TAX", getProductTaxPercentage("VAT", $_REQUEST['product_id'])); $smarty->assign("SALES_TAX", getProductTaxPercentage("Sales", $_REQUEST['product_id'])); $smarty->assign("SERVICE_TAX", getProductTaxPercentage("Service", $_REQUEST['product_id'])); } } if (isset($cust_fld)) { $smarty->assign("CUSTOMFIELD", $cust_fld); } $smarty->assign("ASSOCIATEDPRODUCTS", $associated_prod); if (isset($_REQUEST['return_module'])) { $smarty->assign("RETURN_MODULE", vtlib_purify($_REQUEST['return_module'])); } else { $smarty->assign("RETURN_MODULE", "Invoice"); } if (isset($_REQUEST['return_action'])) {
function addProductsToStock($recordId) { $adb = PearDatabase::getInstance(); $product_info = $adb->pquery("SELECT productid,sequence_no, quantity from vtiger_inventoryproductrel WHERE id=?", array($recordId)); $numrows = $adb->num_rows($product_info); for ($index = 0; $index < $numrows; $index++) { $productid = $adb->query_result($product_info, $index, 'productid'); $qty = $adb->query_result($product_info, $index, 'quantity'); $sequence_no = $adb->query_result($product_info, $index, 'sequence_no'); $qtyinstk = getPrdQtyInStck($productid); $upd_qty = $qtyinstk + $qty; updateProductQty($productid, $upd_qty); $sub_prod_query = $adb->pquery("SELECT productid from vtiger_inventorysubproductrel WHERE id=? AND sequence_no=?", array($recordId, $sequence_no)); if ($adb->num_rows($sub_prod_query) > 0) { for ($j = 0; $j < $adb->num_rows($sub_prod_query); $j++) { $sub_prod_id = $adb->query_result($sub_prod_query, $j, "productid"); $sqtyinstk = getPrdQtyInStck($sub_prod_id); $supd_qty = $sqtyinstk + $qty; updateProductQty($sub_prod_id, $supd_qty); } } } }
function updateProductStockFromDatabase($recordId, $add = true) { global $adb; $pdosql = 'SELECT vtiger_inventoryproductrel.productid,sequence_no, quantity from vtiger_inventoryproductrel inner join vtiger_products on vtiger_products.productid = vtiger_inventoryproductrel.productid WHERE id=?'; $subpdosql = 'SELECT vtiger_inventorysubproductrel.productid from vtiger_inventorysubproductrel inner join vtiger_products on vtiger_products.productid = vtiger_inventorysubproductrel.productid WHERE id=? AND sequence_no=?'; $product_info = $adb->pquery($pdosql, array($recordId)); $numrows = $adb->num_rows($product_info); for ($index = 0; $index < $numrows; $index++) { $productid = $adb->query_result($product_info, $index, 'productid'); $qty = $adb->query_result($product_info, $index, 'quantity'); $sequence_no = $adb->query_result($product_info, $index, 'sequence_no'); $qtyinstk = getPrdQtyInStck($productid); if ($add) { $upd_qty = $qtyinstk + $qty; } else { $upd_qty = $qtyinstk - $qty; } updateProductQty($productid, $upd_qty); $sub_prod_query = $adb->pquery($subpdosql, array($recordId, $sequence_no)); if ($adb->num_rows($sub_prod_query) > 0) { for ($j = 0; $j < $adb->num_rows($sub_prod_query); $j++) { $sub_prod_id = $adb->query_result($sub_prod_query, $j, "productid"); $sqtyinstk = getPrdQtyInStck($sub_prod_id); if ($add) { $supd_qty = $sqtyinstk + $qty; } else { $supd_qty = $sqtyinstk - $qty; } updateProductQty($sub_prod_id, $supd_qty); } } } }
function save_module($module) { global $adb, $updateInventoryProductRel_deduct_stock; $updateInventoryProductRel_deduct_stock = false; //in ajax save we should not call this function, because this will delete all the existing product values if ($_REQUEST['action'] != 'PurchaseOrderAjax' && $_REQUEST['ajxaction'] != 'DETAILVIEW' && $_REQUEST['action'] != 'MassEditSave' && $_REQUEST['action'] != 'ProcessDuplicates' && $_REQUEST['action'] != 'SaveAjax' && $this->isLineItemUpdate != false && $_REQUEST['action'] != 'FROM_WS') { $requestProductIdsList = $requestQuantitiesList = array(); $totalNoOfProducts = $_REQUEST['totalProductCount']; for ($i = 1; $i <= $totalNoOfProducts; $i++) { $productId = $_REQUEST['hdnProductId' . $i]; $requestProductIdsList[$productId] = $productId; if (array_key_exists($productId, $requestQuantitiesList)) { $requestQuantitiesList[$productId] = $requestQuantitiesList[$productId] + $_REQUEST['qty' . $i]; continue; } $requestQuantitiesList[$productId] = $_REQUEST['qty' . $i]; } if ($this->mode == '' && $this->column_fields['postatus'] === 'Received Shipment') { //Updating Product stock quantity during create mode foreach ($requestProductIdsList as $productId) { addToProductStock($productId, $requestQuantitiesList[$productId]); } } else { if ($this->column_fields['postatus'] === 'Received Shipment' && $this->mode != '') { //Updating Product stock quantity during edit mode $recordId = $this->id; $result = $adb->pquery("SELECT productid, quantity FROM vtiger_inventoryproductrel WHERE id = ?", array($recordId)); $numOfRows = $adb->num_rows($result); for ($i = 0; $i < $numOfRows; $i++) { $productId = $adb->query_result($result, $i, 'productid'); $productIdsList[$productId] = $productId; $quantitiesList[$productId] = $adb->query_result($result, $i, 'quantity'); } $newProductIds = array_diff($requestProductIdsList, $productIdsList); if ($newProductIds) { foreach ($newProductIds as $productId) { addToProductStock($productId, $requestQuantitiesList[$productId]); } } $deletedProductIds = array_diff($productIdsList, $requestProductIdsList); if ($deletedProductIds) { foreach ($deletedProductIds as $productId) { $productStock = getPrdQtyInStck($productId); $quantity = $productStock - $quantitiesList[$productId]; updateProductQty($productId, $quantity); } } $updatedProductIds = array_intersect($productIdsList, $requestProductIdsList); if ($updatedProductIds) { foreach ($updatedProductIds as $productId) { $quantityDiff = $quantitiesList[$productId] - $requestQuantitiesList[$productId]; if ($quantityDiff < 0) { $quantityDiff = -$quantityDiff; addToProductStock($productId, $quantityDiff); } elseif ($quantityDiff > 0) { $productStock = getPrdQtyInStck($productId); $quantity = $productStock - $quantityDiff; updateProductQty($productId, $quantity); } } } } } //Based on the total Number of rows we will save the product relationship with this entity saveInventoryProductDetails($this, 'PurchaseOrder', $this->update_prod_stock); if ($this->mode != '') { $updateInventoryProductRel_deduct_stock = true; } } // Update the currency id and the conversion rate for the purchase order $update_query = "update vtiger_purchaseorder set currency_id=?, conversion_rate=? where purchaseorderid=?"; $update_params = array($this->column_fields['currency_id'], $this->column_fields['conversion_rate'], $this->id); $adb->pquery($update_query, $update_params); }