Esempio n. 1
0
        /// <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()
Esempio n. 2
0
        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()
Esempio n. 3
0
        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);
                        }
                    }
                }
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        } //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);
        }