public TimeKeepEntry Create() { // Validate if (string.IsNullOrEmpty(User) || string.IsNullOrWhiteSpace(User)) { throw new ArgumentNullException("user"); } if (ID.HasValue) { if (Category == null) { throw new ArgumentNullException("category"); } if (Category.IsScorecard && (string.IsNullOrEmpty(CaseNumber) || string.IsNullOrWhiteSpace(CaseNumber))) { throw new ArgumentNullException("category", "Parameter cannot be null if the labor is a scorecard labor"); } if (!Category.IsScorecard && !string.IsNullOrEmpty(CaseNumber) && !string.IsNullOrEmpty(CaseNumber)) { throw new ArgumentException("Cannot specify a case number for non-scorecard labor"); } } DataAccess dal = new DataAccess("TimeKeepEntries"); // This is supposed to return the altered and the new row TimeKeepEntry newEntry = null, modifiedEntry = null; using (IDataReader reader = dal.Create( new Dictionary <string, object> { ["@RowID"] = (ID.HasValue ? (object)ID.Value : DBNull.Value), ["@User"] = User.Trim(), ["@Category"] = (Category == null ? DBNull.Value : (object)Category.ID), ["@CaseNumber"] = (CaseNumber == null ? DBNull.Value : (object)CaseNumber.Trim()) } )) { newEntry = ReadOneFromDataReader(reader); modifiedEntry = ReadOneFromDataReader(reader); } this.ID = newEntry.ID; this.User = newEntry.User; this.IsDetailed = newEntry.IsDetailed; this.IsLogged = newEntry.IsLogged; this.StartTime = newEntry.StartTime; this.CaseNumber = newEntry.CaseNumber; this.Category = newEntry.Category; this.EndTime = newEntry.EndTime; return(modifiedEntry); }
public void EnsureCaseNumberAndCaseKey() { if (string.IsNullOrEmpty(caseNumber)) { return; } else if (caseNumber.Match(@"^[0-9]{1,11} [0-9]{2}$")) { string[] caseNumberIncludingCaseKey = caseNumber.Split(new char[] { ' ' }); caseNumber = caseNumberIncludingCaseKey[0]; CaseKey = caseNumberIncludingCaseKey[1]; } else if (CaseNumber.Match(@"^[0-9]{1,11}$")) { CaseKey = null; } else { CaseKey = null; } }
public CaseNumber Get() { using (var db = new OPContext()) { var now = DateTime.Now.Date; var caseNumber = db.CaseNumbers.Where(cn => DbFunctions.TruncateTime(cn.ForDate) == now) .OrderByDescending(cn => cn.Number).FirstOrDefault(); if (caseNumber == null) { caseNumber = new CaseNumber(); db.CaseNumbers.Add(caseNumber); db.SaveChanges(); return(caseNumber); } caseNumber = caseNumber.Increment(); db.CaseNumbers.Add(caseNumber); db.SaveChanges(); return(caseNumber); } }
/// <summary> /// Executes the workflow activity. /// </summary> /// <param name="executionContext">The execution context.</param> protected override void Execute(CodeActivityContext executionContext) { // Create the tracing service ITracingService tracingService = executionContext.GetExtension <ITracingService>(); if (tracingService == null) { throw new InvalidPluginExecutionException("Failed to retrieve tracing service."); } tracingService.Trace("Entered " + _processName + ".Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}", executionContext.ActivityInstanceId, executionContext.WorkflowInstanceId); // Create the context IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); if (context == null) { throw new InvalidPluginExecutionException("Failed to retrieve workflow context."); } tracingService.Trace(_processName + ".Execute(), Correlation Id: {0}, Initiating User: {1}", context.CorrelationId, context.InitiatingUserId); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); tracingService.Trace("entering 'try'", ""); try { tracingService.Trace("building fetch", ""); string fetchXml = @"<fetch distinct='false' mapping='logical' output-format='xml-platform' version='1.0'> <entity name='queueitem'> <attribute name='title'/> <attribute name='enteredon'/> <attribute name='objecttypecode'/> <attribute name='objectid'/> <attribute name='queueid'/> <attribute name='workerid'/> <order descending='false' attribute='enteredon'/> <filter type='and'> <condition attribute='statecode' value='0' operator='eq'/> <condition attribute='objecttypecode' value='112' operator='eq'/> <condition attribute='queueid' value='{0}' operator='eq'/> <condition attribute='workerid' operator='null'/> </filter> <link-entity name='incident' alias='casealias' link-type='inner' to='objectid' from='incidentid'> <attribute name='prioritycode'/> <attribute name='ticketnumber'/> </link-entity> </entity> </fetch> "; Guid queueId = Queue.Get(executionContext).Id; fetchXml = string.Format(fetchXml, queueId); tracingService.Trace("prepared fetchxml: {0}", fetchXml); tracingService.Trace("retrieving queue items", ""); EntityCollection queueItems = service.RetrieveMultiple(new FetchExpression(fetchXml)); tracingService.Trace("instantiating empty queueitem", ""); Entity item = new Entity("queueitem"); string caseNumber = ""; string caseTitle = ""; string caseId = Guid.Empty.ToString(); bool caseFound = false; if (queueItems.Entities.Count > 0) { caseFound = true; tracingService.Trace("processing queueitems", ""); item = queueItems.Entities[0]; tracingService.Trace("objectid: {0}", ((EntityReference)item["objectid"]).Id); caseId = ((EntityReference)item["objectid"]).Id.ToString(); caseTitle = item["title"].ToString(); caseNumber = ((AliasedValue)item["casealias.ticketnumber"]).Value.ToString(); if (Assign.Get(executionContext)) { tracingService.Trace("processing assignment", ""); PickFromQueueRequest request = new PickFromQueueRequest(); request.RemoveQueueItem = RemoveFromQueue.Get(executionContext); request.QueueItemId = item.Id; request.WorkerId = User.Get(executionContext).Id; service.Execute(request); } } tracingService.Trace("setting outputs", ""); CaseId.Set(executionContext, caseId); CaseNumber.Set(executionContext, caseNumber); CaseTitle.Set(executionContext, caseTitle); CaseFound.Set(executionContext, caseFound); } catch (FaultException <OrganizationServiceFault> e) { tracingService.Trace("Exception: {0}", e.ToString()); // Handle the exception. throw; } catch (Exception e) { tracingService.Trace("Exception: {0}", e.ToString()); throw; } tracingService.Trace("Exiting " + _processName + ".Execute(), Correlation Id: {0}", context.CorrelationId); }
// // Summary: // Основная функция выделения объектов // // Parameters: // container: // // lastStage: public override void Process(AnalysisKit kit) { try { List <Participant> organizationReferents = new List <Participant>(); var analysisResult = _organizationProcessor.Process(kit.Sofa); var analyzerData = kit.GetAnalyzerData(this); //Ищем участников foreach (var organizationReferent in analysisResult.Entities.OfType <OrganizationReferent>().Where(x => !x.ToString().ToUpper().Contains(" СУД "))) { var participant = new Participant() { Name = organizationReferent.ToString() }; if (String.IsNullOrWhiteSpace(organizationReferent.INN) || String.IsNullOrWhiteSpace(organizationReferent.OGRN)) { foreach (var occurance in organizationReferent.Occurrence) { var tempParticipant = RecognizeParticipant(kit.Sofa.Text, occurance.BeginChar, occurance.EndChar, organizationReferent); if (!tempParticipant.Inn.NullOrEmpty() && participant.Inn.NullOrEmpty()) { participant.Inn = tempParticipant.Inn; } if (!tempParticipant.Ogrn.NullOrEmpty() && participant.Ogrn.NullOrEmpty()) { participant.Ogrn = tempParticipant.Ogrn; } } } else { participant = new Participant { Inn = organizationReferent.INN, Ogrn = organizationReferent.OGRN, Name = organizationReferent.ToString() }; } //Полученный участник может быть с такими же реквизатами, но с иным названием. Добавляем участника без реквизитов if (!organizationReferents.Any(x => x.Name.Equals(participant.Name))) { try { if (!participant.Inn.NullOrEmpty() && organizationReferents.Any(x => participant.Inn.Equals(x.Inn))) { participant.Inn = null; } if (!participant.Ogrn.NullOrEmpty() && organizationReferents.Any(x => participant.Ogrn.Equals(x.Ogrn))) { participant.Ogrn = null; } } catch (Exception e) { Console.WriteLine(e); throw; } } organizationReferents.Add(participant); } //Участники var participants = organizationReferents.Distinct(new OrganizationComparator()).ToList(); //Ищем контракты по датам List <Contract> contracts = new List <Contract>(); analysisResult = _dateProcessor.Process(kit.Sofa); foreach (var dateReferent in analysisResult.Entities.OfType <DateReferent>()) { if (dateReferent.Day > 0) { foreach (var occurance in dateReferent.Occurrence) { var start = occurance.BeginChar - 100 < 0 ? 0 : occurance.BeginChar - 100; var length = occurance.EndChar - occurance.BeginChar + 200; var str = ""; try { str = kit.Sofa.Text.Substring(start, kit.Sofa.Text.Length - start >= length ? length : kit.Sofa.Text.Length - start); } catch (Exception e) { Console.WriteLine(e); throw; } AnalysisKit analyzisKit = new AnalysisKit(new SourceOfAnalysis(str), true, MorphLang.RU) { Processor = ProcessorService.CreateEmptyProcessor() }; var numbers = ExtractionNumbers(analyzisKit.FirstToken).Distinct().ToList(); if (numbers.Count > 0) { foreach (var number in numbers) { var contract = contracts.FirstOrDefault(x => String.Equals(x.Number, number, StringComparison.InvariantCultureIgnoreCase)); if (contract == null) { var c = new Contract() { Number = number }; c.Dates.Add(dateReferent.Dt); contracts.Add(c); } else { contract.Dates.Add(dateReferent.Dt); } } break; } } } } //Пробуем выделить по слову контракт List <string> contractNumbers = new List <string>(); for (Token t = kit.FirstToken; t != null; t = t.Next) { //Ищем контракты TerminToken token = _terminCollection.TryParse(t, TerminParseAttr.No); if (token != null) { var str = kit.Sofa.Text.Substring(token.EndChar + 1, 100); AnalysisKit analyzisKit = new AnalysisKit(new SourceOfAnalysis(str), true, MorphLang.RU) { Processor = ProcessorService.CreateEmptyProcessor() }; var numbers = ExtractionNumbers(analyzisKit.FirstToken); if (numbers?.Count > 0) { contractNumbers.AddRange(numbers); } } } contractNumbers = contractNumbers.Distinct().ToList(); contracts.AddRange(contractNumbers.Select(x => new Contract() { Number = x, Dates = new List <DateTime?>() })); //Просто вычленяем все номера var resultNumbers = ExtractionNumbers(kit.FirstToken); analyzerData.RegisterReferent(new MyReferent(nameof(MyReferent)) { Contracts = contracts.Where(x => CaseNumber.Parse(x.Number).IsValid == false).ToList(), Participants = participants }); //Вывод в файл using (var streamWriter = new StreamWriter(Path.Combine("Results", GlobalState.File))) { streamWriter.WriteLine("Организации"); foreach (var participant in participants) { streamWriter.WriteLine( $"INN:{participant.Inn}\t OGRN:{participant.Ogrn}\t {participant.Name}"); } streamWriter.WriteLine(); streamWriter.WriteLine("Контракты после слова 'контракт'"); foreach (var contract in contractNumbers) { streamWriter.WriteLine($"{contract}"); } streamWriter.WriteLine(); streamWriter.WriteLine("Контракты рядом с датами "); foreach (var contract in contracts) { foreach (var date in contract.Dates) { streamWriter.WriteLine($"{contract.Number} {date}"); } } streamWriter.WriteLine(); streamWriter.WriteLine("Скорее всего нужные нам контракты (номера с датами входящие в номера по слову 'Контракт')".ToUpper()); var cs = contracts.Where(x => contractNumbers.Contains(x.Number)).ToList(); foreach (var contract in cs) { foreach (var date in contract.Dates) { streamWriter.WriteLine($"{contract.Number} {date}"); } } streamWriter.WriteLine(); streamWriter.WriteLine("Мусор"); streamWriter.WriteLine("Номера"); foreach (var contract in resultNumbers) { streamWriter.WriteLine($"{contract}"); } } } catch (Exception e) { Console.WriteLine(e); throw; } }