protected function SetupAssetModel() { // Lookup Object PK information from Query String (if applicable) // Set mode to Edit or New depending on what's found $intAssetModelId = QApplication::QueryString('intAssetModelId'); if ($intAssetModelId) { $this->objAssetModel = AssetModel::Load($intAssetModelId); if (!$this->objAssetModel) { throw new Exception('Could not find a AssetModel object with PK arguments: ' . $intAssetModelId); } $this->strTitleVerb = QApplication::Translate('Edit'); $this->blnEditMode = true; } else { $this->objAssetModel = new AssetModel(); $this->strTitleVerb = QApplication::Translate('Create'); $this->blnEditMode = false; } }
/** * Override method to perform a property "Get" * This will get the value of $strName * * @param string $strName Name of the property to get * @return mixed */ public function __get($strName) { switch ($strName) { /////////////////// // Member Variables /////////////////// case 'AssetCustomFieldAssetModelId': // Gets the value for intAssetCustomFieldAssetModelId (Read-Only PK) // @return integer return $this->intAssetCustomFieldAssetModelId; case 'AssetModelId': // Gets the value for intAssetModelId (Not Null) // @return integer return $this->intAssetModelId; case 'CustomFieldId': // Gets the value for intCustomFieldId (Not Null) // @return integer return $this->intCustomFieldId; /////////////////// // Member Objects /////////////////// /////////////////// // Member Objects /////////////////// case 'AssetModel': // Gets the value for the AssetModel object referenced by intAssetModelId (Not Null) // @return AssetModel try { if (!$this->objAssetModel && !is_null($this->intAssetModelId)) { $this->objAssetModel = AssetModel::Load($this->intAssetModelId); } return $this->objAssetModel; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case 'CustomField': // Gets the value for the CustomField object referenced by intCustomFieldId (Not Null) // @return CustomField try { if (!$this->objCustomField && !is_null($this->intCustomFieldId)) { $this->objCustomField = CustomField::Load($this->intCustomFieldId); } return $this->objCustomField; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } //////////////////////////// // Virtual Object References (Many to Many and Reverse References) // (If restored via a "Many-to" expansion) //////////////////////////// //////////////////////////// // Virtual Object References (Many to Many and Reverse References) // (If restored via a "Many-to" expansion) //////////////////////////// case '__Restored': return $this->__blnRestored; default: try { return parent::__get($strName); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } } }
public function btnSave_Click($strFormId, $strControlId, $strParameter) { $this->EnableSelectedControls(); $this->ClearWarnings(); $blnError = false; // Make sure at least one checkbox is checked if (!$this->chkCategory->Checked && !$this->chkManufacturer->Checked && !$this->chkLongDescription->Checked) { $blnChecked = false; foreach ($this->arrCheckboxes as $objCheckBox) { if ($objCheckBox->Checked) { $blnChecked = true; break; } } if (!$blnChecked) { $blnError = true; $this->btnCancel->Warning = 'You must select at least one field to edit.'; return; } } // Get an instance of the database $objDatabase = QApplication::$Database[1]; // Begin a MySQL Transaction to be either committed or rolled back $objDatabase->TransactionBegin(); if (count($this->arrCustomFields) > 0) { $customFieldIdArray = array(); foreach ($this->arrCustomFields as $field) { if ($this->arrCheckboxes[$field['input']->strControlId]->Checked) { if ($field['input'] instanceof QTextBox && $field['input']->Required && $field['input']->Text == null || $field['input'] instanceof QListBox && $field['input']->Required && $field['input']->SelectedValue == null) { $blnError = true; $field['input']->Warning = "Required."; } else { $this->arrCustomFieldsToEdit[] = $field; $customFieldIdArray[] = (int) str_replace('cf', '', $field['input']->strControlId); } } } } $set = array(sprintf('`modified_by`= %s', QApplication::$objUserAccount->UserAccountId)); // Force modified_date timestamp update $set[] = '`modified_date` = NOW()'; if ($this->chkLongDescription->Checked) { $set[] = sprintf('`long_description`="%s"', $this->txtLongDescription->Text); } if ($this->chkManufacturer->Checked) { if ($this->lstManufacturer->SelectedValue !== null) { $set[] = sprintf('`manufacturer_id`=%s', $this->lstManufacturer->SelectedValue); } else { $blnError = true; $this->lstManufacturer->Warning = 'Manufacturer is required.'; } } if ($this->chkCategory->Checked) { if ($this->lstCategory->SelectedValue !== null) { $set[] = sprintf('`category_id`= %s', $this->lstCategory->SelectedValue); } else { $blnError = true; $this->lstCategory->Warning = 'Category is required.'; } } // First check that the user is authorized to edit these models foreach ($this->arrModelsToEdit as $intModelId) { $objAssetModel = AssetModel::Load($intModelId); if (!QApplication::AuthorizeEntityBoolean($objAssetModel, 2)) { $blnError = true; $this->btnCancel->Warning = 'You are not authorized to edit one or more of the selected models.'; break; } } if (!$blnError) { try { if (count($this->arrCustomFieldsToEdit) > 0) { // preparing data to edit // Save the values from all of the custom field controls to save the asset foreach ($this->arrModelsToEdit as $intModelId) { $objCustomFieldsArray = CustomField::LoadObjCustomFieldArray(EntityQtype::AssetModel, false); $selectedCustomFieldsArray = array(); foreach ($objCustomFieldsArray as $objCustomField) { if (in_array($objCustomField->CustomFieldId, $customFieldIdArray)) { $selectedCustomFieldsArray[] = $objCustomField; } } CustomField::SaveControls($selectedCustomFieldsArray, true, $this->arrCustomFieldsToEdit, $intModelId, EntityQtype::AssetModel); } } $strQuery = sprintf("UPDATE `asset_model`\n\t\t\t\t\t\t\t\t\t SET " . implode(",", $set) . "\n\t\t\t\t\t\t\t\t\t WHERE `asset_model_id` IN (%s)", implode(",", $this->arrModelsToEdit)); // print $strQuery; exit; $objDatabase->NonQuery($strQuery); $objDatabase->TransactionCommit(); QApplication::Redirect(''); } catch (QMySqliDatabaseException $objExc) { $objDatabase->TransactionRollback(); throw new QDatabaseException(); } } else { $objDatabase->TransactionRollback(); $this->arrCustomFieldsToEdit = array(); } }
public function lstAssetModel_Select($strFormId, $strControlId, $strParameter) { if ($this->lstAssetModel->SelectedValue != null) { $objAssetModel = AssetModel::Load($this->lstAssetModel->SelectedValue); if ($objAssetModel) { if ($objAssetModel->AssetModelCode) { $this->lblAssetModelCode->Text = $objAssetModel->AssetModelCode; } else { $this->lblAssetModelCode->Text = 'None'; } if ($objAssetModel->Manufacturer) { $this->lblManufacturer->Text = $objAssetModel->Manufacturer->ShortDescription; } else { $this->lblManufactuerer->Text = 'None'; } if ($objAssetModel->Category) { $this->lblCategory->Text = $objAssetModel->Category->ShortDescription; } } } }
protected function btnMassDeleteConfirm_Click() { $this->dlgMassDelete->HideDialogBox(); $items = $this->dtgAssetModel->getSelected('AssetModelId'); $this->lblWarning->Text = ""; $arrToSkip = array(); foreach ($items as $item) { // First check that the user is authorized to edit this model $objAssetModel = AssetModel::Load($item); if (!QApplication::AuthorizeEntityBoolean($objAssetModel, 3)) { $this->lblWarning->Text = 'You are not authorized to delete one or more of the selected models.'; $this->dlgMassDelete->HideDialogBox(); return; } } // Separating items able to be deleted foreach ($items as $item) { $arrAssetAssigned = Asset::LoadArrayByAssetModelId($item); if (!$arrAssetAssigned || count($arrAssetAssigned) <= 0) { $this->arrToDelete[] = $item; } else { $arrToSkip[] = $item; } } if (count($arrToSkip) > 0) { if (count($arrToSkip) == 1) { $toBe = 'is'; $ending = ''; $skipping = 'this'; } else { $toBe = 'are'; $ending = 's'; $skipping = 'these'; } if (count($arrToSkip) == count($items)) { $this->lblWarning->Text = 'Models with assigned assets cannot be deleted.'; $this->dlgMassDelete->HideDialogBox(); return; } $intToDelete = count($items) - count($arrToSkip); $this->dlgMassDelete->Text = sprintf('<div class="title"> Model Mass Delete - %s records</div><hr/>', $intToDelete); $this->dlgMassDelete->Text .= sprintf("%s of the selected Models %s assigned to an asset and cannot be deleted.\n\t\t\t\t\t\t\t\t Would you like to continue the deletion process,\n\t\t\t\t\t\t\t\t skipping %s Model%s?<br /><br />", count($arrToSkip), $toBe, count($arrToSkip) > 1 ? $skipping . ' ' . count($arrToSkip) : $skipping, $ending); $this->btnMassDeleteConfirm->Display = false; $this->btnMassDeleteConfirmSkip->Display = true; $this->dlgMassDelete->ShowDialogBox(); } else { if (count($this->arrToDelete) > 0) { AssetModel::DeleteSelected($this->arrToDelete); $this->arrToDelete = array(); QApplication::Redirect(''); } } }
/** * Override method to perform a property "Get" * This will get the value of $strName * * @param string $strName Name of the property to get * @return mixed */ public function __get($strName) { switch ($strName) { /////////////////// // Member Variables /////////////////// case 'AssetId': /** * Gets the value for intAssetId (Read-Only PK) * @return integer */ return $this->intAssetId; case 'AssetModelId': /** * Gets the value for intAssetModelId (Not Null) * @return integer */ return $this->intAssetModelId; case 'LocationId': /** * Gets the value for intLocationId * @return integer */ return $this->intLocationId; case 'AssetCode': /** * Gets the value for strAssetCode (Unique) * @return string */ return $this->strAssetCode; case 'ImagePath': /** * Gets the value for strImagePath * @return string */ return $this->strImagePath; case 'CheckedOutFlag': /** * Gets the value for blnCheckedOutFlag * @return boolean */ return $this->blnCheckedOutFlag; case 'ReservedFlag': /** * Gets the value for blnReservedFlag * @return boolean */ return $this->blnReservedFlag; case 'CreatedBy': /** * Gets the value for intCreatedBy * @return integer */ return $this->intCreatedBy; case 'CreationDate': /** * Gets the value for dttCreationDate * @return QDateTime */ return $this->dttCreationDate; case 'ModifiedBy': /** * Gets the value for intModifiedBy * @return integer */ return $this->intModifiedBy; case 'ModifiedDate': /** * Gets the value for strModifiedDate (Read-Only Timestamp) * @return string */ return $this->strModifiedDate; /////////////////// // Member Objects /////////////////// /////////////////// // Member Objects /////////////////// case 'AssetModel': /** * Gets the value for the AssetModel object referenced by intAssetModelId (Not Null) * @return AssetModel */ try { if (!$this->objAssetModel && !is_null($this->intAssetModelId)) { $this->objAssetModel = AssetModel::Load($this->intAssetModelId); } return $this->objAssetModel; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case 'Location': /** * Gets the value for the Location object referenced by intLocationId * @return Location */ try { if (!$this->objLocation && !is_null($this->intLocationId)) { $this->objLocation = Location::Load($this->intLocationId); } return $this->objLocation; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case 'CreatedByObject': /** * Gets the value for the UserAccount object referenced by intCreatedBy * @return UserAccount */ try { if (!$this->objCreatedByObject && !is_null($this->intCreatedBy)) { $this->objCreatedByObject = UserAccount::Load($this->intCreatedBy); } return $this->objCreatedByObject; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case 'ModifiedByObject': /** * Gets the value for the UserAccount object referenced by intModifiedBy * @return UserAccount */ try { if (!$this->objModifiedByObject && !is_null($this->intModifiedBy)) { $this->objModifiedByObject = UserAccount::Load($this->intModifiedBy); } return $this->objModifiedByObject; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } //////////////////////////// // Virtual Object References (Many to Many and Reverse References) // (If restored via a "Many-to" expansion) //////////////////////////// //////////////////////////// // Virtual Object References (Many to Many and Reverse References) // (If restored via a "Many-to" expansion) //////////////////////////// case '_AssetTransaction': /** * Gets the value for the private _objAssetTransaction (Read-Only) * if set due to an expansion on the asset_transaction.asset_id reverse relationship * @return AssetTransaction */ return $this->_objAssetTransaction; case '_AssetTransactionArray': /** * Gets the value for the private _objAssetTransactionArray (Read-Only) * if set due to an ExpandAsArray on the asset_transaction.asset_id reverse relationship * @return AssetTransaction[] */ return (array) $this->_objAssetTransactionArray; case '_AssetTransactionAsNew': /** * Gets the value for the private _objAssetTransactionAsNew (Read-Only) * if set due to an expansion on the asset_transaction.new_asset_id reverse relationship * @return AssetTransaction */ return $this->_objAssetTransactionAsNew; case '_AssetTransactionAsNewArray': /** * Gets the value for the private _objAssetTransactionAsNewArray (Read-Only) * if set due to an ExpandAsArray on the asset_transaction.new_asset_id reverse relationship * @return AssetTransaction[] */ return (array) $this->_objAssetTransactionAsNewArray; default: try { return parent::__get($strName); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } } }
protected function btnNext_Click() { $blnError = false; $this->btnNext->Warning = ''; if ($this->intStep == 1) { if ($this->chkHeaderRow->Checked) { $this->blnHeaderRow = true; } else { $this->blnHeaderRow = false; } // Check errors if ($this->lstFieldSeparator->SelectedValue == 'other' && !$this->txtFieldSeparator->Text) { $this->flcFileCsv->Warning = "Please enter the field separator."; $blnError = true; } elseif ($this->lstTextDelimiter->SelectedValue == 'other' && !$this->txtTextDelimiter->Text) { $this->flcFileCsv->Warning = "Please enter the text delimiter."; $blnError = true; } else { // Step 1 complete // File Not Uploaded if (!file_exists($this->flcFileCsv->File) || !$this->flcFileCsv->Size) { //throw new QCallerException('FileAssetType must be a valid QFileAssetType constant value'); $this->flcFileCsv->Warning = 'The file could not be uploaded. Please provide a valid file.'; $blnError = true; // File Has Incorrect MIME Type (only if an acceptiblemimearray is setup) } elseif (is_array($this->strAcceptibleMimeArray) && !array_key_exists($this->flcFileCsv->Type, $this->strAcceptibleMimeArray)) { $this->flcFileCsv->Warning = "Extension must be 'csv' or 'txt'"; $blnError = true; // File Successfully Uploaded } else { $this->flcFileCsv->Warning = ""; // Setup Filename, Base Filename and Extension $strFilename = $this->flcFileCsv->FileName; $intPosition = strrpos($strFilename, '.'); } if (!$blnError) { $this->FileCsvData = new File_CSV_DataSource(); // Setup the settings which have got on step 1 $this->FileCsvData->settings($this->GetCsvSettings()); $file = fopen($this->flcFileCsv->File, "r"); // Counter of files $i = 1; // Counter of rows $j = 1; $this->strFilePathArray = array(); // The uploaded file splits up in order to avoid out of memory while ($row = fgets($file, 1000)) { if ($j == 1) { $strFilePath = sprintf('%s/%s_%s.csv', __TRACMOR_TMP__, $_SESSION['intUserAccountId'], $i); $this->strFilePathArray[] = $strFilePath; $file_part = fopen($strFilePath, "w+"); if ($i == 1) { $strHeaderRow = $row; } else { fwrite($file_part, $strHeaderRow); } } fwrite($file_part, $row); $j++; if ($j > 200) { $j = 1; $i++; fclose($file_part); } } $this->intTotalCount = ($i - 1) * 200 + $j - 1; $this->intTotalCount -= $this->chkHeaderRow->Checked ? 1 : 0; if ($this->lstImportAction->SelectedValue == 1 && $this->intAssetLimit != null && $this->intAssetLimit < $this->intTotalCount + $this->intAssetCount) { $blnError = true; $this->btnNext->Warning = sprintf('This import of %s assets would exceed your limit of %s assets.', $this->intTotalCount, $this->intAssetLimit); } else { $this->arrMapFields = array(); $this->arrTracmorField = array(); // Load first file $this->FileCsvData->load($this->strFilePathArray[0]); $file_skipped = fopen($this->strFilePath = sprintf('%s/%s_skipped.csv', __TRACMOR_TMP__, $_SESSION['intUserAccountId']), "w+"); // Get Headers if ($this->blnHeaderRow) { $this->arrCsvHeader = $this->FileCsvData->getHeaders(); // Create the header row in the skipped error file $this->PutSkippedRecordInFile($file_skipped, $this->arrCsvHeader); } /*else { // If it is not first file $this->FileCsvData->appendRow($this->FileCsvData->getHeaders()); }*/ $strFirstRowArray = $this->FileCsvData->getRow(0); for ($i = 0; $i < count($strFirstRowArray); $i++) { $this->arrMapFields[$i] = array(); if ($this->blnHeaderRow && array_key_exists($i, $this->arrCsvHeader)) { if ($this->arrCsvHeader[$i] == '') { $this->arrCsvHeader[$i] = ' '; } $this->lstMapHeader_Create($this, $i, $this->arrCsvHeader[$i]); $this->arrMapFields[$i]['header'] = $this->arrCsvHeader[$i]; } else { $this->lstMapHeader_Create($this, $i); } // Create Default Value TextBox, ListBox and DateTimePicker if ($this->blnHeaderRow && array_key_exists($i, $this->arrCsvHeader) && $this->arrCsvHeader[$i] || !$this->blnHeaderRow) { $txtDefaultValue = new QTextBox($this); $txtDefaultValue->Width = 200; $this->txtMapDefaultValueArray[] = $txtDefaultValue; $lstDefaultValue = new QListBox($this); $lstDefaultValue->Width = 200; $lstDefaultValue->Display = false; $this->lstMapDefaultValueArray[] = $lstDefaultValue; $dtpDate = new QDateTimePicker($this); $dtpDate->DateTimePickerType = QDateTimePickerType::Date; $dtpDate->DateTimePickerFormat = QDateTimePickerFormat::MonthDayYear; $dtpDate->Display = false; $this->dtpDateArray[] = $dtpDate; if (array_key_exists($i, $this->lstMapHeaderArray)) { $this->lstTramorField_Change(null, $this->lstMapHeaderArray[$i]->ControlId, null); } } $this->arrMapFields[$i]['row1'] = $strFirstRowArray[$i]; } $this->btnNext->Text = "Import Now"; fclose($file_skipped); // Create Add Field button $btnAddField = new QButton($this); $btnAddField->Text = "Add Field"; $btnAddField->AddAction(new QClickEvent(), new QServerAction('btnAddField_Click')); $btnAddField->AddAction(new QEnterKeyEvent(), new QServerAction('btnAddField_Click')); $btnAddField->AddAction(new QEnterKeyEvent(), new QTerminateAction()); $this->lstMapHeaderArray[] = $btnAddField; } } } } elseif ($this->intStep == 2) { // Step 2 complete $blnRequiredAllAssetCustomFields = true; $blnError = false; $blnAssetCode = false; $blnAssetModelShortDescription = false; $blnLocation = false; $blnAssetId = false; // $array Required Custom Fields for All Asset Models $arrAssetCustomFieldOptions = EntityQtypeCustomField::LoadArrayByEntityQtypeId(QApplication::Translate(EntityQtype::Asset)); // generate error flag and field names which are required for export; $arrRequiredAllAssetCustomFields = array(); foreach ($arrAssetCustomFieldOptions as $arrAssetCustomFieldOption) { if ($arrAssetCustomFieldOption->CustomField->RequiredFlag && $arrAssetCustomFieldOption->CustomField->ActiveFlag && $arrAssetCustomFieldOption->CustomField->AllAssetModelsFlag) { $arrRequiredAllAssetCustomFields[] = $arrAssetCustomFieldOption->CustomField->ShortDescription; if (!in_array($arrAssetCustomFieldOption->CustomField->ShortDescription, $this->getLstKeys())) { $blnRequiredAllAssetCustomFields = false; } } } // Checking errors (Model Short Description, Model Code, Category and Manufacturer must be selected) for ($i = 0; $i < count($this->lstMapHeaderArray) - 1; $i++) { $lstMapHeader = $this->lstMapHeaderArray[$i]; $strSelectedValue = strtolower($lstMapHeader->SelectedValue); if ($strSelectedValue == "model") { $blnAssetModelShortDescription = true; } elseif ($strSelectedValue == "asset tag") { $blnAssetCode = true; } elseif ($strSelectedValue == "location") { $blnLocation = true; } elseif ($strSelectedValue == "id") { $blnAssetId = true; } } if ($this->lstMapDefaultValueArray) { // Checking errors for required Default Value text fields foreach ($this->lstMapDefaultValueArray as $lstDefault) { if ($lstDefault->Display && $lstDefault->Required && !$lstDefault->SelectedValue) { $lstDefault->Warning = "You must select one default value."; $blnError = true; break; } else { $blnError = false; $lstDefault->Warning = ""; } } } if ($this->txtMapDefaultValueArray) { // Checking errors for required Default Value lst fields foreach ($this->txtMapDefaultValueArray as $txtDefault) { if ($txtDefault->Display && $txtDefault->Required && !$txtDefault->Text) { $txtDefault->Warning = "You must enter default value."; break; } else { $blnError = false; $txtDefault->Warning = ""; } } } // If all required fields have no errors if (!$blnError && $blnRequiredAllAssetCustomFields && $blnAssetCode && $blnAssetModelShortDescription && $blnLocation && ($this->lstImportAction->SelectedValue != 2 || $blnAssetId)) { $this->btnNext->Warning = ""; // Setup keys for main required fields foreach ($this->arrTracmorField as $key => $value) { /*if ($value == 'category') { $this->intCategoryKey = $key; } elseif ($value == 'manufacturer') { $this->intManufacturerKey = $key; } else*/ if ($this->lstImportAction->SelectedValue == 2 && $value == 'id') { $this->intItemIdKey = $key; } /*elseif ($value == 'created by') { $this->intCreatedByKey = $key; } elseif ($value == 'created date') { $this->intCreatedDateKey = $key; } elseif ($value == 'modified by') { $this->intModifiedByKey = $key; } elseif ($value == 'modified date') { $this->intModifiedDateKey = $key; }*/ } $this->objNewAssetArray = array(); $this->strAssetValuesArray = array(); $this->blnImportEnd = false; $j = 1; $this->btnNext->RemoveAllActions('onclick'); // Add new ajax actions for button $this->btnNext->AddAction(new QClickEvent(), new QAjaxAction('btnNext_Click')); $this->btnNext->AddAction(new QClickEvent(), new QToggleEnableAction($this->btnNext)); $this->btnNext->AddAction(new QEnterKeyEvent(), new QAjaxAction('btnNext_Click')); $this->btnNext->AddAction(new QEnterKeyEvent(), new QToggleEnableAction($this->btnNext)); $this->btnNext->AddAction(new QEnterKeyEvent(), new QTerminateAction()); $this->btnNext->Warning = "Please wait..."; $this->intImportStep = 2; $this->intCurrentFile = 0; $this->strSelectedValueArray = array(); // New asset models $this->dtgAsset = new QDataGrid($this); $this->dtgAsset->Name = 'asset_list'; $this->dtgAsset->CellPadding = 5; $this->dtgAsset->CellSpacing = 0; $this->dtgAsset->CssClass = "datagrid"; $this->dtgAsset->UseAjax = true; $this->dtgAsset->ShowColumnToggle = false; $this->dtgAsset->ShowExportCsv = false; $this->dtgAsset->ShowHeader = false; $this->dtgAsset->AddColumn(new QDataGridColumnExt('Model', '<?= $_ITEM ?>', 'CssClass="dtg_column"', 'HtmlEntities="false"')); // Updated assets $this->dtgUpdatedAsset = new QDataGrid($this); $this->dtgUpdatedAsset->Name = 'updated_asset_list'; $this->dtgUpdatedAsset->CellPadding = 5; $this->dtgUpdatedAsset->CellSpacing = 0; $this->dtgUpdatedAsset->CssClass = "datagrid"; $this->dtgUpdatedAsset->UseAjax = true; $this->dtgUpdatedAsset->ShowColumnToggle = false; $this->dtgUpdatedAsset->ShowExportCsv = false; $this->dtgUpdatedAsset->ShowHeader = false; $this->dtgUpdatedAsset->AddColumn(new QDataGridColumnExt('Asset Tag', '<?= $_ITEM ?>', 'CssClass="dtg_column"', 'HtmlEntities="false"')); // Create the label for successful import $this->lblImportSuccess = new QLabel($this); $this->lblImportSuccess->HtmlEntities = false; $this->lblImportSuccess->Display = false; // Undo Last Import button $this->btnUndoLastImport = new QButton($this); $this->btnUndoLastImport->Text = "Undo Last Import"; $this->btnUndoLastImport->Display = false; $this->btnUndoLastImport->AddAction(new QClickEvent(), new QServerAction('btnCancel_Click')); $this->btnUndoLastImport->AddAction(new QEnterKeyEvent(), new QServerAction('btnCancel_Click')); $this->btnUndoLastImport->AddAction(new QEnterKeyEvent(), new QTerminateAction()); // Import More button $this->btnImportMore = new QButton($this); $this->btnImportMore->Text = "Import More"; $this->btnImportMore->Display = false; $this->btnImportMore->AddAction(new QClickEvent(), new QServerAction('btnImportMore_Click')); $this->btnImportMore->AddAction(new QEnterKeyEvent(), new QServerAction('btnImportMore_Click')); $this->btnImportMore->AddAction(new QEnterKeyEvent(), new QTerminateAction()); // Return to Assets button $this->btnReturnToAssets = new QButton($this); $this->btnReturnToAssets->Text = "Return to Assets"; $this->btnReturnToAssets->Display = false; $this->btnReturnToAssets->AddAction(new QClickEvent(), new QServerAction('btnReturnToAssets_Click')); $this->btnReturnToAssets->AddAction(new QEnterKeyEvent(), new QServerAction('btnReturnToAssets_Click')); $this->btnReturnToAssets->AddAction(new QEnterKeyEvent(), new QTerminateAction()); } else { $strRequiredAllAssetCustomFields = ''; if (count($arrRequiredAllAssetCustomFields) > 0) { $strRequiredAllAssetCustomFields = implode(", ", $arrRequiredAllAssetCustomFields) . ", "; } $this->btnNext->Warning = "You must select all required fields (" . $strRequiredAllAssetCustomFields . "Asset Tag, Model Short Description and Location)."; $blnError = true; } } else { // Step 3 complete set_time_limit(0); $file_skipped = fopen($strFilePath = sprintf('%s/%s_skipped.csv', __TRACMOR_TMP__, $_SESSION['intUserAccountId']), "a"); if (!$this->blnImportEnd) { // Asset if ($this->intImportStep == 2) { $intCategoryArray = array(); // Load all categories with key=category_id /*foreach (Category::LoadAllWithFlags(true, false) as $objCategory) { $intCategoryArray[$objCategory->CategoryId] = strtolower($objCategory->ShortDescription); } $intManufacturerArray = array(); // Load all manufacturers with key=manufacturer_id foreach (Manufacturer::LoadAll() as $objManufacturer) { $intManufacturerArray[$objManufacturer->ManufacturerId] = strtolower($objManufacturer->ShortDescription); }*/ $intAssetCustomFieldKeyArray = array(); $arrAssetCustomField = array(); // Setup keys foreach ($this->arrTracmorField as $key => $value) { if ($value == 'asset tag') { $intAssetCodeKey = $key; } elseif ($value == 'model') { $intAssetModelDescriptionKey = $key; } elseif ($value == 'location') { $intLocationKey = $key; } elseif ($value == 'parent asset') { $intParentAssetKey = $key; } elseif ($value == 'locked to parent') { $intLinkedKey = $key; } elseif (substr($value, 0, 6) == 'asset_') { $intAssetCustomFieldKeyArray[substr($value, 6)] = $key; if (array_key_exists(substr($value, 6), $this->arrAssetCustomField)) { $arrAssetCustomField[substr($value, 6)] = $this->arrAssetCustomField[substr($value, 6)]; } } elseif (QApplication::$TracmorSettings->DepreciationFlag == '1' && $value == "depreciate asset") { $this->intDepreciationFlagKey = $key; } elseif (QApplication::$TracmorSettings->DepreciationFlag == '1' && $value == "purchase cost") { $this->intPurchaseCostKey = $key; } elseif (QApplication::$TracmorSettings->DepreciationFlag == '1' && $value == "purchase date") { $this->intPurchaseDateKey = $key; } } $intAssetModelArray = array(); $strItemCFVArray = array(); $strUpdatedItemCFVArray = array(); $strUpdatedValuesArray = array(); $this->arrOldItemArray = array(); $this->objUpdatedItemArray = array(); // Load all asset models foreach (AssetModel::LoadAllIntoArray() as $arrAssetModel) { //$strAssetModelArray[] = strtolower(sprintf("%s_%s_%s_%s", addslashes($arrAssetModel['model_code']), addslashes($arrAssetModel['short_description']), $arrAssetModel['category_id'], $arrAssetModel['manufacturer_id'])); $intAssetModelArray[$arrAssetModel['asset_model_id']] = strtolower($arrAssetModel['short_description']); } $intLocationArray = array(); // Load all locations with keys=location_id foreach (Location::LoadAll() as $objLocation) { $intLocationArray[$objLocation->LocationId] = strtolower($objLocation->ShortDescription); } // Depreciation /*if(QApplication::$TracmorSettings->DepreciationFlag == '1'){ foreach (DepreciationClass::LoadAll() as $objDepreciationClass){ $this->intDepreciationClassArray[$objDepreciationClass->DepreciationClassId] = strtolower($objDepreciationClass->ShortDescription); } }*/ $strAssetArray = array(); // Load all assets // Loads array of AssetModelId $arrAssetArray = Asset::LoadAllIntoArray(); $arrAssetId = array(); if (count($arrAssetArray)) { foreach ($arrAssetArray as $arrAsset) { $arrAssetId[$arrAsset['asset_id']] = addslashes(strtolower($arrAsset['asset_code'])); $strAssetArray[] = addslashes(strtolower($arrAsset['asset_code'])); } } } for ($j = $this->intCurrentFile; $j < count($this->strFilePathArray); $j++) { $this->FileCsvData->load($this->strFilePathArray[$j]); if (!$j) { //$this->FileCsvData->appendRow($this->FileCsvData->getHeaders()); } if ($this->intImportStep == 2) { $strAssetCFVArray = array(); $objNewAssetArray = array(); for ($i = 0; $i < $this->FileCsvData->countRows(); $i++) { $strRowArray = $this->FileCsvData->getRow($i); $strAssetCode = trim($strRowArray[$intAssetCodeKey]) ? addslashes(trim($strRowArray[$intAssetCodeKey])) : false; //$strAssetCode = (trim($strRowArray[$intAssetCodeKey])) ? trim($strRowArray[$intAssetCodeKey]) : false; $strKeyArray = array_keys($intLocationArray, isset($strRowArray[$intLocationKey]) ? strtolower(trim($strRowArray[$intLocationKey])) : array()); if (count($strKeyArray)) { $intLocationId = $strKeyArray[0]; } else { $strKeyArray = array_keys($intLocationArray, strtolower(trim($this->txtMapDefaultValueArray[$intLocationKey]->Text))); if (count($strKeyArray)) { $intLocationId = $strKeyArray[0]; } else { $intLocationId = false; } } $strKeyArray = array_keys($intAssetModelArray, isset($strRowArray[$intAssetModelDescriptionKey]) ? strtolower(trim($strRowArray[$intAssetModelDescriptionKey])) : array()); if (count($strKeyArray)) { $intAssetModelId = $strKeyArray[0]; } else { $strKeyArray = array_keys($intAssetModelArray, strtolower(trim($this->txtMapDefaultValueArray[$intAssetModelDescriptionKey]->Text))); if (count($strKeyArray)) { $intAssetModelId = $strKeyArray[0]; } else { $intAssetModelId = false; } } $blnError = false; // Skip records with not filled required custom fields $log = ''; if ($intAssetModelId) { foreach ($intAssetCustomFieldKeyArray as $k => $v) { $log .= 'k' . $k . '=' . $v; } // Load Specific asset model custom field $arrRequiredSpecificAssetCustomFields = AssetCustomFieldAssetModel::LoadArrayByAssetModelId($intAssetModelId); foreach ($arrRequiredSpecificAssetCustomFields as $objRequiredCustomField) { if ($objRequiredCustomField->CustomField->RequiredFlag) { $log .= $objRequiredCustomField->CustomField->CustomFieldId; if (!array_key_exists($objRequiredCustomField->CustomField->CustomFieldId, $intAssetCustomFieldKeyArray) || empty($strRowArray[array_search($objRequiredCustomField->CustomField->CustomFieldId, $intAssetCustomFieldKeyArray)])) { $blnError = true; $this->intImportStep = 3; // $log .= "<h1>".$objRequiredCustomField->CustomField->ShortDescription.$objRequiredCustomField->CustomField->CustomFieldId." is empty</h1>"; } } } } //print $log; exit; if (!$blnError) { if (isset($intParentAssetKey) && isset($strRowArray[$intParentAssetKey])) { $strKeyArray = array_keys($arrAssetId, strtolower(trim($strRowArray[$intParentAssetKey]))); if (count($strKeyArray)) { $intParentAssetId = $strKeyArray[0]; } else { $strKeyArray = array_keys($arrAssetId, strtolower(trim($this->txtMapDefaultValueArray[$intParentAssetKey]->Text))); if (count($strKeyArray)) { $intParentAssetId = $strKeyArray[0]; } else { $intParentAssetId = null; $blnError = true; } } if (!$intParentAssetId || $strRowArray[$intParentAssetKey] == $strAssetCode) { $blnError = true; } $blnLinked = $intParentAssetId && isset($intLinkedKey) && strlen(trim($strRowArray[$intLinkedKey])) > 0 ? 1 : 0; } else { $intParentAssetId = null; $blnLinked = 0; } } /*$strKeyArray = array_keys($intCategoryArray, strtolower(trim($strRowArray[$this->intCategoryKey]))); if (count($strKeyArray)) { $intCategoryId = $strKeyArray[0]; } else { $strKeyArray = array_keys($intCategoryArray, strtolower(trim($this->txtMapDefaultValueArray[$this->intCategoryKey]->Text))); if (count($strKeyArray)) { $intCategoryId = $strKeyArray[0]; } else { $intCategoryId = false; } } $strKeyArray = array_keys($intManufacturerArray, strtolower(trim($strRowArray[$this->intManufacturerKey]))); if (count($strKeyArray)) { $intManufacturerId = $strKeyArray[0]; } else { $strKeyArray = array_keys($intManufacturerArray, strtolower(trim($this->txtMapDefaultValueArray[$this->intManufacturerKey]->Text))); if (count($strKeyArray)) { $intManufacturerId = $strKeyArray[0]; } else { $intManufacturerId = false; } }*/ // If depreciation is enabled within Application // Any non-empty value sets to 1 $blnDepreciationError = false; $blnDepreciationFlag = null; $intPurchaseCost = null; $dttPurchaseDate = null; if (QApplication::$TracmorSettings->DepreciationFlag == '1' && $this->intDepreciationFlagKey && strlen(trim($strRowArray[$this->intDepreciationFlagKey]))) { // Verify that the model has a depreciation class assigned if ($intAssetModelId > 0 && AssetModel::Load($intAssetModelId)->DepreciationClassId) { // Verify that purchase date and purchase cost are set and valid if (isset($this->intPurchaseCostKey) && isset($this->intPurchaseDateKey)) { // Check intVal for Purchase cost $intPurchaseCost = trim($strRowArray[$this->intPurchaseCostKey]) ? addslashes(trim($strRowArray[$this->intPurchaseCostKey])) : false; if (!is_numeric($intPurchaseCost)) { $blnDepreciationError = true; } $strPurchaseDate = trim($strRowArray[$this->intPurchaseDateKey]); $dttPurchaseDate = new DateTime(); // Check isDate for Purchase date if (!strlen($strPurchaseDate) || !($dttPurchaseDate = $dttPurchaseDate->setTimestamp(strtotime($strPurchaseDate)))) { $blnDepreciationError = true; } else { $dttPurchaseDate = $dttPurchaseDate->format('Y-m-d'); } $blnDepreciationFlag = 1; } else { $blnDepreciationError = true; } } else { $blnDepreciationError = true; } } $objAsset = false; if (!$strAssetCode || $blnError || $intAssetModelId === false || $intLocationId === false || $blnDepreciationError) { //$blnError = true; //echo sprintf("Desc: %s AssetCode: %s Cat: %s Man: %s<br/>", $strAssetCode, $strLocation, $intCategoryId, $intManufacturerId); $strAssetCode = null; $this->intSkippedRecordCount++; $this->PutSkippedRecordInFile($file_skipped, $strRowArray); continue; } else { if ($this->lstImportAction->SelectedValue == 2) { $intItemId = intval(trim($strRowArray[$this->intItemIdKey])); if ($intItemId > 0 && array_key_exists($intItemId, $arrAssetId)) { //QApplication::$Database[1]->EnableProfiling(); $objAssetArray = Asset::LoadArrayBySearchHelper(null, null, null, null, null, false, null, null, null, null, null, null, null, null, null, false, null, null, null, false, false, false, null, null, false, $intItemId); //QApplication::$Database[1]->OutputProfiling(); if ($objAssetArray) { $objAsset = $objAssetArray[0]; } } } else { $intItemId = 0; } } if ($strAssetCode && !$intItemId && !$this->in_array_nocase($strAssetCode, $strAssetArray)) { // Custom Fields Section $strCFVArray = array(); $objDatabase = CustomField::GetDatabase(); $blnCheckCFVError = false; // Asset Model Custom Field import foreach ($arrAssetCustomField as $objCustomField) { if ($objCustomField->CustomFieldQtypeId != 2) { $strCSDescription = isset($strRowArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]) ? trim($strRowArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]) : ""; $strCSDescription = strlen($strCSDescription) > 0 ? addslashes($strCSDescription) : addslashes($this->txtMapDefaultValueArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]->Text); $strCFVArray[$objCustomField->CustomFieldId] = strlen($strCSDescription) > 0 ? sprintf("'%s'", $strCSDescription) : "NULL"; } else { $objDatabase = Asset::GetDatabase(); $strCSDescription = isset($strRowArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]) ? addslashes(trim($strRowArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]])) : ""; $blnInList = false; foreach (CustomFieldValue::LoadArrayByCustomFieldId($objCustomField->CustomFieldId) as $objCustomFieldValue) { if (strtolower($objCustomFieldValue->ShortDescription) == strtolower($strCSDescription)) { //$intCustomFieldValueId = $objCustomFieldValue->CustomFieldValueId; $blnInList = true; break; } } // Add the CustomFieldValue // Removed adding new 'select' values /*if (!$blnInList && !in_array($strCSDescription, $strAddedCFVArray)) { $strQuery = sprintf("INSERT INTO custom_field_value (custom_field_id, short_description, created_by, creation_date) VALUES (%s, '%s', %s, NOW());", $objCustomField->CustomFieldId, $strCSDescription, $_SESSION['intUserAccountId']); $objDatabase->NonQuery($strQuery); $strAddedCFVArray[] = $strCSDescription; } else*/ if (!$blnInList && $this->lstMapDefaultValueArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]->SelectedValue != null) { $strCSDescription = $this->lstMapDefaultValueArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]->SelectedName; } elseif (!$blnInList) { $blnCheckCFVError = true; break; } if (!$blnCheckCFVError) { if ($strCSDescription) { $strCFVArray[$objCustomField->CustomFieldId] = sprintf("'%s'", $strCSDescription); } else { $strCFVArray[$objCustomField->CustomFieldId] = "NULL"; } } } } // Check if asset limit has been reached $blnAssetLimitError = $this->intAssetLimit != null && $this->intAssetCount + count($objNewAssetArray) >= $this->intAssetLimit; if (!$blnCheckCFVError && !$blnAssetLimitError) { $strAssetArray[] = stripslashes($strAssetCode); $this->strAssetValuesArray[] = sprintf("('%s', '%s', '%s', %s, %s, '%s', NOW(), %s, %s, %s)", $strAssetCode, $intLocationId, $intAssetModelId, $intParentAssetId ? $intParentAssetId : "NULL", $blnLinked ? "1" : "0", $_SESSION['intUserAccountId'], $blnDepreciationFlag ? $blnDepreciationFlag : "NULL", $intPurchaseCost ? $intPurchaseCost : "NULL", $dttPurchaseDate ? '"' . $dttPurchaseDate . '"' : "NULL"); $objNewAssetArray[] = stripslashes($strAssetCode); if (isset($strCFVArray) && count($strCFVArray)) { $strAssetCFVArray[] = str_replace('""', '"', implode(', ', $strCFVArray)); /*if ($j == 2) { echo "strAssetCFVArray: "; print_r($strAssetCFVArray); echo "strCFVArray: "; print_r($strCFVArray); exit; }*/ } else { $strAssetCFVArray[] = ""; } } else { $this->intSkippedRecordCount++; if ($blnAssetLimitError) { $strRowArray[] = sprintf('Asset limit of %s reached', $this->intAssetLimit); } $this->PutSkippedRecordInFile($file_skipped, $strRowArray); $strAssetCode = null; } } elseif ($strAssetCode && $this->lstImportAction->SelectedValue == 2 && $objAsset) { // Import Action is "Create and Update Records" $strUpdateFieldArray = array(); $strUpdateFieldArray[] = sprintf("`asset_code`='%s'", $strAssetCode); $strUpdateFieldArray[] = sprintf("`asset_model_id`='%s'", $intAssetModelId); $strUpdateFieldArray[] = sprintf("`parent_asset_id`=%s", QApplication::$Database[1]->SqlVariable($intParentAssetId)); $strUpdateFieldArray[] = sprintf("`linked_flag`=b'%s'", $blnLinked ? 1 : 0); $strUpdateFieldArray[] = sprintf("`modified_by`='%s'", $_SESSION['intUserAccountId']); // Depreciation Fields $strUpdateFieldArray[] = sprintf("`depreciation_flag`=%s", $blnDepreciationFlag ? $blnDepreciationFlag : "NULL"); $strUpdateFieldArray[] = sprintf("`purchase_cost`=%s", $intPurchaseCost ? $intPurchaseCost : "NULL"); $strUpdateFieldArray[] = sprintf("`purchase_date`=%s", $dttPurchaseDate ? "'{$dttPurchaseDate}'" : "NULL"); $blnCheckCFVError = false; foreach ($arrAssetCustomField as $objCustomField) { if ($objCustomField->CustomFieldQtypeId != 2) { $strCSDescription = isset($strRowArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]) ? trim($strRowArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]) : ""; $strCSDescription = strlen($strCSDescription) > 0 ? addslashes($strCSDescription) : addslashes($this->txtMapDefaultValueArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]->Text); $strCFVArray[$objCustomField->CustomFieldId] = strlen($strCSDescription) > 0 ? sprintf("'%s'", $strCSDescription) : "NULL"; } else { $objDatabase = CustomField::GetDatabase(); $strCSDescription = isset($strRowArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]) ? addslashes(trim($strRowArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]])) : ""; $strCFVArray[$objCustomField->CustomFieldId] = $strCSDescription ? sprintf("'%s'", $strCSDescription) : "NULL"; $blnInList = false; foreach (CustomFieldValue::LoadArrayByCustomFieldId($objCustomField->CustomFieldId) as $objCustomFieldValue) { if (strtolower($objCustomFieldValue->ShortDescription) == strtolower($strCSDescription)) { //$intItemKeyntCustomFieldValueId = $objCustomFieldValue->CustomFieldValueId; $blnInList = true; break; } } if (!$blnInList && $this->lstMapDefaultValueArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]->SelectedValue != null) { $strCSDescription = $this->lstMapDefaultValueArray[$intAssetCustomFieldKeyArray[$objCustomField->CustomFieldId]]->SelectedName; } elseif (!$blnInList) { $blnCheckCFVError = true; break; } if (!$blnCheckCFVError) { if ($strCSDescription) { $strCFVArray[$objCustomField->CustomFieldId] = sprintf("'%s'", $strCSDescription); } else { $strCFVArray[$objCustomField->CustomFieldId] = "NULL"; } } } } // The user can not change location if ($intLocationId != $objAsset->LocationId) { $blnCheckCFVError = true; } if (!$blnCheckCFVError) { $strUpdatedValuesArray[] = sprintf("UPDATE `asset` SET %s WHERE `asset_id`='%s'", str_replace('""', '"', implode(", ", $strUpdateFieldArray)), $objAsset->AssetId); if (isset($strCFVArray) && count($strCFVArray)) { $strUpdatedItemCFVArray[$objAsset->AssetId] = $strCFVArray; } else { $strUpdatedItemCFVArray[$objAsset->AssetId] = ""; } $this->objUpdatedItemArray[$objAsset->AssetId] = sprintf("%s", $objAsset->AssetCode); //$this->arrOldItemArray[$objAsset->AssetId] = $objAsset; //$strItemQuery = sprintf("UPDATE `asset` SET `asset_code`='%s', `asset_model_id`='%s', `parent_asset_id`=%s, `linked_flag`='%s', `modified_by`=%s, `modified_date`=%s WHERE `asset_id`='%s'", $objAsset->AssetCode, $objAsset->AssetModelId, (!$objAsset->ParentAssetId) ? "NULL" : $objAsset->ParentAssetId, $objAsset->LinkedFlag, (!$objAsset->ModifiedBy) ? "NULL" : $objAsset->ModifiedBy, (!$objAsset->ModifiedBy) ? "NULL" : sprintf("'%s'", $objAsset->ModifiedDate), $objAsset->AssetId); $strItemQuery = sprintf("UPDATE `asset` SET `asset_code`='%s', `asset_model_id`='%s', `parent_asset_id`=%s, `linked_flag`='%s', `modified_by`=%s, `modified_date`=%s, `depreciation_flag`=%s, `purchase_cost`=%s, `purchase_date`=%s WHERE `asset_id`='%s'", $objAsset->AssetCode, $objAsset->AssetModelId, !$objAsset->ParentAssetId ? "NULL" : $objAsset->ParentAssetId, $objAsset->LinkedFlag, !$objAsset->ModifiedBy ? "NULL" : $objAsset->ModifiedBy, !$objAsset->ModifiedBy ? "NULL" : sprintf("'%s'", $objAsset->ModifiedDate), $blnDepreciationFlag ? $blnDepreciationFlag : "NULL", $intPurchaseCost ? $intPurchaseCost : "NULL", $dttPurchaseDate ? '"' . $dttPurchaseDate . '"' : "NULL", $objAsset->AssetId); $strCFVArray = array(); foreach ($this->arrAssetCustomField as $objCustomField) { $strCFV = $objAsset->GetVirtualAttribute($objCustomField->CustomFieldId); $strCFVArray[] = sprintf("`cfv_%s`='%s'", $objCustomField->CustomFieldId, $strCFV); } // Update values for custom field set not allowed to model $arrToClear = $this->substactNotAllowedFields($objAsset->AssetModelId, null); foreach ($arrToClear as $idToBeNull) { $strCFVArray[] = sprintf("`cfv_%s`= NULL", $idToBeNull); } if (isset($strCFVArray) && count($strCFVArray)) { $strCFVQuery = sprintf("UPDATE `asset_custom_field_helper` SET %s WHERE `asset_id`='%s'", str_replace('""', '"', implode(", ", $strCFVArray)), $intItemId); } else { $strCFVQuery = false; } $this->arrOldItemArray[$objAsset->AssetId] = array("ItemSql" => $strItemQuery, "CFVSql" => $strCFVQuery); } } else { // If Import Action is "Create Records" and this Asset has already in the database /*elseif ($this->lstImportAction->SelectedValue == 1 && $this->in_array_nocase($strAssetCode, $strAssetArray)) { // Skipped and flagged as duplicates $this->intSkippedRecordCount++; $this->PutSkippedRecordInFile($file_skipped, $strRowArray); }*/ $this->intSkippedRecordCount++; $this->PutSkippedRecordInFile($file_skipped, $strRowArray); } } //if ($this->intCurrentFile == count($this->strFilePathArray)) { // Inserts if (count($this->strAssetValuesArray)) { $objDatabase = Asset::GetDatabase(); //var_dump($this->strAssetValuesArray); //exit(); // $objDatabase->NonQuery(sprintf("INSERT INTO `asset` (`asset_code`, `location_id`, `asset_model_id`, `parent_asset_id`, `linked_flag`, `created_by`, `creation_date`) VALUES %s;", str_replace('""','"',implode(", ", $this->strAssetValuesArray)))); $objDatabase->NonQuery(sprintf("INSERT INTO `asset` (`asset_code`, `location_id`, `asset_model_id`, `parent_asset_id`, `linked_flag`, `created_by`, `creation_date`, `depreciation_flag`, `purchase_cost`, `purchase_date` ) VALUES %s;", str_replace('""', '"', implode(", ", $this->strAssetValuesArray)))); $intInsertId = $objDatabase->InsertId(); if ($intInsertId) { $strAssetIdArray = array(); $strCFVArray = array(); for ($i = 0; $i < count($objNewAssetArray); $i++) { $this->objNewAssetArray[$intInsertId + $i] = $objNewAssetArray[$i]; $strCFVArray[$i] = sprintf("('%s', %s)", $intInsertId + $i, $strAssetCFVArray[$i]); $strAssetIdArray[$i] = sprintf("(%s)", $intInsertId + $i); } /*if ($j == 1) { echo "strCFVArray: "; print_r($strCFVArray); echo "strAssetCFVArray: "; print_r($strAssetCFVArray); exit; }*/ $strCFVNameArray = array(); foreach ($arrAssetCustomField as $objCustomField) { $strCFVNameArray[] = sprintf("`cfv_%s`", $objCustomField->CustomFieldId); } if (count($strAssetCFVArray) > 0 && count($strCFVNameArray) > 0) { $strQuery = sprintf("INSERT INTO `asset_custom_field_helper` (`asset_id`, %s) VALUES %s", str_replace('""', '"', implode(", ", $strCFVNameArray)), str_replace('""', '"', implode(", ", $strCFVArray))); } else { $strQuery = sprintf("INSERT INTO `asset_custom_field_helper` (`asset_id`) VALUES %s", str_replace('""', '"', implode(", ", $strAssetIdArray))); } $objDatabase->NonQuery($strQuery); $theAsset = Asset::Load($intInsertId); $strQuery = $this->substactNotAllowedFields($theAsset->AssetModelId, $theAsset->AssetId); if (!empty($strQuery)) { //$objDatabase->NonQuery($this->substactNotAllowedFields($theAsset->AssetModelId,$theAsset->AssetId)); $objDatabase->NonQuery($strQuery); } } $this->strAssetValuesArray = array(); } // Updates if (count($strUpdatedValuesArray)) { $objDatabase = Asset::GetDatabase(); foreach ($strUpdatedValuesArray as $query) { $objDatabase->NonQuery($query); } foreach ($this->objUpdatedItemArray as $intItemKey => $objUpdatedItem) { if (isset($strUpdatedItemCFVArray[$intItemKey]) && count($strUpdatedItemCFVArray[$intItemKey])) { $strCFVArray = array(); foreach ($arrAssetCustomField as $objCustomField) { $strCFVArray[] = sprintf("`cfv_%s`=%s", $objCustomField->CustomFieldId, $strUpdatedItemCFVArray[$intItemKey][$objCustomField->CustomFieldId]); } if (isset($strCFVArray) && count($strCFVArray)) { $strQuery = sprintf("UPDATE `asset_custom_field_helper` SET %s WHERE `asset_id`='%s'", str_replace('""', '"', implode(", ", $strCFVArray)), $intItemKey); $objDatabase->NonQuery($strQuery); // insert nulls where not allowed $theAsset = Asset::Load($intItemKey); $strQuery = $this->substactNotAllowedFields($theAsset->AssetModelId, $theAsset->AssetId); if ($strQuery) { $objDatabase->NonQuery($strQuery); } } } } } //} //$this->intCurrentFile++; //break; } //$j++; } if ($this->intImportStep == 3) { /*if (count($this->strSelectedValueArray)) { $objDatabase = CustomField::GetDatabase(); $strQuery = sprintf("INSERT INTO `custom_field_selection` " . "(`entity_id`,`entity_qtype_id`, `custom_field_value_id`) " . "VALUES %s;", implode(", ", $this->strSelectedValueArray)); $objDatabase->NonQuery($strQuery); }*/ // Insert Values into helper tables $objDatabase = Asset::GetDatabase(); $objDatabase->NonQuery("SET FOREIGN_KEY_CHECKS=0;"); // Insert into asset_custom_field_helper $objDatabase->NonQuery(sprintf("INSERT INTO `asset_custom_field_helper` (`asset_id`) (SELECT `asset_id` FROM `asset` WHERE `asset_id` NOT IN (SELECT `asset_id` FROM `asset_custom_field_helper`));")); // Inserts end $objDatabase->NonQuery("SET FOREIGN_KEY_CHECKS=1;"); $this->blnImportEnd = true; $this->btnNext->Warning = ""; $this->lblImportResults->Display = true; if (count($this->objNewAssetArray)) { //$this->lblImportAssets->Display = true; $this->dtgAsset->Paginator = new QPaginator($this->dtgAsset); $this->dtgAsset->ItemsPerPage = 20; } if (count($this->objUpdatedAssetArray)) { $this->lblImportUpdatedAssets->Display = true; $this->dtgUpdatedAsset->Paginator = new QPaginator($this->dtgUpdatedAsset); $this->dtgUpdatedAsset->ItemsPerPage = 20; } if (count($this->objNewAssetArray)) { $this->lblImportAsset->Display = true; $this->dtgAsset->Paginator = new QPaginator($this->dtgAsset); $this->dtgAsset->ItemsPerPage = 20; } $this->btnNext->Display = false; $this->btnCancel->Display = false; $this->btnUndoLastImport->Display = true; $this->btnImportMore->Display = true; $this->btnReturnToAssets->Display = true; $this->lblImportSuccess->Display = true; $this->lblImportSuccess->Text = sprintf("Success:<br/>" . "<b>%s</b> Records imported successfully<br/>" . "<b>%s</b> Records skipped due to error<br/>", count($this->objNewAssetArray) + count($this->objUpdatedItemArray), $this->intSkippedRecordCount); if ($this->intSkippedRecordCount) { $this->lblImportSuccess->Text .= sprintf("<a href='./asset_import.php?intDownloadCsv=1'>Click here to download records that could not be imported</a>"); } $this->lblImportSuccess->Text .= "<br/><br/>"; $this->intImportStep = -1; } // Enable Next button $this->btnNext->Enabled = true; if (!$this->blnImportEnd && !$this->intCurrentFile) { $this->intImportStep++; } } fclose($file_skipped); } if (!$blnError) { if (($this->blnImportEnd || $this->intImportStep == 2) && $this->intImportStep != -1) { $this->intStep++; $this->DisplayStepForm($this->intStep); } if (!$this->blnImportEnd) { $this->btnNext->Warning = "Please wait..."; QApplication::ExecuteJavaScript("document.getElementById('" . $this->btnNext->ControlId . "').click();"); } if (!($this->intCurrentFile < count($this->strFilePathArray))) { $this->intCurrentFile = 0; $this->intImportStep++; } } }
protected function lblBookValue_Update() { if ($objAssetModel = AssetModel::Load($this->lstAssetModel->SelectedValue)) { $intDepreciationClassId = $objAssetModel->DepreciationClassId; if (!empty($intDepreciationClassId) && DepreciationClass::Load($intDepreciationClassId)) { $life = DepreciationClass::Load($intDepreciationClassId)->Life; } } if (is_numeric($this->txtPurchaseCost->Text) && isset($life) && $this->calPurchaseDate->DateTime instanceof DateTime && QDateTime::Now() > $this->calPurchaseDate->DateTime) { $interval = QDateTime::Now()->diff($this->calPurchaseDate->DateTime); $interval = $interval->y * 12 + $interval->m; $fltBookValue = $this->txtPurchaseCost->Text - $this->txtPurchaseCost->Text * ($interval / $life); // prevent negative results $fltBookValue = $fltBookValue < 0 ? 0 : $fltBookValue; $this->lblBookValue->Text = money_format('%i', $fltBookValue); } else { $this->lblBookValue->Text = '...'; } }
public function btnEdit_Click($strFormId, $strControlId, $strParameter) { $strParameterArray = explode(',', $strParameter); $objAssetModel = AssetModel::Load($strParameterArray[0]); $objEditPanel = new AssetModelEditPanel($this, $this->strCloseEditPanelMethod, $objAssetModel); $strMethodName = $this->strSetEditPanelMethod; $this->objForm->{$strMethodName}($objEditPanel); }
/** * Reload this AssetModel from the database. * @return void */ public function Reload() { // Make sure we are actually Restored from the database if (!$this->__blnRestored) { throw new QCallerException('Cannot call Reload() on a new, unsaved AssetModel object.'); } // Reload the Object $objReloaded = AssetModel::Load($this->intAssetModelId); // Update $this's local variables to match $this->CategoryId = $objReloaded->CategoryId; $this->ManufacturerId = $objReloaded->ManufacturerId; $this->strAssetModelCode = $objReloaded->strAssetModelCode; $this->strShortDescription = $objReloaded->strShortDescription; $this->strLongDescription = $objReloaded->strLongDescription; $this->strImagePath = $objReloaded->strImagePath; $this->CreatedBy = $objReloaded->CreatedBy; $this->dttCreationDate = $objReloaded->dttCreationDate; $this->ModifiedBy = $objReloaded->ModifiedBy; $this->strModifiedDate = $objReloaded->strModifiedDate; $this->DepreciationClassId = $objReloaded->DepreciationClassId; }
/** * Override method to perform a property "Get" * This will get the value of $strName * * @param string $strName Name of the property to get * @return mixed */ public function __get($strName) { switch ($strName) { /////////////////// // Member Variables /////////////////// case 'AssetId': // Gets the value for intAssetId (Read-Only PK) // @return integer return $this->intAssetId; case 'ParentAssetId': // Gets the value for intParentAssetId // @return integer return $this->intParentAssetId; case 'AssetModelId': // Gets the value for intAssetModelId (Not Null) // @return integer return $this->intAssetModelId; case 'LocationId': // Gets the value for intLocationId // @return integer return $this->intLocationId; case 'AssetCode': // Gets the value for strAssetCode (Unique) // @return string return $this->strAssetCode; case 'ImagePath': // Gets the value for strImagePath // @return string return $this->strImagePath; case 'CheckedOutFlag': // Gets the value for blnCheckedOutFlag // @return boolean return $this->blnCheckedOutFlag; case 'ReservedFlag': // Gets the value for blnReservedFlag // @return boolean return $this->blnReservedFlag; case 'LinkedFlag': // Gets the value for blnLinkedFlag // @return boolean return $this->blnLinkedFlag; case 'ArchivedFlag': // Gets the value for blnArchivedFlag // @return boolean return $this->blnArchivedFlag; case 'CreatedBy': // Gets the value for intCreatedBy // @return integer return $this->intCreatedBy; case 'CreationDate': // Gets the value for dttCreationDate // @return QDateTime return $this->dttCreationDate; case 'ModifiedBy': // Gets the value for intModifiedBy // @return integer return $this->intModifiedBy; case 'ModifiedDate': // Gets the value for strModifiedDate (Read-Only Timestamp) // @return string return $this->strModifiedDate; case 'DepreciationFlag': // Gets the value for blnDepreciationFlag // @return boolean return $this->blnDepreciationFlag; case 'PurchaseDate': // Gets the value for dttPurchaseDate // @return QDateTime return $this->dttPurchaseDate; case 'PurchaseCost': // Gets the value for fltPurchaseCost // @return double return $this->fltPurchaseCost; /////////////////// // Member Objects /////////////////// /////////////////// // Member Objects /////////////////// case 'ParentAsset': // Gets the value for the Asset object referenced by intParentAssetId // @return Asset try { if (!$this->objParentAsset && !is_null($this->intParentAssetId)) { $this->objParentAsset = Asset::Load($this->intParentAssetId); } return $this->objParentAsset; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case 'AssetModel': // Gets the value for the AssetModel object referenced by intAssetModelId (Not Null) // @return AssetModel try { if (!$this->objAssetModel && !is_null($this->intAssetModelId)) { $this->objAssetModel = AssetModel::Load($this->intAssetModelId); } return $this->objAssetModel; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case 'Location': // Gets the value for the Location object referenced by intLocationId // @return Location try { if (!$this->objLocation && !is_null($this->intLocationId)) { $this->objLocation = Location::Load($this->intLocationId); } return $this->objLocation; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case 'CreatedByObject': // Gets the value for the UserAccount object referenced by intCreatedBy // @return UserAccount try { if (!$this->objCreatedByObject && !is_null($this->intCreatedBy)) { $this->objCreatedByObject = UserAccount::Load($this->intCreatedBy); } return $this->objCreatedByObject; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case 'ModifiedByObject': // Gets the value for the UserAccount object referenced by intModifiedBy // @return UserAccount try { if (!$this->objModifiedByObject && !is_null($this->intModifiedBy)) { $this->objModifiedByObject = UserAccount::Load($this->intModifiedBy); } return $this->objModifiedByObject; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case 'AssetCustomFieldHelper': // Gets the value for the AssetCustomFieldHelper object that uniquely references this Asset // by objAssetCustomFieldHelper (Unique) // @return AssetCustomFieldHelper try { if ($this->objAssetCustomFieldHelper === false) { // We've attempted early binding -- and the reverse reference object does not exist return null; } if (!$this->objAssetCustomFieldHelper) { $this->objAssetCustomFieldHelper = AssetCustomFieldHelper::LoadByAssetId($this->intAssetId); } return $this->objAssetCustomFieldHelper; } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } //////////////////////////// // Virtual Object References (Many to Many and Reverse References) // (If restored via a "Many-to" expansion) //////////////////////////// //////////////////////////// // Virtual Object References (Many to Many and Reverse References) // (If restored via a "Many-to" expansion) //////////////////////////// case '_ChildAsset': // Gets the value for the private _objChildAsset (Read-Only) // if set due to an expansion on the asset.parent_asset_id reverse relationship // @return Asset return $this->_objChildAsset; case '_ChildAssetArray': // Gets the value for the private _objChildAssetArray (Read-Only) // if set due to an ExpandAsArray on the asset.parent_asset_id reverse relationship // @return Asset[] return (array) $this->_objChildAssetArray; case '_AssetTransaction': // Gets the value for the private _objAssetTransaction (Read-Only) // if set due to an expansion on the asset_transaction.asset_id reverse relationship // @return AssetTransaction return $this->_objAssetTransaction; case '_AssetTransactionArray': // Gets the value for the private _objAssetTransactionArray (Read-Only) // if set due to an ExpandAsArray on the asset_transaction.asset_id reverse relationship // @return AssetTransaction[] return (array) $this->_objAssetTransactionArray; case '_AssetTransactionAsNew': // Gets the value for the private _objAssetTransactionAsNew (Read-Only) // if set due to an expansion on the asset_transaction.new_asset_id reverse relationship // @return AssetTransaction return $this->_objAssetTransactionAsNew; case '_AssetTransactionAsNewArray': // Gets the value for the private _objAssetTransactionAsNewArray (Read-Only) // if set due to an ExpandAsArray on the asset_transaction.new_asset_id reverse relationship // @return AssetTransaction[] return (array) $this->_objAssetTransactionAsNewArray; case '__Restored': return $this->__blnRestored; default: try { return parent::__get($strName); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } } }
/** * Static Helper Method to Create using PK arguments * You must pass in the PK arguments on an object to load, or leave it blank to create a new one. * If you want to load via QueryString or PathInfo, use the CreateFromQueryString or CreateFromPathInfo * static helper methods. Finally, specify a CreateType to define whether or not we are only allowed to * edit, or if we are also allowed to create a new one, etc. * * @param mixed $objParentObject QForm or QPanel which will be using this AssetModelMetaControl * @param integer $intAssetModelId primary key value * @param QMetaControlCreateType $intCreateType rules governing AssetModel object creation - defaults to CreateOrEdit * @return AssetModelMetaControl */ public static function Create($objParentObject, $intAssetModelId = null, $intCreateType = QMetaControlCreateType::CreateOrEdit) { // Attempt to Load from PK Arguments if (strlen($intAssetModelId)) { $objAssetModel = AssetModel::Load($intAssetModelId); // AssetModel was found -- return it! if ($objAssetModel) { return new AssetModelMetaControl($objParentObject, $objAssetModel); } else { if ($intCreateType != QMetaControlCreateType::CreateOnRecordNotFound) { throw new QCallerException('Could not find a AssetModel object with PK arguments: ' . $intAssetModelId); } } // If EditOnly is specified, throw an exception } else { if ($intCreateType == QMetaControlCreateType::EditOnly) { throw new QCallerException('No PK arguments specified'); } } // If we are here, then we need to create a new record return new AssetModelMetaControl($objParentObject, new AssetModel()); }