Beispiel #1
0
 public async Task AddMaintainedDoorLogEntry(HardwareMaintainedDoorLog log)
 {
     await this.DataUnitOfWork.HardwareMaintainedDoorLogRepository.AddLogEntry(log);
 }
Beispiel #2
0
        public async Task <DoorDetail> SetWorkorderDoorHardwareMaintain(string workorderId, string doorId, DoorDetails selectedHardware, string userId)
        {
            var workorderDoors = await WorkorderDoorRepository.GetDoorByDoorIdAsList(workorderId, doorId);

            var wo = await this.ObjectsLocator.WorkorderService.GetWorkorderById(workorderId);

            if (workorderDoors != null)
            {
                var workorderDoor = workorderDoors.FirstOrDefault();
                var hardware      = workorderDoor.Door[selectedHardware.FieldName] as Hardware;

                if (hardware.IsMaintainable == true)
                {
                    hardware.IsMaintained = selectedHardware.IsMaintained;
                    var updatedDoor = await WorkorderDoorRepository.UpdateWordorderDoor(workorderDoor);

                    //log
                    if (wo != null)
                    {
                        await ObjectsLocator.LogService.AddMaintainedLogEntry(
                            wo.ProjectId,
                            wo.TemplateId,
                            wo.Id,
                            userId,
                            new HardwareInDoorRequestModel {
                            Content      = hardware.Content,
                            IsMaintained = hardware.IsMaintained,
                            FieldName    = selectedHardware.FieldName,
                            Header       = selectedHardware.Header,
                        },
                            doorId,
                            workorderDoor.Door.DoorNo,
                            hardware.ChecklistId
                            );
                    }
                }

                //check all maintainables are maintained
                string[]       PROPS_TO_IGNORE     = { "DoorNo", "Id", "ProjectId", "DoorQty", "AttachedProjectDocumentList", "Comment", "Building", "Revision", "MbeProductionId" };
                PropertyInfo[] DOOR_PROP_INFO      = typeof(Door).GetProperties();
                bool           everthingMaintained = true;
                foreach (PropertyInfo info in DOOR_PROP_INFO)
                {
                    if (!PROPS_TO_IGNORE.Contains(info.Name))
                    {
                        if (info.PropertyType.Equals(typeof(Hardware)))
                        {
                            var      value = info.GetValue(workorderDoor.Door);
                            Hardware hw    = (Hardware)value;
                            if (hw.IsMaintainable)
                            {
                                if (!hw.IsMaintained)
                                {
                                    everthingMaintained = false;
                                }
                            }
                        }
                    }
                }

                if (everthingMaintained)
                {
                    var log = new HardwareMaintainedDoorLog()
                    {
                        DoorId              = workorderDoor.Door.Id,
                        DoorNo              = workorderDoor.Door.DoorNo,
                        IsMaintained        = true,
                        ProjectId           = wo.ProjectId,
                        WorkorderTemplateId = wo.TemplateId,
                        WorkorderId         = wo.Id,
                        Timestamp           = DateTime.UtcNow,
                        UserId              = userId
                    };
                    await this.ObjectsLocator.LogService.AddMaintainedDoorLogEntry(log);

                    workorderDoor.FinishedDate = DateTime.UtcNow;
                    await this.WorkorderDoorRepository.UpdateWordorderDoor(workorderDoor);
                }
                else
                {
                    var logs = await this.ObjectsLocator.LogService.GetMaintainedDoorLogEntries(wo.ProjectId, wo.TemplateId, wo.Id);

                    var log = logs.OrderByDescending(m => m.Timestamp).FirstOrDefault();
                    if (log != null && log.IsMaintained)
                    {
                        var logObj = new HardwareMaintainedDoorLog()
                        {
                            DoorId              = workorderDoor.Door.Id,
                            DoorNo              = workorderDoor.Door.DoorNo,
                            IsMaintained        = false,
                            ProjectId           = wo.ProjectId,
                            WorkorderTemplateId = wo.TemplateId,
                            WorkorderId         = wo.Id,
                            Timestamp           = DateTime.UtcNow,
                            UserId              = userId
                        };
                        await this.ObjectsLocator.LogService.AddMaintainedDoorLogEntry(logObj);
                    }

                    if (workorderDoor.FinishedDate != null)
                    {
                        workorderDoor.FinishedDate = null;
                        await this.WorkorderDoorRepository.UpdateWordorderDoor(workorderDoor);
                    }
                }
                //---

                return(new DoorDetail
                {
                    FieldName = selectedHardware.FieldName,
                    Header = selectedHardware.Header,
                    Content = hardware.Content,
                    IsMaintainable = hardware.IsMaintainable,
                    IsMaintained = hardware.IsMaintained,
                    ChecklistId = hardware.ChecklistId
                });
            }
            return(null);
        }