Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }