嗨,我正在尝试通过清单实用程序对vtiger的采购订单进行一些更改。这是我需要做的。
当我将采购订单状态从收到的装运更改为取消时,应删除新创建的内向库存。
我尝试更改updateinventoryproductrel()
中的功能inventoryutils.php
if ($moduleName === 'PurchaseOrder') {
$statusFieldName = 'postatus';
$statusFieldValue = $recordDetails[$statusFieldName];
$log->debug("SAKET:: We reached here (0). Status field value = ".$statusFieldValue);
if ($statusFieldValue === 'Cancelled') {
global $itemQuantitiesList;
$statusChanged = false;
$vtEntityDelta = new VTEntityDelta ();
$oldEntity = $vtEntityDelta-> getOldValue($moduleName, $entity_id, $statusFieldName);
$recordDetails = $entity->getData();
$statusChanged = $vtEntityDelta->hasChanged($moduleName, $entity_id, $statusFieldName);
if ($statusChanged && $itemQuantitiesList) {
$db = PearDatabase::getInstance();
$query = "SELECT postvalue FROM vtiger_modtracker_detail
INNER JOIN vtiger_modtracker_basic ON vtiger_modtracker_basic.id = vtiger_modtracker_detail.id
WHERE crmid = ? AND fieldname = ? ORDER BY vtiger_modtracker_detail.id DESC";
$result = $db->pquery($query, array($entity_id, $statusFieldName));
$numOfRows = $db->num_rows($result);
$statusStack = array();
for ($i=0; $i<$numOfRows; $i++) {
$statusStack[$i+1] = $db->query_result($result, $i, 'postvalue');
}
$cancelledKey = array_search('Cancelled', $statusStack);
if (!$cancelledKey) {//First time triggering status as "Cancelled"
$cancelledKey = $numOfRows;
}
for($i=1; $i<=$cancelledKey; $i++) {
if ($statusStack[$i] === 'Received Shipment') {
//Reverting for quantities of line items
$deletedItems = ($itemQuantitiesList['deleted']) ? $itemQuantitiesList['deleted'] : array();
foreach ($itemQuantitiesList as $productId => $quantity) {
$quantity = -$quantity;
addToProductStock($productId, $quantity);
}
break;
}
}
}
} elseif ($statusFieldValue === 'Received Shipment') {
$db = PearDatabase::getInstance();
$query = "SELECT postvalue FROM vtiger_modtracker_detail
INNER JOIN vtiger_modtracker_basic ON vtiger_modtracker_basic.id = vtiger_modtracker_detail.id
WHERE crmid = ? AND fieldname = ? ORDER BY vtiger_modtracker_detail.id DESC";
$result = $db->pquery($query, array($entity_id, $statusFieldName));
$numOfRows = $db->num_rows($result);
$statusStack = array();
for ($i=0; $i<$numOfRows; $i++) {
$statusStack[$i+1] = $db->query_result($result, $i, 'postvalue');
}
$isUpdateNeeded = false;
$recievedKey = array_search('Received Shipment', $statusStack);
if(CRMEntity::isBulkSaveMode() || !$recievedKey) {//From Import or First time triggering status as "Received Shipment"
$isUpdateNeeded = true;
}
if ($recievedKey && !$isUpdateNeeded) {
for($i=1; $i<=$recievedKey; $i++) {
if ($statusStack[$i] === 'Cancelled') {
$isUpdateNeeded = true;
break;
}
}
}
$log->debug("SAKET:: We reached here (1). Type = ".$type);
global $itemQuantitiesList, $isItemsRequest;
if (($type == "Normal" || $type == "Material Return") && $itemQuantitiesList && ($isUpdateNeeded || $isItemsRequest)) {
//Adding for new line items
$newItems = ($itemQuantitiesList['new']) ? $itemQuantitiesList['new'] : array();
foreach ($newItems as $productId => $quantity) {
$log->debug("Stocks :: new condition");
addToProductStock($productId, $quantity);
addProductsInWarehouse($entity_id,$productId);
}
//Reverting for deleted line items
$deletedItems = ($itemQuantitiesList['deleted']) ? $itemQuantitiesList['deleted'] : array();
foreach ($deletedItems as $productId => $quantity) {
$quantity = -$quantity;
$log->debug("Stocks :: deleted condition.");
addToProductStock($productId, $quantity);
}
//Updating for updated line items
$updatedItems = ($itemQuantitiesList['updated']) ? $itemQuantitiesList['updated'] : array();
foreach ($updatedItems as $productId => $quantity) {
$log->debug("Stocks :: updated condition");
addToProductStock($productId, $quantity);
}
} else if (($type == "Normal" || $type == "Material Return") && $isUpdateNeeded) {
$log->debug("Stocks :: else if condition");
addProductsToStock($entity_id);
//addMultipleProductsInWarehouse($entity_id);
} else if ($type == "Inter-office Stock Transfer" && $isUpdateNeeded) {
$invoice_ids = vtws_getIdComponents($recordDetails['cf_1056']);
$invoice_id = $invoice_ids[1];
// Find the relevant stocks from the invoice_id
// Assign it the relevant rack as chosen in PO (cf_898)
// Mark it in warehouse
$rack_ids = vtws_getIdComponents($recordDetails['cf_898']);
$rack_id = $rack_ids[1];
$log->debug("SAKET:: We reached here (2).");
markStocksInWarehouseByInvoiceId($invoice_id, $rack_id, $entity_id);
}
}