/// <summary> /// Determine Inspection Status and set read-only /// </summary> public override void beforePropertySetWriteNode(bool Creating) { if (Creating) { Status.Value = CswEnumNbtInspectionStatus.Pending; } _setDefaultValues(); _InspectionState = new InspectionState(this); if (false == _genFutureNodesHasRun) //redundant--for readability { //this is written in such a way that it should only execute once per instance of this node _genFutureNodes(); } foreach (CswNbtNodePropWrapper PropWrapper in Node.Properties[(CswEnumNbtFieldType)CswEnumNbtFieldType.Question]) { CswNbtNodePropQuestion QuestionProp = PropWrapper; if (QuestionProp.IsAnswerCompliant()) { QuestionProp.CorrectiveAction = string.Empty; } } // !!! // Don't clear IsFuture here, like we do with Tasks. See case 28317. // !!! } // beforeWriteNode()
public override void afterPropertySetPopulateProps() { foreach (CswNbtNodePropWrapper PropWrapper in Node.Properties[(CswEnumNbtFieldType)CswEnumNbtFieldType.Question]) { CswNbtNodePropQuestion QuestionProp = PropWrapper; QuestionProp.IsActionRequired = (Status.Value == CswEnumNbtInspectionStatus.ActionRequired); // case 25035 } Finish.SetOnBeforeRender(hideButtonProp); Cancel.SetOnBeforeRender(hideButtonProp); SetPreferred.SetOnBeforeRender(hideButtonProp); Generator.SetOnPropChange(OnGeneratorChange); IsFuture.SetOnPropChange(OnIsFutureChange); Status.SetOnPropChange(OnStatusPropChange); } //afterPopulateProps()
private void _updateInspectionNode(CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection Inspection, CswNbtSdInspectionsDataModels.InspectionUpdateData UpdateCollection) { if (Int32.MinValue != Inspection.InspectionId) { CswPrimaryKey InspectionPk = new CswPrimaryKey("nodes", Inspection.InspectionId); CswNbtNode InspectionNode = _CswNbtResources.Nodes.GetNode(InspectionPk, Inspection.DesignId); if (null != InspectionNode) { CswNbtObjClassInspectionDesign NodeAsDesign = (CswNbtObjClassInspectionDesign)InspectionNode; if (NodeAsDesign.Status.Value == Completed || NodeAsDesign.Status.Value == CompletedLate) { UpdateCollection.Completed.Add(Inspection); } else if (NodeAsDesign.Status.Value == Cancelled) { UpdateCollection.Cancelled.Add(Inspection); } else if (NodeAsDesign.Status.Value == Missed) { UpdateCollection.Missed.Add(Inspection); } else { Inspection.Counts = new CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection.QuestionCounts(); /* We loop once to set the property values */ CswNbtMetaDataNodeType InspectionNt = InspectionNode.getNodeType(); if (null != InspectionNt) { //Can edit the nodetype if (_CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Edit, InspectionNt)) { foreach (CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection.QuestionAnswer Question in Inspection.Questions) { CswNbtMetaDataNodeTypeProp Ntp = InspectionNt.getNodeTypeProp(Question.QuestionId); if (null != Ntp && null != Ntp.FirstEditLayout) { CswNbtMetaDataNodeTypeTab Tab = InspectionNt.getNodeTypeTab(Ntp.FirstEditLayout.TabId); if (null != Tab) { bool CanEdit = ( _CswNbtResources.Permit.canTab(CswEnumNbtNodeTypePermission.Edit, InspectionNt, Tab) || _CswNbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, Ntp, Tab) ); CswNbtNodePropQuestion PropAsQuestion = InspectionNode.Properties[Ntp]; if (CanEdit) { PropAsQuestion.Answer = Question.Answer; PropAsQuestion.CorrectiveAction = Question.CorrectiveAction; DateTime DateAnswered = CswConvert.ToDateTime(Question.DateAnswered); if (DateTime.MinValue != DateAnswered) { PropAsQuestion.DateAnswered = DateAnswered; } DateTime DateCorrected = CswConvert.ToDateTime(Question.DateCorrected); if (DateTime.MinValue != DateCorrected) { PropAsQuestion.DateCorrected = DateCorrected; } PropAsQuestion.Comments = Question.Comments; } if (false == string.IsNullOrEmpty(Question.Answer)) { Inspection.Counts.Answered += 1; } else { Inspection.Counts.UnAnswered += 1; } if (false == PropAsQuestion.IsCompliant) { Inspection.Counts.Ooc += 1; } Inspection.Counts.Total += 1; } } } InspectionNode.postChanges(true); if (false == string.IsNullOrEmpty(Inspection.Action) && (Inspection.Action.ToLower() == "finish" || Inspection.Action.ToLower() == "cancel")) { CswNbtMetaDataNodeTypeProp ButtonNtp = null; if (Inspection.Action.ToLower() == "finish") { ButtonNtp = InspectionNode.getNodeType().getNodeTypeProp(CswNbtObjClassInspectionDesign.PropertyName.Finish); } else if (Inspection.Action.ToLower() == "cancel") { ButtonNtp = InspectionNode.getNodeType().getNodeTypeProp(CswNbtObjClassInspectionDesign.PropertyName.Cancel); } if (null != ButtonNtp && null != ButtonNtp.FirstEditLayout) { CswNbtMetaDataNodeTypeTab ButtonTab = _CswNbtResources.MetaData.getNodeTypeTab(ButtonNtp.FirstEditLayout.TabId); if (null != ButtonTab && ( _CswNbtResources.Permit.canTab(CswEnumNbtNodeTypePermission.Edit, InspectionNt, NodeTypeTab: ButtonTab) || _CswNbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, ButtonNtp, ButtonTab) ) ) { _InspectionDesignOc = _InspectionDesignOc ?? _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.InspectionDesignClass); CswNbtObjClass NbtObjClass = CswNbtObjClassFactory.makeObjClass(_CswNbtResources, _InspectionDesignOc, InspectionNode); CswNbtObjClass.NbtButtonData ButtonData = new CswNbtObjClass.NbtButtonData(ButtonNtp); NbtObjClass.triggerOnButtonClick(ButtonData); } } } } } /* Reinit since state has changed. */ NodeAsDesign = InspectionNode; if (NodeAsDesign.Status.Value == Completed || NodeAsDesign.Status.Value == CompletedLate) { /* Nothing to do */ } else if (NodeAsDesign.Status.Value == ActionRequired) { Inspection.Status = NodeAsDesign.Status.Value; /* We loop again to modify the return with the status of the Inspection per QuestionAnswer */ foreach (CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection.QuestionAnswer Question in Inspection.Questions) { Question.Status = NodeAsDesign.Status.Value; } /* In case the Inspection has been modified by someone else */ Inspection.DueDateAsDate = NodeAsDesign.InspectionDate.DateTimeValue; Inspection.InspectionPointName = NodeAsDesign.Target.CachedNodeName; Inspection.LocationPath = NodeAsDesign.Location.CachedValue; UpdateCollection.ActionRequired.Add(Inspection); } else { UpdateCollection.InComplete.Add(Inspection); } } } } }
private CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection _addChecklistNodesToResponse(CswNbtNode InspectionNode) { CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection Ret = null; if (false == InspectionDesignNodeIds.Contains(InspectionNode.NodeId) && false == InspectionNode.ReadOnly) { InspectionDesignNodeIds.Add(InspectionNode.NodeId); CswNbtObjClassInspectionDesign NodeAsInspectionDesign = InspectionNode; Ret = new CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection { DesignId = InspectionNode.NodeTypeId, DueDateAsDate = NodeAsInspectionDesign.DueDate.DateTimeValue, InspectionId = NodeAsInspectionDesign.NodeId.PrimaryKey, InspectionPointName = NodeAsInspectionDesign.Target.CachedNodeName, LocationPath = NodeAsInspectionDesign.Location.Gestalt, RouteName = default(string), Status = NodeAsInspectionDesign.Status.Value, Counts = new CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection.QuestionCounts(), ReadOnly = InspectionNode.ReadOnly }; foreach (CswNbtNodePropWrapper Prop in InspectionNode.Properties) { if (Prop.getFieldTypeValue() == CswEnumNbtFieldType.Question && false == Prop.ReadOnly && _CswNbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, Prop.NodeTypeProp, null)) { CswNbtNodePropQuestion PropAsQuestion = Prop.AsQuestion; Ret.Counts.Total += 1; if (false == string.IsNullOrEmpty(PropAsQuestion.Answer) || PropAsQuestion.DateAnswered != DateTime.MinValue) { if (PropAsQuestion.IsCompliant) { Ret.Counts.Answered += 1; } else { Ret.Counts.Ooc += 1; } } else { Ret.Counts.UnAnswered += 1; } var ResponseQuestion = new CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection.QuestionAnswer { Answer = PropAsQuestion.Answer, AnswerId = PropAsQuestion.JctNodePropId, IsAnswerEditable = PropAsQuestion.IsAnswerEditable, Comments = PropAsQuestion.Comments, CorrectiveAction = PropAsQuestion.CorrectiveAction, DateAnswered = PropAsQuestion.DateAnswered, QuestionId = PropAsQuestion.NodeTypePropId, Status = NodeAsInspectionDesign.Status.Value, DateCorrected = PropAsQuestion.DateCorrected }; Ret.Questions.Add(ResponseQuestion); } else if (Prop.getFieldTypeValue() == CswEnumNbtFieldType.Image && _CswNbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, Prop.NodeTypeProp, null)) { CswNbtNodePropImage PropAsImage = Prop.AsImage; CswNbtSdBlobData sdBlobData = new CswNbtSdBlobData(_CswNbtResources); Ret.Images = sdBlobData.GetImages(NodeAsInspectionDesign.NodeId, PropAsImage.JctNodePropId); Ret.MaxImages = PropAsImage.MaxFiles >= 1 ? PropAsImage.MaxFiles : 10; //if no value set for MaxFiles, default to 10 Ret.ImagePropId = new CswPropIdAttr(InspectionNode, PropAsImage.NodeTypeProp).ToString(); } } } return(Ret); }
} //afterPopulateProps() public override bool onPropertySetButtonClick(NbtButtonData ButtonData) { if (null != ButtonData && null != ButtonData.NodeTypeProp) { switch (ButtonData.NodeTypeProp.getObjectClassPropName()) { case PropertyName.Finish: if (false == _CswNbtResources.IsSystemUser) { InspectionDate.DateTimeValue = DateTime.Now; Inspector.RelatedNodeId = _CswNbtResources.CurrentNbtUser.UserId; } if (_InspectionState.AllAnswered) { if (_InspectionState.Deficient) { ButtonData.Message = "Inspection is deficient and requires further action."; this.Status.Value = CswEnumNbtInspectionStatus.ActionRequired; } else { string StatusValue = _InspectionState.AllAnsweredInTime ? CswEnumNbtInspectionStatus.Completed : CswEnumNbtInspectionStatus.CompletedLate; ButtonData.Message = "Inspection marked " + StatusValue + "."; this.Status.Value = StatusValue; ButtonData.Action = CswEnumNbtButtonAction.refresh; } } // if( _allAnswered ) else { ButtonData.Message = "Inspection can not be finished until all questions are answered. Questions remaining: " + _InspectionState.UnAnsweredQuestions.ToString(); } break; case PropertyName.Cancel: ButtonData.Message = "Inspection has been cancelled."; this.Status.Value = CswEnumNbtInspectionStatus.Cancelled; ButtonData.Action = CswEnumNbtButtonAction.refresh; break; case PropertyName.SetPreferred: CswNbtPropEnmrtrFiltered QuestionsFlt = Node.Properties[(CswEnumNbtFieldType)CswEnumNbtFieldType.Question]; int NumOfQuestionsSetToPreferredAnswer = 0; foreach (CswNbtNodePropWrapper PropWrapper in QuestionsFlt) { CswNbtNodePropQuestion QuestionProp = PropWrapper; // don't refactor this into the foreach. it doesn't work. case 28300. if (string.IsNullOrEmpty(QuestionProp.Answer.Trim())) { QuestionProp.Answer = QuestionProp.PreferredAnswer; NumOfQuestionsSetToPreferredAnswer++; } } ButtonData.Message = NumOfQuestionsSetToPreferredAnswer + " unanswered questions have been set to their preferred answer."; _toggleButtonVisibility(SetPreferred, IsVisible: false, SaveToDb: true); ButtonData.Action = CswEnumNbtButtonAction.refresh; break; case CswNbtObjClass.PropertyName.Save: break; } this.postChanges(false); } // if( null != NodeTypeProp ) return(true); }