public async Task <ValidationResult <Document> > RetrieveDocumentByGuid(Guid documentGuid, string userId) { var validationResult = new ValidationResult <Document>(); // var workerId = await _workerBusinessService.RetrieveWorkerIdByUserId(userId); // if (workerId == 0) return validationResult.Error("No worker found for logged in user"); var document = await _documentDataService.RetrieveAsync <Entity.Document>(e => e.Guid == documentGuid); var result = _mapper.Map <IEnumerable <Document> >(document); return(validationResult.Success(result.FirstOrDefault(), "")); }
public async Task <ValidationResult <Document> > CreateDocument(Document document) { //Get Document var documentsResultData = await _documentDataService.RetrieveAsync <Data.Entities.DocumentDetail>(e => e.PersonnelId == document.PersonnelId && e.CategoryId == document.CategoryId); var documentsResult = _mapper.MapToList <DocumentDetail>(documentsResultData); //Delete Documents if (documentsResult.Count > 0) { await DeleteDocuments(documentsResult.ToList()); } //Create Documents var validationResult = new ValidationResult <Document>(); var newGuid = Guid.NewGuid(); var documentCategories = await this.RetrieveDocumentCategoriesAsync(); var category = documentCategories.FirstOrDefault(e => e.Name.ToLower() == document.Category.ToLower()); //check Category if (category == null) { return(validationResult.Error("Document category not found")); } var productData = _productDataService.RetrieveAll <Data.Entities.Product>(); var result = _mapper.MapToList <Product>(productData); var product = result.Single(p => p.Name.ToLower() == Product.ToLower()); if (product == null) { return(validationResult.Error("product not found")); } // this categoryFileName ensures uniqueness of file in folder and is critical var categoryFileName = string.Format("{0}_{1}_{2}", document.Category, newGuid, document.FileName); //check Category var basePath = product.UncPath; // sjp retain compatibility with existing DocumentService var personnelDirectory = CreatePersonnelDirectory(basePath, document.PersonnelName, document.PersonnelId); //check PersonnelName var categoryDirectory = Path.Combine(personnelDirectory, document.Category); //check Category var filePath = Path.Combine(categoryDirectory, categoryFileName); var documentDetail = new Data.Entities.DocumentDetail { DocumentGUID = newGuid, ProductId = product.ProductId, CategoryId = category.DocumentCategoryId, PersonnelId = document.PersonnelId, Description = document.Description, FileName = document.FileName, ClientFileName = document.ClientFileName, CreatedDateUTC = DateTime.UtcNow, CreatedBy = document.CreatedBy, RequireApproval = document.RequireApproval, UncPath = basePath, RelativePath = filePath.Replace(basePath, string.Empty), DocumentBatchId = document.DocumentBatchId, DownloadedDateUtc = document.DownloadedDateUtc, EmailSentDateUtc = document.EmailSentDateUtc }; Directory.CreateDirectory(categoryDirectory); if (document.Content != null) //check Content { File.WriteAllBytes(filePath, document.Content); //check Content } else if (!string.IsNullOrEmpty(document.ContentBase64)) //check ContentBase64 { byte[] content = Convert.FromBase64String(document.ContentBase64); //check ContentBase64 File.WriteAllBytes(filePath, content); } try { var entity = await _documentDataService.CreateGetAsync(documentDetail); validationResult.Entity = _mapper.Map <Document>(entity); validationResult.Succeeded = true; } catch (Exception ex) { validationResult.Succeeded = false; } return(validationResult); }