public Response <DocumentPerformModel> ReCreate(int PerformId, RecreateDocumentPerformModel createModel)
 {
     try
     {
         using (var unitOfWork = new UnitOfWork())
         {
             DocumentPerform entity = unitOfWork.GetRepository <DocumentPerform>().GetById(PerformId);
             if (entity == null)
             {
                 return(new Response <DocumentPerformModel>(0, "Id is not valid", null));
             }
             if (entity.IsFinished == 1)
             {
                 return(new Response <DocumentPerformModel>(0, "thống nhất đã kết thúc rồi!", null));
             }
             if (entity.CreatedByUserId != createModel.UserId)
             {
                 return(new Response <DocumentPerformModel>(0, "Bạn không phải là tác giả", null));
             }
             //change message
             entity.Status         = 2;
             entity.Description    = createModel.Message;
             entity.FinishedOnDate = DateTime.Now.AddDays(createModel.ExtraDays);
             entity.UpdatedOnDate  = DateTime.Now;
             unitOfWork.GetRepository <DocumentPerform>().Update(entity);
             //delete responses
             foreach (var item in unitOfWork.GetRepository <QH_DocumentPerform_User>().GetMany(d => d.DocumentPerformId == PerformId))
             {
                 unitOfWork.GetRepository <QH_DocumentPerform_User>().Delete(item);
             }
             //update message
             var exsisted_mess = unitOfWork.GetRepository <TaskMessage>().GetMany(t => t.ModuleId == createModel.ModuleId && t.TaskType == (int)TaskType.PERFORM && t.RelatedId == PerformId);
             foreach (var item in exsisted_mess)
             {
                 unitOfWork.GetRepository <TaskMessage>().Delete(item);
             }
             //
             foreach (var item in entity.UserList.Split(','))
             {
                 int         user_id = Convert.ToInt32(item.Trim());
                 TaskMessage message = new TaskMessage
                 {
                     CreatedByUserId = entity.CreatedByUserId,
                     Deadline        = entity.FinishedOnDate,
                     TaskType        = (int)TaskType.PERFORM,
                     Title           = "Thống nhất lại: " + entity.Name,
                     UserId          = user_id,
                     CreatedOnDate   = DateTime.Now,
                     RelatedId       = entity.PerformId,
                     ModuleId        = entity.ModuleId
                 };
                 unitOfWork.GetRepository <TaskMessage>().Add(message);
             }
             //
             if (unitOfWork.Save() >= 1)
             {
                 return(GetById(entity.PerformId));
             }
             return(new Response <DocumentPerformModel>(0, "Saving data not successful!", null));
         }
     }
     catch (Exception ex)
     {
         return(new Response <DocumentPerformModel>(-1, ex.ToString(), null));
     }
 }
        public Response <DocumentPerformModel> Create(DocumentPerformCreateModel createModel)
        {
            try
            {
                using (var unitOfWork = new UnitOfWork())
                {
                    DocumentPerform entity = new DocumentPerform();
                    Ultis.TransferValues(entity, createModel);

                    entity.FinishedOnDate = createModel.FinishedOnDate;
                    entity.CreatedOnDate  = DateTime.Now;
                    entity.UpdatedOnDate  = DateTime.Now;
                    var last = unitOfWork.GetRepository <DocumentPerform>().GetAll().OrderByDescending(u => u.PerformId).FirstOrDefault();
                    if (last != null)
                    {
                        entity.PerformId = last.PerformId + 1;
                    }
                    else
                    {
                        entity.PerformId = 1;
                    }
                    unitOfWork.GetRepository <DocumentPerform>().Add(entity);
                    foreach (var item in createModel.UserList.Split(','))
                    {
                        int         user_id = Convert.ToInt32(item.Trim());
                        TaskMessage message = new TaskMessage
                        {
                            CreatedByUserId = createModel.CreatedByUserId,
                            Deadline        = createModel.FinishedOnDate,
                            TaskType        = (int)TaskType.PERFORM,
                            Title           = createModel.Name,
                            UserId          = user_id,
                            CreatedOnDate   = DateTime.Now,
                            RelatedId       = entity.PerformId,
                            ModuleId        = createModel.ModuleId
                        };
                        unitOfWork.GetRepository <TaskMessage>().Add(message);
                    }
                    //

                    var tmp = unitOfWork.GetRepository <DocumentProcess>().Get(d => d.Id == createModel.ProcessId && d.TaskType == createModel.TaskType);
                    if (tmp == null)
                    {
                        return(new Response <DocumentPerformModel>(0, "Bạn chưa tạo tiến trình xử lý cho tài liệu này", null));
                    }
                    tmp.Status    = (int)DocumentProcessStatus.INPROCESS;
                    tmp.RelatedId = entity.PerformId;
                    unitOfWork.GetRepository <DocumentProcess>().Update(tmp);

                    if (unitOfWork.Save() >= 1)
                    {
                        return(GetById(entity.PerformId));
                    }
                    return(new Response <DocumentPerformModel>(0, "Saving data not successful!", null));
                }
            }
            catch (Exception ex)
            {
                return(new Response <DocumentPerformModel>(-1, ex.ToString(), null));
            }
        }