/// <summary> /// This method determines whether the C3SyncDate is older than either /// the LastExtChemDataImportDate or the LastRegulationDataImportDate. If it is /// out of date, we return true so that a sync is then performed. /// </summary> /// <param name="CswNbtResources"></param> /// <returns></returns> private bool outOfDate(CswNbtResources CswNbtResources) { bool OutOfDate = false; CswC3SearchParams CswC3SearchParams = new CswC3SearchParams(); CswNbtC3ClientManager CswNbtC3ClientManager = new CswNbtC3ClientManager(CswNbtResources, CswC3SearchParams); SearchClient SearchClient = CswNbtC3ClientManager.initializeC3Client(); if (null != SearchClient) { string LastExtChemDataImportDate = CswNbtC3ClientManager.getLastExtChemDataImportDate(SearchClient); string LastRegDataImportDate = CswNbtC3ClientManager.getLastRegulationDataImportDate(SearchClient); // Compare the dates and return true if a sync should be performed DateTime NbtC3SyncDate = CswConvert.ToDateTime(CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumConfigurationVariableNames.C3SyncDate)); if (NbtC3SyncDate == DateTime.MinValue || (NbtC3SyncDate < CswConvert.ToDateTime(LastExtChemDataImportDate) || (false == string.IsNullOrEmpty(LastRegDataImportDate) && NbtC3SyncDate < CswConvert.ToDateTime(LastRegDataImportDate)))) { OutOfDate = true; } } else { // TODO: What should we do with the error in the case of the schedule service? } return(OutOfDate); }
private DateTime _getRowDateVal(CswEnumNbtPropColumn ColumnName) { DateTime ReturnVal = DateTime.MinValue; if (_PropRow != null) { if (_PropsTable.Columns.Contains(ColumnName.ToString()) && !_PropRow.IsNull(ColumnName.ToString())) { ReturnVal = CswConvert.ToDateTime(_PropRow[ColumnName.ToString()]); } } return(ReturnVal); }
public override void ToJSON(JObject ParentObject) { JArray _CommentsJson = CommentsJson; foreach (JObject jr in _CommentsJson) { //converting each output row datetime to local user display format jr["datetime"] = new CswDateTime(_CswNbtResources, CswConvert.ToDateTime(jr["datetime"])).ToClientAsDateTimeString(); } ParentObject[_CommentSubField.ToXmlNodeName(true)] = _CommentsJson; ParentObject["rows"] = Rows.ToString(); ParentObject["columns"] = Columns.ToString(); ParentObject["newmessage"] = ""; }
private CswNbtView _getReconciliationScansForOutOfScopeContainersView(ContainerData.ReconciliationRequest Request) { Collection <CswPrimaryKey> LocationIds = _getLocationIds(Request); CswNbtMetaDataObjectClass LocationOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.LocationClass); CswNbtMetaDataObjectClass ContainerOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerClass); CswNbtMetaDataObjectClassProp CLocationOCP = ContainerOC.getObjectClassProp(CswNbtObjClassContainer.PropertyName.Location); CswNbtMetaDataObjectClass ContainerLocationOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerLocationClass); CswNbtMetaDataObjectClassProp ContainerOCP = ContainerLocationOC.getObjectClassProp(CswNbtObjClassContainerLocation.PropertyName.Container); CswNbtMetaDataObjectClassProp TypeOCP = ContainerLocationOC.getObjectClassProp(CswNbtObjClassContainerLocation.PropertyName.Type); CswNbtMetaDataObjectClassProp LocationOCP = ContainerLocationOC.getObjectClassProp(CswNbtObjClassContainerLocation.PropertyName.Location); CswNbtMetaDataObjectClassProp ScanDateOCP = ContainerLocationOC.getObjectClassProp(CswNbtObjClassContainerLocation.PropertyName.ScanDate); CswNbtView ContainerLocationsView = new CswNbtView(_CswNbtResources); //Filter to selected location (and all child locations if applicable) CswNbtViewRelationship LocationVR = ContainerLocationsView.AddViewRelationship(LocationOC, false); LocationVR.NodeIdsToFilterIn = LocationIds; CswCommaDelimitedString LocIds = new CswCommaDelimitedString(); foreach (CswPrimaryKey LocId in LocationIds) { LocIds.Add(LocId.PrimaryKey.ToString()); } //Filter to Container Location records of type Reconcile Scans in the current time scope CswNbtViewRelationship ContainerLocationVR = ContainerLocationsView.AddViewRelationship(LocationVR, CswEnumNbtViewPropOwnerType.Second, LocationOCP, false); CswNbtViewProperty TypeVP = ContainerLocationsView.AddViewProperty(ContainerLocationVR, TypeOCP); ContainerLocationsView.AddViewPropertyFilter(TypeVP, FilterMode: CswEnumNbtFilterMode.Equals, Value: CswEnumNbtContainerLocationTypeOptions.ReconcileScans.ToString()); CswNbtViewProperty ScanDateVP = ContainerLocationsView.AddViewProperty(ContainerLocationVR, ScanDateOCP); if (CswConvert.ToDateTime(Request.StartDate) > CswConvert.ToDateTime(Request.EndDate)) { Request.StartDate = Request.EndDate; } ContainerLocationsView.AddViewPropertyFilter(ScanDateVP, FilterMode: CswEnumNbtFilterMode.GreaterThanOrEquals, Value: Request.StartDate); ContainerLocationsView.AddViewPropertyFilter(ScanDateVP, FilterMode: CswEnumNbtFilterMode.LessThanOrEquals, Value: Request.EndDate); ContainerLocationsView.setSortProperty(ScanDateVP, CswEnumNbtViewPropertySortMethod.Descending); //Filter to Containers not matching current location scope CswNbtViewRelationship ContainerVR = ContainerLocationsView.AddViewRelationship(ContainerLocationVR, CswEnumNbtViewPropOwnerType.First, ContainerOCP, false); CswNbtViewProperty CLocVP = ContainerLocationsView.AddViewProperty(ContainerVR, CLocationOCP); ContainerLocationsView.AddViewPropertyFilter(CLocVP, CswEnumNbtSubFieldName.NodeID, CswEnumNbtFilterMode.In, LocIds.ToString()); return(ContainerLocationsView); }
public CswNbtSdInspectionsDataModels.InspectionData byDateRange(string StartingDate, string EndingDate) { if (_SystemView.ViewName != CswEnumNbtSystemViewName.SIInspectionsbyDate.ToString()) { _NbtSystemView.reInitSystemView(CswEnumNbtSystemViewName.SIInspectionsbyDate); } DateTime Start = CswConvert.ToDateTime(StartingDate); DateTime Today = DateTime.Today; //Today's time is 00:00:00 vs Now's time which is.. now if (DateTime.MinValue == Start) { Start = Today; } DateTime End = CswConvert.ToDateTime(EndingDate); if (DateTime.MinValue == End) { if (Start >= Today) { End = Start.AddDays(2); } else { End = Today.AddDays(2); } } if (Start > End) { End = Start; End = End.AddDays(2); } //In case we were provided valid dates, grab just the Day @midnight Start = Start.Date; End = End.Date; _addSystemViewPropFilter(CswEnumNbtObjectClass.InspectionDesignClass, CswNbtObjClassInspectionDesign.PropertyName.DueDate, Start.ToShortDateString(), CswEnumNbtFilterMode.GreaterThanOrEquals); _addSystemViewPropFilter(CswEnumNbtObjectClass.InspectionDesignClass, CswNbtObjClassInspectionDesign.PropertyName.DueDate, End.ToShortDateString(), CswEnumNbtFilterMode.LessThanOrEquals); return(getInspectionsAndDesigns()); }
private CswNbtView _getReconciliationView(ContainerData.ReconciliationRequest Request) { Collection <CswPrimaryKey> LocationIds = _getLocationIds(Request); CswNbtMetaDataObjectClass LocationOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.LocationClass); CswNbtMetaDataObjectClass ContainerOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerClass); CswNbtMetaDataObjectClassProp LocationOCP = ContainerOC.getObjectClassProp(CswNbtObjClassContainer.PropertyName.Location); CswNbtMetaDataObjectClassProp DateCreatedOCP = ContainerOC.getObjectClassProp(CswNbtObjClassContainer.PropertyName.DateCreated); CswNbtMetaDataObjectClassProp DisposedOCP = ContainerOC.getObjectClassProp(CswNbtObjClassContainer.PropertyName.Disposed); CswNbtMetaDataObjectClass ContainerLocationOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerLocationClass); CswNbtMetaDataObjectClassProp ContainerOCP = ContainerLocationOC.getObjectClassProp(CswNbtObjClassContainerLocation.PropertyName.Container); CswNbtMetaDataObjectClassProp ScanDateOCP = ContainerLocationOC.getObjectClassProp(CswNbtObjClassContainerLocation.PropertyName.ScanDate); CswNbtView ContainersView = new CswNbtView(_CswNbtResources); CswNbtViewRelationship LocationVR = ContainersView.AddViewRelationship(LocationOC, false); LocationVR.NodeIdsToFilterIn = LocationIds; CswNbtViewRelationship ContainerVR = ContainersView.AddViewRelationship(LocationVR, CswEnumNbtViewPropOwnerType.Second, LocationOCP, false); CswNbtViewProperty DateCreatedVP = ContainersView.AddViewProperty(ContainerVR, DateCreatedOCP); ContainersView.AddViewPropertyFilter(DateCreatedVP, FilterMode: CswEnumNbtFilterMode.LessThanOrEquals, Value: Request.EndDate); CswNbtViewProperty DisposedVP = ContainersView.AddViewProperty(ContainerVR, DisposedOCP); CswNbtViewRelationship ContainerLocationVR = ContainersView.AddViewRelationship(ContainerVR, CswEnumNbtViewPropOwnerType.Second, ContainerOCP, false); CswNbtViewProperty ScanDateVP = ContainersView.AddViewProperty(ContainerLocationVR, ScanDateOCP); if (CswConvert.ToDateTime(Request.StartDate) > CswConvert.ToDateTime(Request.EndDate)) { Request.StartDate = Request.EndDate; } ContainersView.AddViewPropertyFilter(ScanDateVP, FilterMode: CswEnumNbtFilterMode.GreaterThanOrEquals, Value: Request.StartDate); ContainersView.AddViewPropertyFilter(ScanDateVP, FilterMode: CswEnumNbtFilterMode.LessThanOrEquals, Value: Request.EndDate); ContainersView.setSortProperty(ScanDateVP, CswEnumNbtViewPropertySortMethod.Descending); return(ContainersView); }
public CswNbtNodePropDateTime(CswNbtResources CswNbtResources, CswNbtNodePropData CswNbtNodePropData, CswNbtMetaDataNodeTypeProp CswNbtMetaDataNodeTypeProp, CswNbtNode Node) : base(CswNbtResources, CswNbtNodePropData, CswNbtMetaDataNodeTypeProp, Node) { _DateValueSubField = ((CswNbtFieldTypeRuleDateTime)_FieldTypeRule).DateValueSubField; // Associate subfields with methods on this object, for SetSubFieldValue() _SubFieldMethods.Add(_DateValueSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => DateTimeValue, x => DateTimeValue = CswConvert.ToDateTime(x))); }
public CswNbtNodePropMTBF(CswNbtResources CswNbtResources, CswNbtNodePropData CswNbtNodePropData, CswNbtMetaDataNodeTypeProp CswNbtMetaDataNodeTypeProp, CswNbtNode Node) : base(CswNbtResources, CswNbtNodePropData, CswNbtMetaDataNodeTypeProp, Node) { _StartDateTimeSubField = ((CswNbtFieldTypeRuleMTBF)_FieldTypeRule).StartDateTimeSubField; _UnitsSubField = ((CswNbtFieldTypeRuleMTBF)_FieldTypeRule).UnitsSubField; _ValueSubField = ((CswNbtFieldTypeRuleMTBF)_FieldTypeRule).ValueSubField; if (string.IsNullOrEmpty(Units)) { Units = "days"; } // Associate subfields with methods on this object, for SetSubFieldValue() _SubFieldMethods.Add(_StartDateTimeSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => StartDateTime, x => StartDateTime = CswConvert.ToDateTime(x))); _SubFieldMethods.Add(_UnitsSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => Units, x => Units = CswConvert.ToString(x))); _SubFieldMethods.Add(_ValueSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => CachedValue, x => CachedValue = CswConvert.ToDouble(x))); }
public static string renderViewPropFilter(ICswNbtUser RunAsUser, CswNbtFieldResources CswNbtFieldResources, CswNbtViewPropertyFilter CswNbtViewPropertyFilterIn, CswEnumNbtPropColumn Column) { string ValueColumn = "jnp." + Column.ToString(); string ReturnVal = string.Empty; bool IncludesTime = false; DateTime FilterValue = DateTime.MinValue; string Value = CswNbtViewPropertyFilterIn.Value.ToLower().Trim(); if (Value.StartsWith("today")) { Int32 PlusDays = 0; if (Value.Length > "today".Length) { string Operator = Value.Substring("today".Length, 1); string Operand = Value.Substring("today".Length + 1); if (CswTools.IsInteger(Operand)) { PlusDays = CswConvert.ToInt32(Operand); if (Operator == "-") { PlusDays = PlusDays * -1; } } } FilterValue = DateTime.Now.AddDays(PlusDays).Date; } else { FilterValue = CswConvert.ToDateTime(CswNbtViewPropertyFilterIn.Value); if (FilterValue.TimeOfDay != TimeSpan.Zero) // midnight { IncludesTime = true; } } if (CswNbtViewPropertyFilterIn.FilterMode == CswEnumNbtFilterMode.NotNull) { ReturnVal = ValueColumn + " is not null"; } else if (CswNbtViewPropertyFilterIn.FilterMode == CswEnumNbtFilterMode.Null) { ReturnVal = ValueColumn + " is null"; } else if (FilterValue != DateTime.MinValue) { // case 26844 // If no time was specified in our filter value, then // we need to ignore the time part of values in our comparisons string ThisDayString = CswNbtFieldResources.CswNbtResources.getDbNativeDate(FilterValue); string NextDayString = CswNbtFieldResources.CswNbtResources.getDbNativeDate(FilterValue.AddDays(1)); if (CswNbtViewPropertyFilterIn.FilterMode == CswEnumNbtFilterMode.Equals) { if (IncludesTime) { ReturnVal = ValueColumn + " = " + ThisDayString; } else { ReturnVal = ValueColumn + " >= " + ThisDayString; ReturnVal += " and " + ValueColumn + " < " + NextDayString; } } else if (CswNbtViewPropertyFilterIn.FilterMode == CswEnumNbtFilterMode.GreaterThan) { if (IncludesTime) { ReturnVal = ValueColumn + " > " + ThisDayString; } else { ReturnVal = ValueColumn + " >= " + NextDayString; } } else if (CswNbtViewPropertyFilterIn.FilterMode == CswEnumNbtFilterMode.GreaterThanOrEquals) { ReturnVal = ValueColumn + " >= " + ThisDayString; } else if (CswNbtViewPropertyFilterIn.FilterMode == CswEnumNbtFilterMode.LessThan) { ReturnVal = ValueColumn + " < " + ThisDayString; } else if (CswNbtViewPropertyFilterIn.FilterMode == CswEnumNbtFilterMode.LessThanOrEquals) { if (IncludesTime) { ReturnVal = ValueColumn + " <= " + ThisDayString; } else { ReturnVal = ValueColumn + " < " + NextDayString; // not <=, see case 28620 } } else if (CswNbtViewPropertyFilterIn.FilterMode == CswEnumNbtFilterMode.NotEquals) { if (IncludesTime) { ReturnVal = ValueColumn + " <> " + ThisDayString; } else { ReturnVal = "(" + ValueColumn + " < " + ThisDayString; ReturnVal += " or " + ValueColumn + " >= " + NextDayString + ")"; } } else { throw new CswDniException(CswEnumErrorType.Error, "Invalid filter", "An invalid FilterMode was encountered in CswNbtNodeProp.GetFilter()) { " + CswNbtViewPropertyFilterIn.FilterMode.ToString()); } // switch( CswNbtViewPropertyFilterIn.FilterMode ) } // if( FilterValue != DateTime.MinValue ) return(ReturnVal); }//renderViewPropFilter()
public CswNbtNodePropPassword(CswNbtResources CswNbtResources, CswNbtNodePropData CswNbtNodePropData, CswNbtMetaDataNodeTypeProp CswNbtMetaDataNodeTypeProp, CswNbtNode Node) : base(CswNbtResources, CswNbtNodePropData, CswNbtMetaDataNodeTypeProp, Node) { _EncryptedPasswordSubField = ((CswNbtFieldTypeRulePassword)_FieldTypeRule).EncryptedPasswordSubField; _ChangedDateSubField = ((CswNbtFieldTypeRulePassword)_FieldTypeRule).ChangedDateSubField; _PreviouslyUsedPasswords = ((CswNbtFieldTypeRulePassword)_FieldTypeRule).PreviouslyUsedPasswords; _CswEncryption = new CswEncryption(CswNbtResources.MD5Seed); // Associate subfields with methods on this object, for SetSubFieldValue() _SubFieldMethods.Add(_EncryptedPasswordSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => EncryptedPassword, x => EncryptedPassword = CswConvert.ToString(x))); _SubFieldMethods.Add(_ChangedDateSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => ChangedDate, x => ChangedDate = CswConvert.ToDateTime(x))); _SubFieldMethods.Add(_PreviouslyUsedPasswords.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => PreviouslyUsedPasswords, x => PreviouslyUsedPasswords = CswConvert.ToString(x))); }
public static void getTimelines(ICswResources CswResources, CswNbtSchedServiceTimeLineReturn Return, CswNbtSchedServiceTimeLineRequest Request) { CswNbtResources NbtResources = (CswNbtResources)CswResources; DateTime StartDate = new DateTime(); int counter = 0; CswColorGenerator ColorGenerator = new CswColorGenerator(); int SeriesNo = 30; Dictionary <string, Series> TimeLineData = new Dictionary <string, Series>(); HashSet <string> seen = new HashSet <string>(); string LogFileLocation = NbtResources.SetupVbls[CswEnumSetupVariableNames.LogFileLocation]; _getLogFiles(NbtResources, Return, LogFileLocation); //Order the log files by last modified date //Case 30403 - if the current user is not ChemSW_Admin, scope timeline to the users schema if (NbtResources.CurrentNbtUser.Username != CswAuthenticator.ChemSWAdminUsername) { Request.FilterSchemaTo = NbtResources.AccessId; } if (Return.Data.FilterData.LogFiles.Count > 0) { //If no log file is selected, default to the last log file modified string selectedFile = String.IsNullOrEmpty(Request.SelectedLogFile) ? Return.Data.FilterData.LogFiles[0] : Request.SelectedLogFile; StreamReader file = new StreamReader(LogFileLocation + @"\" + selectedFile); string line; while ((line = file.ReadLine()) != null) { line = line.Replace("\"", ""); string[] splitLine = line.Split(','); string MsgType = splitLine[0]; if ((MsgType.Equals("PerOp") || MsgType.Equals("Error"))) { string Schema = splitLine[1]; string StartTime = splitLine[20]; string OpName = splitLine[23].Split(':')[0]; //this is something like "GenNode: Execution" and all we want is "GenNode" double ExecutionTime = CswConvert.ToDouble(splitLine[28]); string ErrMsg = splitLine[9]; if (MsgType.Equals("Error")) { OpName = "Error"; ExecutionTime = double.MinValue; } string LegendName = Schema + " " + OpName; _populateFilterData(NbtResources, Return, OpName, Schema, seen); DateTime thisStartDate = CswConvert.ToDateTime(StartTime); DateTime FilterDateStart = CswConvert.ToDateTime(Request.FilterStartTimeTo); DateTime FilterDateEnd = CswConvert.ToDateTime(Request.FilterEndTimeTo); CswCommaDelimitedString FilterSchemas = new CswCommaDelimitedString(); FilterSchemas.FromString(Request.FilterSchemaTo); CswCommaDelimitedString FilterOps = new CswCommaDelimitedString(); FilterOps.FromString(Request.FilterOpTo); if (((thisStartDate >= FilterDateStart && thisStartDate <= FilterDateEnd) || (DateTime.MinValue == FilterDateStart && DateTime.MinValue == FilterDateEnd)) && (FilterSchemas.Contains(Schema) || String.IsNullOrEmpty(Request.FilterSchemaTo)) && (FilterOps.Contains(OpName) || String.IsNullOrEmpty(Request.FilterOpTo))) { if (FilterSchemas.IsEmpty || FilterOps.IsEmpty) //If no schema filter is set we want to generate a timeline of each schema + all the rules that ran { if (FilterOps.IsEmpty) { if (MsgType.Equals("Error")) { //If we're mashing all schema errors together, we do not show what the msg or schema was was since there are probably many, just that an error occured. LegendName = "Error"; OpName = ""; ErrMsg = ""; Schema = ""; } else { //If we're mashing all schema together, we don't care what op ran since there are many, just show that this schema was running something LegendName = Schema; OpName = ""; } } else { //If no schema is selected, but there are Op filters, we mash the Ops on each Schema together LegendName = OpName; Schema = ""; } } if (0 == counter) { StartDate = CswConvert.ToDateTime(StartTime); } counter++; double DataStartS = (thisStartDate - StartDate).TotalMilliseconds / 1000; double DataEndS = double.MinValue; if (MsgType.Equals("PerOp")) { DataEndS = DataStartS + ExecutionTime / 1000; } Series ThisSeries; if (TimeLineData.ContainsKey(LegendName)) { ThisSeries = TimeLineData[LegendName]; } else { ThisSeries = new Series() { label = LegendName, SchemaName = Schema, OpName = OpName, SeriesNo = SeriesNo, ErrorMsg = ErrMsg }; TimeLineData.Add(LegendName, ThisSeries); SeriesNo += 90; } _processData(ThisSeries, DataStartS, DataEndS, ExecutionTime, thisStartDate.ToString(), ColorGenerator); } } //if( splitLine.Length >= 28 && splitLine[0].Equals( "PerOp" ) ) } // while( ( line = file.ReadLine() ) != null && counter <= maxLines ) foreach (Series series in TimeLineData.Values) { Return.Data.Series.Add(series); } } }//getTimelines()
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); } } } } }
/// <summary> /// Constructor /// </summary> public CswNbtNodePropQuestion(CswNbtResources CswNbtResources, CswNbtNodePropData CswNbtNodePropData, CswNbtMetaDataNodeTypeProp CswNbtMetaDataNodeTypeProp, CswNbtNode Node) : base(CswNbtResources, CswNbtNodePropData, CswNbtMetaDataNodeTypeProp, Node) { //if( _CswNbtMetaDataNodeTypeProp.FieldType.FieldType != CswEnumNbtFieldType.Question ) //{ // throw ( new CswDniException( ErrorType.Error, "A data consistency problem occurred", // "CswNbtNodePropQuestion() was created on a property with fieldtype: " + _CswNbtMetaDataNodeTypeProp.FieldType.FieldType ) ); //} CswNbtFieldTypeRuleQuestion FieldTypeRule = (CswNbtFieldTypeRuleQuestion)_FieldTypeRule; _AnswerSubField = FieldTypeRule.AnswerSubField; _CommentsSubField = FieldTypeRule.CommentsSubField; _CorrectiveActionSubField = FieldTypeRule.CorrectiveActionSubField; _DateAnsweredSubField = FieldTypeRule.DateAnsweredSubField; _DateCorrectedSubField = FieldTypeRule.DateCorrectedSubField; _IsCompliantSubField = FieldTypeRule.IsCompliantSubField; // Associate subfields with methods on this object, for SetSubFieldValue() _SubFieldMethods.Add(_AnswerSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => Answer, x => Answer = CswConvert.ToString(x))); _SubFieldMethods.Add(_CommentsSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => Comments, x => Comments = CswConvert.ToString(x))); _SubFieldMethods.Add(_CorrectiveActionSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => CorrectiveAction, x => CorrectiveAction = CswConvert.ToString(x))); _SubFieldMethods.Add(_DateAnsweredSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => DateAnswered, x => DateAnswered = CswConvert.ToDateTime(x))); _SubFieldMethods.Add(_DateCorrectedSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => DateCorrected, x => DateCorrected = CswConvert.ToDateTime(x))); _SubFieldMethods.Add(_IsCompliantSubField.Name, new Tuple <Func <dynamic>, Action <dynamic> >(() => IsCompliant, x => IsCompliant = CswConvert.ToBoolean(x))); }//ctor