更新内向库存不正常

时间:2019-05-10 10:53:20

标签: php vtiger vtigercrm

嗨,我正在尝试通过清单实用程序对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);
                    }
    }

0 个答案:

没有答案