Example #1
0
        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);
        }
Example #2
0
        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;
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        /// <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);
        }
Example #5
0
        //
        // 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;
            }
        }