/// <summary> /// Indicates whether the <see cref="DbDVIRDefect"/> differs from the <see cref="DVIRDefect"/>, thereby requiring the <see cref="DbDVIRDefect"/> to be updated in the database. /// </summary> /// <param name="dbDVIRDefect">The <see cref="DbDVIRDefect"/> to be evaluated.</param> /// <param name="dvirDefect">The <see cref="DVIRDefect"/> to compare against.</param> /// <returns></returns> public static bool DbDVIRDefectRequiresUpdate(DbDVIRDefect dbDVIRDefect, DVIRDefect dvirDefect) { if (dbDVIRDefect.GeotabId != dvirDefect.Id.ToString()) { throw new ArgumentException($"Cannot compare DVIRDefect '{dvirDefect.Id}' with DbDVIRDefect '{dbDVIRDefect.GeotabId}' because the IDs do not match."); } DateTime dbDVIRDefectRepairDateTimeUtc = dbDVIRDefect.RepairDateTime.GetValueOrDefault().ToUniversalTime(); if (dbDVIRDefect.RepairDateTime != dvirDefect.RepairDateTime && dbDVIRDefectRepairDateTimeUtc != dvirDefect.RepairDateTime) { return(true); } User dvirDefectRepairUser = dvirDefect.RepairUser; if (dvirDefectRepairUser != null && dbDVIRDefect.RepairUserId != dvirDefectRepairUser.Id.ToString()) { return(true); } if (dvirDefect.RepairStatus != null && dbDVIRDefect.RepairStatus != dvirDefect.RepairStatus.ToString()) { return(true); } return(false); }
/// <summary> /// Creates and returns a <see cref="DbDVIRDefect"/> using information from the supplied inputs. /// </summary> /// <param name="dvirLog">The <see cref="DVIRLog"/> from which to capture information.</param> /// <param name="dvirDefect">The <see cref="DVIRDefect"/> from which to capture information.</param> /// <param name="defect">The <see cref="Defect"/> from which to capture information.</param> /// <param name="defectListPartDefect">The <see cref="DefectListPartDefect"/> from which to capture information.</param> /// <returns></returns> public static DbDVIRDefect GetDbDVIRDefect(DVIRLog dvirLog, DVIRDefect dvirDefect, Defect defect, DefectListPartDefect defectListPartDefect) { DbDVIRDefect dbDVIRDefect = new DbDVIRDefect { GeotabId = dvirDefect.Id.ToString(), DVIRLogId = dvirLog.Id.ToString(), DefectId = defect.Id.ToString(), DefectListAssetType = defectListPartDefect.DefectListAssetType, DefectListId = defectListPartDefect.DefectListID, DefectListName = defectListPartDefect.DefectListName, PartId = defectListPartDefect.PartID, PartName = defectListPartDefect.PartName, DefectName = defectListPartDefect.DefectName, DefectSeverity = defectListPartDefect.DefectSeverity }; if (dvirDefect.RepairDateTime != null) { dbDVIRDefect.RepairDateTime = dvirDefect.RepairDateTime; } if (dvirDefect.RepairStatus != null) { dbDVIRDefect.RepairStatus = dvirDefect.RepairStatus.ToString(); } User repairUser = dvirDefect.RepairUser; if (repairUser != null) { dbDVIRDefect.RepairUserId = repairUser.Id.ToString(); } return(dbDVIRDefect); }
/// <summary> /// Updates the repair status properties of the <paramref name="dvirDefect"/> using properties of the <paramref name="dbDVIRDefectUpdate"/>. /// </summary> /// <param name="dvirDefect">The <see cref="DVIRDefect"/> to be updated.</param> /// <param name="dbDVIRDefectUpdate">The <see cref="DbDVIRDefectUpdate"/> from which to obtain the property values for the <paramref name="dvirDefect"/> update.</param> /// <returns></returns> bool UpdateDVIRDefectRepairStatus(DVIRDefect dvirDefect, DbDVIRDefectUpdate dbDVIRDefectUpdate) { MethodBase methodBase = MethodBase.GetCurrentMethod(); logger.Trace($"Begin {methodBase.ReflectedType.Name}.{methodBase.Name}"); // Check whether the DbDVIRDefectUpdate repair status properties are populated. if (dbDVIRDefectUpdate.RepairDateTime == null && dbDVIRDefectUpdate.RepairStatus == null && dbDVIRDefectUpdate.RepairUserId == null) { // No repair status update. return(false); } // Proceed only if the DVIRDefect's RepairStatus has not already been set. if (dvirDefect.RepairStatus != null && dvirDefect.RepairStatus != RepairStatusType.NotRepaired) { throw new ArgumentException($"RepairStatus of the DVIRDefect has already been set and cannot be changed."); } // Ensure all repair status properties have values. if (dbDVIRDefectUpdate.RepairDateTime == null || dbDVIRDefectUpdate.RepairStatus == null || dbDVIRDefectUpdate.RepairUserId == null) { throw new ArgumentException($"One or more related properties (RepairDateTime, RepairStatus, or RepairUserId) of the DbDVIRDefectUpdate object are null."); } var updateRepairStatusType = dbDVIRDefectUpdate.RepairStatus switch { nameof(RepairStatusType.NotNecessary) => RepairStatusType.NotNecessary, nameof(RepairStatusType.Repaired) => RepairStatusType.Repaired, _ => throw new ArgumentException($"Invalid RepairStatus value. RepairStatus must be set to either 'Repaired' or 'NotNecessary'."), }; // Update the repair status. var updateRepairUser = new User { Id = Id.Create(dbDVIRDefectUpdate.RepairUserId) }; dvirDefect.RepairDateTime = dbDVIRDefectUpdate.RepairDateTime; dvirDefect.RepairStatus = updateRepairStatusType; dvirDefect.RepairUser = updateRepairUser; logger.Trace($"End {methodBase.ReflectedType.Name}.{methodBase.Name}"); return(true); }
/// <summary> /// Adds a <see cref="DefectRemark"/> to the <paramref name="dvirDefect"/> using properties of the <paramref name="dbDVIRDefectUpdate"/>. /// </summary> /// <param name="dvirDefect">The <see cref="DVIRDefect"/> to which a <see cref="DefectRemark"/> is to be added.</param> /// <param name="dbDVIRDefectUpdate">The <see cref="DbDVIRDefectUpdate"/> from which to obtain the property values for the <see cref="DefectRemark"/> that is to be added to the <paramref name="dvirDefect"/>.</param> /// <returns></returns> bool AddDefectRemark(DVIRDefect dvirDefect, DbDVIRDefectUpdate dbDVIRDefectUpdate) { MethodBase methodBase = MethodBase.GetCurrentMethod(); logger.Trace($"Begin {methodBase.ReflectedType.Name}.{methodBase.Name}"); // Check whether the DbDVIRDefectUpdate includes a remark to be added. if (dbDVIRDefectUpdate.Remark == null && dbDVIRDefectUpdate.RemarkDateTime == null && dbDVIRDefectUpdate.RemarkUserId == null) { // No remark to add. return(false); } // Ensure all remark-related properties have values. if (dbDVIRDefectUpdate.Remark == null || dbDVIRDefectUpdate.RemarkDateTime == null || dbDVIRDefectUpdate.RemarkUserId == null) { throw new ArgumentException($"Cannot add DefectRemark to DVIRDefect because one or more DefectRemark-related properties (Remark, RemarkDateTime, or RemarkUserId) of the DbDVIRDefectUpdate object are null."); } // Add the remark. DefectRemark defectRemark = new() { User = new User { Id = Id.Create(dbDVIRDefectUpdate.RemarkUserId) }, DateTime = dbDVIRDefectUpdate.RemarkDateTime, Remark = dbDVIRDefectUpdate.Remark }; if (dvirDefect.DefectRemarks == null) { dvirDefect.DefectRemarks = new List <DefectRemark>(); } dvirDefect.DefectRemarks.Add(defectRemark); logger.Trace($"End {methodBase.ReflectedType.Name}.{methodBase.Name}"); return(true); }