public RestAPIUpdateIntellectResponse UpdateIntellectual(InMemoryMultipartFormDataStreamProvider provider, int UserID)
        {
            RestAPIUpdateIntellectResponse updateIntellectualResponse = new RestAPIUpdateIntellectResponse()
            {
                Status = Success
            };

            UpdateIntellectualRequest updateIntellectual = provider.UpdateIntellectualRequest;

            updateIntellectual.UserID = UserID;

            try
            {
                if (provider.attachFileCount != 0)
                {
                    updateIntellectual.IsAttachment    = true;
                    updateIntellectual.AttachmentCount = provider.attachFileCount;
                }

                ideautils.UpdateIntellectProperty(updateIntellectualResponse, updateIntellectual);

                if (updateIntellectualResponse.ErrorList.Count != 0)
                {
                    updateIntellectualResponse.Status = Failure;
                }

                if (provider.UpdateIntellectualRequest.files.Count == 0)
                {
                    return(updateIntellectualResponse);
                }


                fileUtil.UploadIntellectualAttachmentAsync(updateIntellectualResponse, provider);

                if (updateIntellectualResponse.ErrorList.Count != 0)
                {
                    updateIntellectualResponse.Status = Failure;
                }
            }
            catch (Exception ex)
            {
                updateIntellectualResponse.Status = Failure;
                throw new Exception(ex.Message, ex);
            }

            return(updateIntellectualResponse);
        }
        public void UploadIntellectualAttachmentAsync(RestAPIUpdateIntellectResponse IntellectualAttachmentResponse, InMemoryMultipartFormDataStreamProvider dataStreamProvider)
        {
            IdeaIntellectualProperty  intellectualProperty = null;
            UpdateIntellectualRequest updateIntellectual   = dataStreamProvider.UpdateIntellectualRequest;

            dataStreamProvider.UpdateIntellectualRequest.ideaAttachments.ToList().ForEach((ideaAttachment) =>
            {
                ideaAttachment.IdeaId = updateIntellectual.IdeaId;
            });

            DatabaseWrapper.databaseOperation(response,
                                              (context, query) =>
            {
                intellectualProperty = query.GetIdeaIntellectualById(context, updateIntellectual.IntellectualId);
            }
                                              , readOnly: true
                                              );

            foreach (IdeaAttachmentRequest ideaAttachmentRequest in updateIntellectual.ideaAttachments)
            {
                string inputFileName = ideaAttachmentRequest.AttachedFileName;
                string folderpath    = UploadPath(ideaAttachmentRequest, intellectualProperty.IdeaId);
                string filepath      = Path.Combine(folderpath, inputFileName);
                logger.Info($"IntellectualAttachmentResponse==Folder path={folderpath}");


                if (IsS3Enable)
                {
                    UploadRequestToS3(folderpath, filepath, ideaAttachmentRequest.stream);
                }
                else
                {
                    SaveAttachments(ideaAttachmentRequest.stream, inputFileName, folderpath);
                }
            }
        }
        public void UpdateIntellectProperty(RestAPIUpdateIntellectResponse response, UpdateIntellectualRequest request)
        {
            DatabaseWrapper.databaseOperation(response,
                                              (context, query) =>
            {
                IdeaIntellectualProperty intellectualProperty = query.GetIdeaIntellectualById(context, request.IntellectualId);

                if (intellectualProperty != null)
                {
                    if (!string.IsNullOrEmpty(request.RecordId))
                    {
                        intellectualProperty.RecordId = request.RecordId;
                    }
                    if (request.Status.GetValueOrDefault(0) != 0)
                    {
                        intellectualProperty.Status = request.Status;
                    }
                    if (!string.IsNullOrEmpty(request.ApplicationNumber))
                    {
                        intellectualProperty.ApplicationNumber = request.ApplicationNumber;
                    }
                    if (!string.IsNullOrEmpty(request.PatentId))
                    {
                        intellectualProperty.PatentId = request.PatentId;
                    }
                    if (!string.IsNullOrEmpty(request.InventionReference))
                    {
                        intellectualProperty.InventionReference = request.InventionReference;
                    }
                    if (request.FiledDate.HasValue)
                    {
                        intellectualProperty.FiledDate = request.FiledDate;
                    }

                    intellectualProperty.ModifiedDate = DateTime.UtcNow;
                }
                else
                {
                    response.ErrorList.Add(Faults.IdeaIntellectNotFound);
                    response.Status = Failure;
                    return;
                }

                // insert idea intellectual attachment
                if (request.AttachmentCount != 0)
                {
                    request.ideaAttachments.ToList().ForEach((attachment) =>
                    {
                        IdeaAttachment ideaAttach   = new IdeaAttachment();
                        ideaAttach.IdeaId           = (int)intellectualProperty.IdeaId;
                        ideaAttach.AttachedFileName = attachment.AttachedFileName;
                        ideaAttach.FileExtention    = attachment.FileExtention;
                        ideaAttach.FileSizeInByte   = attachment.FileSizeInByte;
                        ideaAttach.CreatedDate      = DateTime.UtcNow;
                        ideaAttach.FolderName       = attachment.DocumentTypeFolderName;
                        intellectualProperty.IdeaAttachments.Add(ideaAttach);
                    });
                }

                intellectualProperty.AttachmentCount = intellectualProperty.IdeaAttachments.Count;
                intellectualProperty.IsAttachment    = intellectualProperty.IdeaAttachments.Count == 0 ? false : true;
                context.SubmitChanges();
                response.Status = Success;
            }
                                              , readOnly: false
                                              );

            if (response == null && response.ErrorList.Count != 0)
            {
                response.ErrorList.Add(Faults.ServerIsBusy);
            }
        }