public static DocumentToProcessPersistenceModel AsPersistenceModel(this DocumentToProcess document) { return(new DocumentToProcessPersistenceModel { Id = document.Id, RequesterIdentifier = document.RequesterIdentifier, TemplateDefinitionIdentifier = document.TemplateDefinition.Id, }); }
public virtual void Update(PickupListEntity entity, List <string> AssignedModuleIds, List <string> AssignedTruckIds) { var idsToDelete = new List <string>(); //need to ensure modules removed from pickup list are removed from cloud var modulesToRemove = new List <ModuleEntity>(); foreach (var deletedModule in entity.AssignedModules.Where(x => !AssignedModuleIds.Contains(x.Id))) { if (!_context.DocumentsToProcess.Any(i => i.Id == entity.Id)) { DocumentToProcess p = new DocumentToProcess(); p.EntityType = EntityType.MODULE; p.Source = InputSource.GIN; p.SelfLink = ""; p.Name = deletedModule.Name; p.Id = deletedModule.Id; p.Action = ProcessingAction.DELETE; _context.DocumentsToProcess.Add(p); modulesToRemove.Add(deletedModule); } } entity.Updated = DateTime.UtcNow; entity.SyncedToCloud = false; entity.AssignedTrucks.Clear(); //remove modules no longer on list foreach (var module in modulesToRemove) { entity.AssignedModules.Remove(module); } var modulesAlreadyOnList = new List <ModuleEntity>(); var moduleIdsToAdd = new List <string>(); foreach (var updatedModule in entity.AssignedModules.Where(x => AssignedModuleIds.Contains(x.Id))) { modulesAlreadyOnList.Add(updatedModule); } //add modules that have been added to list foreach (var moduleId in AssignedModuleIds.Where(id => !entity.AssignedModules.Any(x => x.Id == id))) { moduleIdsToAdd.Add(moduleId); } var modulesToAdd = _context.Modules.Where(m => moduleIdsToAdd.Contains(m.Id)).ToList(); modulesToAdd.ForEach(x => x.SyncedToCloud = false); entity.AssignedModules.AddRange(modulesToAdd); entity.AssignedTrucks.AddRange(_context.Truck.Where(t => AssignedTruckIds.Contains(t.Id))); }
private void ProcessPage(OrderedBitmap page, IActorRef senderRef, DocumentToProcess document) { senderRef.Tell(new DocumentPageProcessingStarted(document.Id, (int)page.Order)); var pageDefinition = document.TemplateDefinition.DefinedPages[(int)page.Order]; //Extracting from input only parts that are handwritten elements (ie. delta between empty document and filled by hand document) var extractedParts = _imagePreparationSteps.HandwrittenInputExtractor.ExtractHandwrittenInput(page.Bitmap, pageDefinition); //And cropping them according to defined template var croppingResult = _imagePreparationSteps.TemplateAreasCropper.CropUserInput(extractedParts.Result, document.Id, pageDefinition); //Processed parts var processedTextAreas = new List <RecognizedTextPart>(); var processedChoiceAreas = new List <RecognizedChoicePart>(); foreach (var croppedPart in croppingResult.Result) { senderRef.Tell(new DocumentPageAreaProcessingStarted(document.Id, (int)page.Order, croppedPart.AreaUsedForCropping.AreaName)); var cleanResult = _imagePreparationSteps.CroppedAreaCleaner.CleanUp(croppedPart).Result; var roiExtractResult = _imagePreparationSteps.RegionOfInterestExtractor.ExtractRegionOfInterestFrom(cleanResult).Result; //Choice part, ie. checkbox on paper if (croppedPart.AreaUsedForCropping.ExpectedData == TemplatePartExpectedDataType.Choice) { processedChoiceAreas.Add(RecognizeChoicePart(page, senderRef, document, croppedPart, roiExtractResult)); } //Text part, ie. field to fill with name/surname/personal id etc. else { var downscaleResult = _imagePreparationSteps.CroppedAreaScaler.ScaleAndFlatten(roiExtractResult).Result; processedTextAreas.Add(RecognizeTextPart(page, senderRef, document, croppedPart, downscaleResult)); } } var processedPage = new ProcessedDocumentPage(processedTextAreas, processedChoiceAreas, (int)page.Order); var savePageResult = _saveProcessedPageHandler.Handle(processedPage.AsSaveCommand()); if (savePageResult.Successful) { senderRef.Tell(new DocumentPageProcessingCompleted(document.Id, processedPage)); } //TODO: Create failure communication, ie. selfRef.Tell(new Failure()) else { Console.WriteLine("Failed to save recognized parts for page: " + page.Order + "of document: " + document.Id); } }
private RecognizedTextPart RecognizeTextPart(OrderedBitmap page, IActorRef selfRef, DocumentToProcess document, ICroppedArea croppedPart, FlattenedCroppedArea downscaleResult) { var recognitionResult = _handwrittenInputRecognizer.RecognizeFrom(downscaleResult).Result; recognitionResult.AreaName = croppedPart.AreaUsedForCropping.AreaName; selfRef.Tell(new DocumentPageTextAreaProcessingCompleted(document.Id, (int)page.Order, croppedPart.AreaUsedForCropping.AreaName, recognitionResult)); return(recognitionResult as RecognizedTextPart); }
private RecognizedChoicePart RecognizeChoicePart(OrderedBitmap page, IActorRef senderRef, DocumentToProcess document, ICroppedArea croppedPart, ICroppedArea roiExtractResult) { var recognitionResult = _handwrittenChoiceRecognizer.RecognizeFrom(roiExtractResult).Result as RecognizedChoicePart; recognitionResult.AreaName = croppedPart.AreaUsedForCropping.AreaName; senderRef.Tell(new DocumentPageChoiceAreaProcessingCompleted(document.Id, (int)page.Order, croppedPart.AreaUsedForCropping.AreaName, recognitionResult)); return(recognitionResult); }