public ActionResult Create()
        {
            MiscellaneousTransactionModel model = SessionHelper.MiscellaneousTransaction;
            if (model == null)
            {
                model = new MiscellaneousTransactionModel();
                model = new MiscellaneousTransactionModel
                {
                    SOBId = SessionHelper.SOBId,
                    CodeCombination = getCodeCombinationList(SessionHelper.SOBId),
                    CompanyId = AuthenticationHelper.CompanyId.Value,
                    TransactionDate = DateTime.Now
                };
                model.CodeCombinationId = model.CodeCombination != null && model.CodeCombination.Count > 0 ? Convert.ToInt64(model.CodeCombination.FirstOrDefault().Value) : 0;
                model.CodeCombinationString = model.CodeCombination != null && model.CodeCombination.Count > 0 ? model.CodeCombination.FirstOrDefault().Text : "";
                ViewBag.SOBName = SetOfBookHelper.GetSetOfBook(SessionHelper.SOBId.ToString()).Name;

                SessionHelper.MiscellaneousTransaction = model;
                if (SessionHelper.MiscellaneousTransaction.MiscellaneousTransactionDetail == null)
                    SessionHelper.MiscellaneousTransaction.MiscellaneousTransactionDetail = new List<MiscellaneousTransactionDetailModel>();
            }
            else
                model.CodeCombination = getCodeCombinationList(SessionHelper.SOBId);
            
            return View(model);
        }
 public static MiscellaneousTransactionModel GetMiscellaneousTransaction(string id)
 {
     MiscellaneousTransactionModel model = new MiscellaneousTransactionModel(service.GetSingle(id, AuthenticationHelper.CompanyId.Value));
     return model;
 }
        public ActionResult Save(MiscellaneousTransactionModel model)
        {
            string message = "";
            try
            {
                bool saved = false;
                if (SessionHelper.MiscellaneousTransaction != null)
                {
                    SessionHelper.MiscellaneousTransaction.CodeCombinationId = model.CodeCombinationId;
                    SessionHelper.MiscellaneousTransaction.CompanyId = model.CompanyId;
                    SessionHelper.MiscellaneousTransaction.Id = model.Id;
                    SessionHelper.MiscellaneousTransaction.SOBId = SessionHelper.SOBId;
                    SessionHelper.MiscellaneousTransaction.TransactionDate = model.TransactionDate;
                    SessionHelper.MiscellaneousTransaction.TransactionType = model.TransactionType;

                    //Setting the parent fields..
                    foreach (var item in SessionHelper.MiscellaneousTransaction.MiscellaneousTransactionDetail)
                    {
                        item.TransactionType = model.TransactionType;
                        item.CodeCombinationId = model.CodeCombinationId;
                        item.CompanyId = AuthenticationHelper.CompanyId.Value;
                        item.SOBId = SessionHelper.SOBId;
                        item.TransactionDate = model.TransactionDate;
                    }

                    MiscellaneousTransactionHelper.Save(SessionHelper.MiscellaneousTransaction);
                    SessionHelper.MiscellaneousTransaction = null;
                    saved = true;

                }
                else
                    message = "No Miscellaneous Transaction information available!";
                return Json(new { success = saved, message = message });
            }
            catch (Exception e)
            {
                message = e.Message;
                return Json(new { success = false, message = message });
            }
        }
        public static void Save(MiscellaneousTransactionModel miscellaneousTransactionModel)
        {
            var savedDetail = getMiscellaneousTransaction(miscellaneousTransactionModel.SOBId, miscellaneousTransactionModel.TransactionType, miscellaneousTransactionModel.CodeCombinationId, miscellaneousTransactionModel.TransactionDate);
            if (SessionHelper.MiscellaneousTransaction != null)
            {
                if (savedDetail.Count() > miscellaneousTransactionModel.MiscellaneousTransactionDetail.Count())
                {
                    var tobeDeleted = savedDetail.Take(savedDetail.Count() - miscellaneousTransactionModel.MiscellaneousTransactionDetail.Count());
                    foreach (var item in tobeDeleted)
                    {
                        service.Delete(item.Id.ToString(), AuthenticationHelper.CompanyId.Value);
                        IEnumerable<LotNumber> lotNum = lotNumService.CheckLotNumAvailability(AuthenticationHelper.CompanyId.Value, item.LotNo, item.ItemId, SessionHelper.SOBId);
                        if (lotNum.Any())
                        {
                            LotNumberHelper.Delete(lotNum.FirstOrDefault().Id.ToString());
                        }

                        //IEnumerable<SerialNumber> serialNum = lotNumService.CheckSerialNumAvailability(AuthenticationHelper.CompanyId.Value, item.LotNo, item.SerialNo);
                        //if (serialNum.Any())
                        //{
                        //    LotNumberHelper.DeleteSerialNumber(serialNum.FirstOrDefault().Id.ToString());
                        //}
                    }
                    savedDetail = getMiscellaneousTransaction(miscellaneousTransactionModel.SOBId, miscellaneousTransactionModel.TransactionType, miscellaneousTransactionModel.CodeCombinationId, miscellaneousTransactionModel.TransactionDate);
                }

                foreach (var detail in miscellaneousTransactionModel.MiscellaneousTransactionDetail)
                {
                    MiscellaneousTransaction detailEntity = GetEntityByModel(detail, savedDetail.Count());
                    if (detailEntity.IsValid())
                    {
                        if (savedDetail.Count() > 0)
                        {
                            detailEntity.Id = savedDetail.FirstOrDefault().Id;
                            savedDetail.Remove(savedDetail.FirstOrDefault(rec => rec.Id == detailEntity.Id));
                            service.Update(detailEntity);
                            IEnumerable<LotNumber> lotNum = lotNumService.CheckLotNumAvailability(AuthenticationHelper.CompanyId.Value, detailEntity.LotNo, detailEntity.ItemId, SessionHelper.SOBId);
                            if (lotNum.Any())
                            {
                                LotNumberHelper.Update(lotNum.FirstOrDefault());
                            }

                            //IEnumerable<SerialNumber> serialNum = lotNumService.CheckSerialNumAvailability(AuthenticationHelper.CompanyId.Value, detailEntity.LotNo, detailEntity.SerialNo);
                            //if (serialNum.Any())
                            //{
                            //    LotNumberHelper.UpdateSerialNumber(serialNum.FirstOrDefault());
                            //}
                        }
                        else
                        {
                            service.Insert(detailEntity);
                            IEnumerable<LotNumber> lotNum = lotNumService.CheckLotNumAvailability(AuthenticationHelper.CompanyId.Value, detailEntity.LotNo, detailEntity.ItemId, SessionHelper.SOBId);
                            if (!lotNum.Any())
                            {
                                LotNumberHelper.Insert(new MiscellaneousTransactionDetailModel(detailEntity));
                            }

                            //IEnumerable<SerialNumber> serialNum = lotNumService.CheckSerialNumAvailability(AuthenticationHelper.CompanyId.Value, detailEntity.LotNo, detailEntity.SerialNo);
                            //if (!serialNum.Any())
                            //{
                            //    LotNumberHelper.InsertSerialNumber(new MiscellaneousTransactionDetailModel(detailEntity));
                            //}
                        }
                    }
                }
            }
        }