public ActionResult Submitted(int Id, string returl)
        {
            CustomDetail pd = new CustomDetailService(_unitOfWork).Find(Id);

            if (ModelState.IsValid)
            {
                ActivityLog al = new ActivityLog()
                {
                    ActivityType = (int)ActivityTypeContants.Submitted,
                    CreatedBy    = User.Identity.Name,
                    CreatedDate  = DateTime.Now,
                    DocId        = pd.CustomDetailId,
                    Narration    = "Packing no" + pd.DocNo + " submitted.",
                    DocTypeId    = new DocumentTypeService(_unitOfWork).FindByName(TransactionDocCategoryConstants.Packing).DocumentTypeId,
                };
                _ActivityLogService.Create(al);

                if (pd.Status == (int)StatusConstants.Modified)
                {
                    pd.Status = (int)StatusConstants.ModificationSubmitted;
                }
                else
                {
                    pd.Status = (int)StatusConstants.Submitted;
                }
                _CustomDetailService.Update(pd);
                _unitOfWork.Save();

                //SendEmail_PODrafted(Id);

                if (returl == "PTS")
                {
                    return(RedirectToAction("PendingToSubmit"));
                }
                else
                {
                    return(RedirectToAction("Index"));
                }
            }

            return(View());
        }
        public ActionResult Delete(ReasonViewModel vm)
        {
            if (ModelState.IsValid)
            {
                var DispatchWaybillHeader = _DispatchWaybillHeaderService.GetDispatchWaybillHeader(vm.id);

                ActivityLog al = new ActivityLog()
                {
                    ActivityType = (int)ActivityTypeContants.Deleted,
                    CreatedBy    = User.Identity.Name,
                    CreatedDate  = DateTime.Now,
                    DocId        = DispatchWaybillHeader.DispatchWaybillHeaderId,
                    UserRemark   = vm.Reason,
                    Narration    = "Sale Order is deleted with DocNo:" + DispatchWaybillHeader.DocNo,
                    DocTypeId    = new DocumentTypeService(_unitOfWork).FindByName(TransactionDocCategoryConstants.Packing).DocumentTypeId,
                    UploadDate   = DateTime.Now,
                };
                _ActivityLogService.Create(al);

                var dispatchwaybillline = new DispatchWaybillLineService(_unitOfWork).GetDispatchWaybillLineForHeaderId(vm.id);

                foreach (var item in dispatchwaybillline)
                {
                    new DispatchWaybillLineService(_unitOfWork).Delete(item.DispatchWaybillLineId);
                }

                new DispatchWaybillHeaderService(_unitOfWork).Delete(vm.id);

                try
                {
                    _unitOfWork.Save();
                }

                catch (Exception ex)
                {
                    string message = _exception.HandleException(ex);
                    ModelState.AddModelError("", message);
                    return(PartialView("_Reason", vm));
                }

                return(Json(new { success = true }));
            }
            return(PartialView("_Reason", vm));
        }
        public ActionResult CompleteSaleOrderCancelLine(SaleOrderCancelMasterDetailModel vm)
        {
            int SaleOrderCancelHeaderId = 0;

            if (ModelState.IsValid)
            {
                foreach (var item in vm.SaleOrderCancelViewModels)
                {
                    decimal balqty = (from p in db.ViewSaleOrderBalanceForCancellation
                                      where p.SaleOrderLineId == item.SaleOrderLineId
                                      select p.BalanceQty).FirstOrDefault();
                    if (balqty < item.Qty)
                    {
                        return(View(vm).Danger("Qty Exceeding Bal Qty"));
                    }
                    if (item.Qty > 0)
                    {
                        SaleOrderCancelLine line = new SaleOrderCancelLine();

                        line.SaleOrderCancelHeaderId = item.SaleOrderCancelHeaderId;
                        line.SaleOrderLineId         = item.SaleOrderLineId ?? 0;
                        line.Qty          = item.Qty;
                        line.CreatedDate  = DateTime.Now;
                        line.ModifiedDate = DateTime.Now;
                        line.CreatedBy    = User.Identity.Name;
                        line.ModifiedBy   = User.Identity.Name;
                        line.Remark       = item.LineRemark;

                        _SaleOrderCancelLineService.Create(line);
                    }
                    SaleOrderCancelHeaderId = item.SaleOrderCancelHeaderId;
                }
                //_unitOfWork.Save();

                SaleOrderCancelHeader header = new SaleOrderCancelHeaderService(_unitOfWork).Find(SaleOrderCancelHeaderId);

                if (header.Status != (int)StatusConstants.Drafted && header.Status != (int)StatusConstants.Import)
                {
                    header.Status = (int)StatusConstants.Submitted; header.ModifiedBy = User.Identity.Name; header.ModifiedDate = DateTime.Now;
                }

                //Activity Log
                ActivityLog al = new ActivityLog()
                {
                    ActivityType = (int)StatusConstants.Submitted,
                    DocId        = header.SaleOrderCancelHeaderId,
                    UserRemark   = header.Remark,
                    Narration    = "Sale Order Cancel Submitted with Cancel no:" + header.DocNo,
                    CreatedDate  = DateTime.Now,
                    CreatedBy    = User.Identity.Name,
                    DocTypeId    = header.DocTypeId,
                };

                new SaleOrderCancelHeaderService(_unitOfWork).Update(header);
                _ActivityLogService.Create(al);
                _unitOfWork.Save();

                return(RedirectToActionPermanent("Index", "SaleOrderCancelHeader"));
            }
            return(View(vm));
        }
        public IHttpActionResult ImportMultiChoices(ListQuestionMultiChoiceVM questions)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                string pattern = $"{questions.Course}-LO{{{{Order}}}}-Q";

                foreach (var quest in questions.Questions)
                {
                    string code = questions.Course;

                    LearningOutcome learningOutcome;
                    if (quest.LearningOutcomes == null || quest.LearningOutcomes.Count == 0)
                    {
                        learningOutcome = _learingOutcomeService.Find(_ => _.MainObjective.CourseCode == code &&
                                                                      _.MainObjective.Order == 0, _ => _.MainObjective);
                        quest.LearningOutcomes = new List <int> {
                            learningOutcome.Id
                        };
                    }
                    else
                    {
                        learningOutcome = _learingOutcomeService.Find(_ => _.MainObjective.CourseCode == code &&
                                                                      _.Order == quest.LearningOutcomes[0]);
                    }
                    IList <QuestionObjective> questionObjectives = new List <QuestionObjective>();
                    foreach (var lo in quest.LearningOutcomes)
                    {
                        foreach (var c in quest.Chapters)
                        {
                            questionObjectives.Add(new QuestionObjective
                            {
                                QuestionCode = quest.Code, LearningOutcomeId = lo, ChapterId = c
                            });
                        }
                    }

                    code  = pattern.Replace("{{Order}}", $"{learningOutcome.Order}");
                    code += _questionService.Search(_ => _.Code.Contains(code)).Count() + 1;

                    Question question = ModelBuilder.CreateQuestion(quest);
                    question.Code               = code;
                    question.CourseCode         = questions.Course;
                    question.IsExamQuestion     = true;
                    question.ImporterCode       = "test_khanhkt";
                    question.QuestionObjectives = questionObjectives;

                    question.Options = ModelBuilder.CreateOptions(quest.Options, question.Mark);
                    if (!_questionService.Create(question))
                    {
                        string data = JsonConvert.SerializeObject(quest);

                        _activitylogService.Create(new ActivityLog
                        {
                            CreatedDate = DateTimeOffset.Now,
                            Message     = data
                        });
                        ModelState.AddModelError
                            (string.Empty, $"'{data}' Failed To Import");
                    }
                }
                if (ModelState.Count > 0)
                {
                    return(BadRequest(ModelState));
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                _loggingService.Write(ex);
                return(InternalServerError(ex));
            }
        }