public static function render($userInputObject, $user)
 {
     global $list_max_entries_per_page;
     $adb = PearDatabase::getInstance();
     $viewer = new Import_UI_Viewer();
     $ownerId = $userInputObject->get('foruser');
     $owner = new Users();
     $owner->id = $ownerId;
     $owner->retrieve_entity_info($ownerId, 'Users');
     if (!is_admin($user) && $user->id != $owner->id) {
         $viewer->display('OperationNotPermitted.tpl', 'Vtiger');
         exit;
     }
     $userDBTableName = Import_Utils::getDbTableName($owner);
     $moduleName = $userInputObject->get('module');
     $moduleMeta = self::getModuleMeta($moduleName, $user);
     $result = $adb->query('SELECT recordid FROM ' . $userDBTableName . ' WHERE status is NOT NULL AND recordid IS NOT NULL');
     $noOfRecords = $adb->num_rows($result);
     $importedRecordIds = array();
     for ($i = 0; $i < $noOfRecords; ++$i) {
         $importedRecordIds[] = $adb->query_result($result, $i, 'recordid');
     }
     if (count($importedRecordIds) == 0) {
         $importedRecordIds[] = 0;
     }
     $focus = CRMEntity::getInstance($moduleName);
     $queryGenerator = new QueryGenerator($moduleName, $user);
     $customView = new CustomView($moduleName);
     $viewId = $customView->getViewIdByName('All', $moduleName);
     $queryGenerator->initForCustomViewById($viewId);
     $list_query = $queryGenerator->getQuery();
     // Fetch only last imported records
     $list_query .= ' AND ' . $focus->table_name . '.' . $focus->table_index . ' IN (' . implode(',', $importedRecordIds) . ')';
     if (PerformancePrefs::getBoolean('LISTVIEW_COMPUTE_PAGE_COUNT', false) === true) {
         $count_result = $adb->query(mkCountQuery($list_query));
         $noofrows = $adb->query_result($count_result, 0, "count");
     } else {
         $noofrows = null;
     }
     $start = ListViewSession::getRequestCurrentPage($moduleName, $list_query, $viewId, false);
     $navigation_array = VT_getSimpleNavigationValues($start, $list_max_entries_per_page, $noofrows);
     $limit_start_rec = ($start - 1) * $list_max_entries_per_page;
     $list_result = $adb->pquery($list_query . " LIMIT {$limit_start_rec}, {$list_max_entries_per_page}", array());
     $recordListRangeMsg = getRecordRangeMessage($list_result, $limit_start_rec, $noofrows);
     $viewer->assign('recordListRange', $recordListRangeMsg);
     $controller = new ListViewController($adb, $user, $queryGenerator);
     $listview_header = $controller->getListViewHeader($focus, $moduleName, $url_string, $sorder, $order_by, true);
     $listview_entries = $controller->getListViewEntries($focus, $moduleName, $list_result, $navigation_array, true);
     $viewer->assign('CURRENT_PAGE', $start);
     $viewer->assign('LISTHEADER', $listview_header);
     $viewer->assign('LISTENTITY', $listview_entries);
     $viewer->assign('FOR_MODULE', $moduleName);
     $viewer->assign('FOR_USER', $ownerId);
     $isAjax = $userInputObject->get('ajax');
     if (!empty($isAjax)) {
         echo $viewer->fetch('ListViewEntries.tpl');
     } else {
         $viewer->display('ImportListView.tpl');
     }
 }
 public function getImportStatusCount()
 {
     $adb = PearDatabase::getInstance();
     $tableName = Import_Utils::getDbTableName($this->user);
     $result = $adb->query('SELECT status FROM ' . $tableName);
     $statusCount = array('TOTAL' => 0, 'IMPORTED' => 0, 'FAILED' => 0, 'PENDING' => 0, 'CREATED' => 0, 'SKIPPED' => 0, 'UPDATED' => 0, 'MERGED' => 0);
     if ($result) {
         $noOfRows = $adb->num_rows($result);
         $statusCount['TOTAL'] = $noOfRows;
         for ($i = 0; $i < $noOfRows; ++$i) {
             $status = $adb->query_result($result, $i, 'status');
             if (self::$IMPORT_RECORD_NONE == $status) {
                 $statusCount['PENDING']++;
             } elseif (self::$IMPORT_RECORD_FAILED == $status) {
                 $statusCount['FAILED']++;
             } else {
                 $statusCount['IMPORTED']++;
                 switch ($status) {
                     case self::$IMPORT_RECORD_CREATED:
                         $statusCount['CREATED']++;
                         break;
                     case self::$IMPORT_RECORD_SKIPPED:
                         $statusCount['SKIPPED']++;
                         break;
                     case self::$IMPORT_RECORD_UPDATED:
                         $statusCount['UPDATED']++;
                         break;
                     case self::$IMPORT_RECORD_MERGED:
                         $statusCount['MERGED']++;
                         break;
                 }
             }
         }
     }
     return $statusCount;
 }
예제 #3
0
	public static function process($requestObject, $user) {

		$moduleName = $requestObject->get('module');
		$mode = $requestObject->get('mode');

		if($mode == 'undo_import') {
			Import_Index_Controller::undoLastImport($requestObject, $user);
			exit;
		} elseif($mode == 'listview') {
			Import_ListView_Controller::render($requestObject, $user);
			exit;
		} elseif($mode == 'delete_map') {
			Import_Index_Controller::deleteMap($requestObject, $user);
			exit;
		} elseif($mode == 'clear_corrupted_data') {
			Import_Utils::clearUserImportInfo($user);
		} elseif($mode == 'cancel_import') {
			$importId = $requestObject->get('import_id');
			$importInfo = Import_Queue_Controller::getImportInfoById($importId);
			if($importInfo != null) {
				if($importInfo['user_id'] == $user->id || is_admin($user)) {
					$importuser = new Users();
					$importuser->id = $importInfo['user_id'];
					$importuser->retrieve_entity_info($importInfo['user_id'], 'Users');
					$importDataController = new Import_Data_Controller($importInfo, $importuser);
					$importStatusCount = $importDataController->getImportStatusCount();
					$importDataController->finishImport();
					Import_Controller::showResult($importInfo, $importStatusCount);
				}
				exit;
			}
		}

		// Check if import on the module is locked
		$lockInfo = Import_Lock_Controller::isLockedForModule($moduleName);
		if($lockInfo != null) {
			$lockedBy = $lockInfo['userid'];
			if($user->id != $lockedBy && !is_admin($user)) {
				Import_Utils::showImportLockedError($lockInfo);
				exit;
			} else {
				if($mode == 'continue_import' && $user->id == $lockedBy) {
					$importController = new Import_Controller($requestObject, $user);
					$importController->triggerImport(true);
				} else {
					$importInfo = Import_Queue_Controller::getImportInfoById($lockInfo['importid']);
					$lockOwner = $user;
					if($user->id != $lockedBy) {
						$lockOwner = new Users();
						$lockOwner->id = $lockInfo['userid'];
						$lockOwner->retrieve_entity_info( $lockInfo['userid'], 'Users');
					}
					Import_Controller::showImportStatus($importInfo, $lockOwner);
				}
				exit;

			}
		}

		if(Import_Utils::isUserImportBlocked($user)) {
			$importInfo = Import_Queue_Controller::getUserCurrentImportInfo($user);
			if($importInfo != null) {
				Import_Controller::showImportStatus($importInfo, $user);
				exit;
			} else {
				Import_Utils::showImportTableBlockedError($moduleName, $user);
				exit;
			}
		}
		Import_Utils::clearUserImportInfo($user);

		if($mode == 'upload_and_parse') {
			if(Import_Index_Controller::validateFileUpload($requestObject)) {
				Import_Index_Controller::loadAdvancedSettings($requestObject, $user);
				exit;
			}
		} elseif($mode == 'import') {
			Import_Controller::import($requestObject, $user);
			exit;
		}

		Import_Index_Controller::loadBasicSettings($requestObject, $user);
	}
예제 #4
0
 public function addRecordToDBFullCSV($columnNames, $fieldValues)
 {
     $adb = PearDatabase::getInstance();
     $fieldValues = array_values($fieldValues);
     $tableName = Import_Utils::getDbTableName($this->user) . "_fullcsv";
     $adb->pquery('INSERT INTO ' . $tableName . ' (' . implode(',', $columnNames) . ') VALUES (' . generateQuestionMarks($fieldValues) . ')', $fieldValues);
 }
예제 #5
0
function createRecords($obj)
{
    global $adb, $VTIGER_BULK_SAVE_MODE;
    $moduleName = $obj->module;
    $moduleHandler = vtws_getModuleHandlerFromName($moduleName, $obj->user);
    $moduleMeta = $moduleHandler->getMeta();
    $moduleObjectId = $moduleMeta->getEntityId();
    $moduleFields = $moduleMeta->getModuleFields();
    include_once 'include/fields/InventoryLineField.php';
    $ilfields = new InventoryLineField();
    $moduleFields = array_merge($moduleFields, $ilfields->getInventoryLineFieldsByObject());
    $focus = CRMEntity::getInstance($moduleName);
    $wsrs = $adb->pquery('select id from vtiger_ws_entity where name=?', array('Products'));
    if ($wsrs and $adb->num_rows($wsrs) == 1) {
        $pdowsid = $adb->query_result($wsrs, 0, 0) . 'x';
    } else {
        $pdowsid = '0x';
    }
    $wsrs = $adb->pquery('select id from vtiger_ws_entity where name=?', array('Services'));
    if ($wsrs and $adb->num_rows($wsrs) == 1) {
        $srvwsid = $adb->query_result($wsrs, 0, 0) . 'x';
    } else {
        $srvwsid = '0x';
    }
    $wsrs = $adb->pquery('select id from vtiger_ws_entity where name=?', array('Users'));
    if ($wsrs and $adb->num_rows($wsrs) == 1) {
        $usrwsid = $adb->query_result($wsrs, 0, 0) . 'x';
    } else {
        $usrwsid = '0x';
    }
    $tableName = Import_Utils::getDbTableName($obj->user);
    $sql = 'SELECT * FROM ' . $tableName . ' WHERE status = ' . Import_Data_Controller::$IMPORT_RECORD_NONE . ' GROUP BY subject';
    if ($obj->batchImport) {
        $importBatchLimit = GlobalVariable::getVariable('Import_Batch_Limit', 100);
        $sql .= ' LIMIT ' . $importBatchLimit;
    }
    $result = $adb->query($sql);
    $numberOfRecords = $adb->num_rows($result);
    if ($numberOfRecords <= 0) {
        return;
    }
    $fieldMapping = $obj->fieldMapping;
    $fieldColumnMapping = $moduleMeta->getFieldColumnMapping();
    for ($i = 0; $i < $numberOfRecords; ++$i) {
        $row = $adb->raw_query_result_rowdata($result, $i);
        $rowId = $row['id'];
        $entityInfo = null;
        $fieldData = array();
        $lineItems = array();
        $subject = $row['subject'];
        $sql = 'SELECT * FROM ' . $tableName . ' WHERE status = ' . Import_Data_Controller::$IMPORT_RECORD_NONE . ' AND subject = "' . str_replace("\"", "\\\"", $subject) . '"';
        $subjectResult = $adb->query($sql);
        $count = $adb->num_rows($subjectResult);
        $subjectRowIDs = array();
        for ($j = 0; $j < $count; ++$j) {
            $subjectRow = $adb->raw_query_result_rowdata($subjectResult, $j);
            if ($subjectRow['productid'] == '' || $subjectRow['quantity'] == '' || $subjectRow['listprice'] == '') {
                continue;
            }
            array_push($subjectRowIDs, $subjectRow['id']);
            $lineItemData = array();
            $lineItemData['discount'] = 0;
            foreach ($fieldMapping as $fieldName => $index) {
                if ($moduleFields[$fieldName]->getTableName() == 'vtiger_inventoryproductrel') {
                    if ($fieldName == 'productid') {
                        $fieldValue = $subjectRow[$fieldName];
                        if (strpos($fieldValue, '::::') > 0) {
                            $fieldValueDetails = explode('::::', $fieldValue);
                        } else {
                            if (strpos($fieldValue, ':::') > 0) {
                                $fieldValueDetails = explode(':::', $fieldValue);
                            } else {
                                $fieldValueDetails = $fieldValue;
                            }
                        }
                        if (count($fieldValueDetails) > 1) {
                            $referenceModuleName = trim($fieldValueDetails[0]);
                            $entityLabel = trim($fieldValueDetails[1]);
                            $entityId = getEntityId($referenceModuleName, $entityLabel);
                        } else {
                            $referencedModules = array('Products', 'Services');
                            $entityLabel = $fieldValue;
                            foreach ($referencedModules as $referenceModule) {
                                $referenceModuleName = $referenceModule;
                                $referenceEntityId = getEntityId($referenceModule, $entityLabel);
                                if ($referenceEntityId != 0) {
                                    $entityId = $referenceEntityId;
                                    break;
                                }
                            }
                        }
                        if (empty($entityId) and in_array($referenceModuleName, array('Products', 'Services'))) {
                            $pdinfo = array();
                            if ($referenceModuleName == 'Services') {
                                $pdoinfo['servicename'] = $entityLabel;
                            } else {
                                $pdoinfo['productname'] = $entityLabel;
                            }
                            $pdoinfo['assigned_user_id'] = $usrwsid . $obj->user->id;
                            try {
                                $VTIGER_BULK_SAVE_MODE = false;
                                $psInfo = vtws_create($referenceModuleName, $pdoinfo, $obj->user);
                                $VTIGER_BULK_SAVE_MODE = true;
                                $entityId = $psInfo['id'];
                            } catch (Exception $e) {
                                continue 2;
                                // ignore this line
                            }
                        } else {
                            if ($referenceModuleName == 'Services') {
                                $entityId = $srvwsid . $entityId;
                            } else {
                                $entityId = $pdowsid . $entityId;
                            }
                        }
                        $lineItemData[$fieldName] = $entityId;
                    } else {
                        $lineItemData[$fieldName] = $subjectRow[$fieldName];
                        if ($fieldName == 'discount_amount' and $subjectRow[$fieldName] > 0) {
                            $lineItemData['discount'] = 1;
                            $lineItemData['discount_type'] = 'amount';
                        }
                        if ($fieldName == 'discount_percent' and $subjectRow[$fieldName] > 0) {
                            $lineItemData['discount'] = 1;
                            $lineItemData['discount_percentage'] = $subjectRow[$fieldName];
                            $lineItemData['discount_type'] = 'percentage';
                        }
                        if ($fieldName == 'quantity') {
                            $lineItemData['qty'] = $subjectRow[$fieldName];
                        }
                    }
                }
            }
            array_push($lineItems, $lineItemData);
        }
        foreach ($fieldMapping as $fieldName => $index) {
            $fieldData[$fieldName] = $row[strtolower($fieldName)];
            if ($fieldName == 'hdnTaxType') {
                $fieldData['taxtype'] = $row[strtolower($fieldName)];
            }
            if ($fieldName == 'txtAdjustment' and $fieldData[$fieldName] != 0) {
                $fieldData['adjustmentType'] = 'add';
                $fieldData['adjustment'] = $fieldData[$fieldName];
            }
        }
        if (!array_key_exists('assigned_user_id', $fieldData)) {
            $fieldData['assigned_user_id'] = $obj->user->id;
        }
        if (!empty($lineItems)) {
            if (method_exists($focus, 'importRecord')) {
                $entityInfo = $focus->importRecord($obj, $fieldData, $lineItems);
            }
        }
        if ($entityInfo == null) {
            $entityInfo = array('id' => null, 'status' => $obj->getImportRecordStatus('failed'));
        }
        foreach ($subjectRowIDs as $id) {
            $obj->importedRecordInfo[$id] = $entityInfo;
            $obj->updateImportStatus($id, $entityInfo);
        }
    }
    unset($result);
    return true;
}
예제 #6
0
 public function copyFromFileToDB()
 {
     $fileReader = Import_Utils::getFileReader($this->userInputObject, $this->user);
     $fileReader->read();
     $fileReader->deleteFile();
     if ($fileReader->getStatus() == 'success') {
         $this->numberOfRecords = $fileReader->getNumberOfRecordsRead();
         return true;
     } else {
         Import_Utils::showErrorPage(getTranslatedString('ERR_FILE_READ_FAILED', 'Import') . ' - ' . getTranslatedString($fileReader->getErrorMessage(), 'Import'));
         return false;
     }
 }
예제 #7
0
 public function addRecordToDB($columnNames, $fieldValues)
 {
     $adb = PearDatabase::getInstance();
     $tableName = Import_Utils::getDbTableName($this->user);
     $adb->pquery('INSERT INTO ' . $tableName . ' (' . implode(',', $columnNames) . ') VALUES (' . generateQuestionMarks($fieldValues) . ')', $fieldValues);
     $this->numberOfRecordsRead++;
 }