/// <summary> /// Register checking instrument.<br /> /// - Check system suspending.<br /> /// - Check implement stock checking.<br /> /// - Insert checking slip.<br /> /// - Generate report. /// </summary> /// <param name="gridCurrentPage"></param> /// <param name="checkingDate"></param> /// <returns></returns> public ActionResult IVS160_Confirm() { string strInventorySlipNo = string.Empty; string slipNoReportPath = string.Empty; ObjectResultData res = new ObjectResultData(); try { IVS160_ScreenParameter param = GetScreenObject <IVS160_ScreenParameter>(); int iTotalItem = 0; int iTotalPage = 0; if (param.DetailList != null) { if (param.DetailList.Count > 0) { iTotalItem = param.DetailList == null ? 0 : param.DetailList.Count; iTotalPage = param.DetailList == null ? 0 : param.DetailList.Max(m => m.Page); } } if (param.DetailList == null) { param.DetailList = new List <tbt_InventoryCheckingSlipDetail>(); param.CurrentPage = 1; } if (param.DetailList_ForView == null) { param.DetailList_ForView = new List <dtCheckingDetailList>(); } // Is suspend ? ICommonHandler handlerCommon = ServiceContainer.GetService <ICommonHandler>() as ICommonHandler; if (handlerCommon.IsSystemSuspending()) { res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0049); return(Json(res)); } IInventoryHandler handlerInventory = ServiceContainer.GetService <IInventoryHandler>() as IInventoryHandler; // Check for the implement stock checkint if (handlerInventory.CheckImplementStockChecking() == 0) { res.AddErrorMessage(MessageUtil.MODULE_INVENTORY, MessageUtil.MessageList.MSG4003); return(Json(res)); } ILogHandler handlerLog = ServiceContainer.GetService <ILogHandler>() as ILogHandler; IInventoryDocumentHandler handlerInventoryDocument = ServiceContainer.GetService <IInventoryDocumentHandler>() as IInventoryDocumentHandler; if (param.DetailList.Count > 0) { // TODO: (Narupon) Uncomment for use TransactionScope // Save data to database.. using (TransactionScope scope = new TransactionScope()) { strInventorySlipNo = handlerInventory.GenerateInventorySlipNo(param.OfficeCode, SlipID.C_INV_SLIPID_CHEKCING_INSTRUMENT); param.SlipNo = strInventorySlipNo; // Save header ... List <tbt_InventoryCheckingSlip> header = new List <tbt_InventoryCheckingSlip>(); tbt_InventoryCheckingSlip headerItem = new tbt_InventoryCheckingSlip() { SlipNo = strInventorySlipNo, SlipStatus = InventoryCheckingSlipStatus.C_INV_SLIP_STATUS_CHECKING, CheckingYearMonth = param.CheckingYearMonth, CheckingStartDate = param.CheckingDate, LocationCode = param.LocationCode, OfficeCode = param.OfficeCode, CreateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime, CreateBy = CommonUtil.dsTransData.dtUserData.EmpNo, UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime, UpdateBy = CommonUtil.dsTransData.dtUserData.EmpNo }; header.Add(headerItem); List <tbt_InventoryCheckingSlip> headerSavedResult = handlerInventory.InsertTbt_InventoryCheckingSlip(header); // Save detail.. var lstLatestSlip = handlerInventory.GetCheckingDetailList(new doGetCheckingDetailList() { CheckingYearMonth = param.CheckingYearMonth, OfficeCode = param.OfficeCode, LocationCode = param.LocationCode, AreaCode = param.AreaCode, }); List <tbt_InventoryCheckingSlipDetail> lstUpdatingDetail = new List <tbt_InventoryCheckingSlipDetail>(); foreach (var item in lstLatestSlip) { tbt_InventoryCheckingSlipDetail newRowItem = new tbt_InventoryCheckingSlipDetail() { SlipNo = strInventorySlipNo, InstrumentCode = item.InstrumentCode, RunningNoInSlip = item.RunningNoInSlip, AreaCode = item.AreaCode, ShelfNo = item.ShelfNo, StockQty = item.StockQty, CheckingQty = item.CheckingQty, DefaultCheckingQty = item.CheckingQty, AddFlag = item.AddFlag, CreateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime, CreateBy = CommonUtil.dsTransData.dtUserData.EmpNo, UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime, UpdateBy = CommonUtil.dsTransData.dtUserData.EmpNo }; lstUpdatingDetail.Add(newRowItem); } ; foreach (var newdetail in param.DetailList.Where(d => d.DefaultCheckingQty != d.CheckingQty)) { var editdetail = lstUpdatingDetail.Where(d => d.key == newdetail.key).FirstOrDefault(); if (editdetail == null) { newdetail.SlipNo = strInventorySlipNo; newdetail.RunningNoInSlip = lstUpdatingDetail.Max(d => d.RunningNoInSlip) + 1; lstUpdatingDetail.Add(newdetail); } else { editdetail.CheckingQty = newdetail.CheckingQty; } } List <tbt_InventoryCheckingSlipDetail> detailSavedResult = handlerInventory.InsertTbt_InventoryCheckingSlipDetail(lstUpdatingDetail); // Generate report ... // C_INV_REPORT_ID_CHECKING_INSTRUMENT_RESULT = IVR110 slipNoReportPath = handlerInventoryDocument.GenerateIVR110FilePath(strInventorySlipNo, param.OfficeCode, CommonUtil.dsTransData.dtUserData.EmpNo, CommonUtil.dsTransData.dtOperationData.ProcessDateTime); param.SlipNoReportPath = slipNoReportPath; scope.Complete(); // Commit transtion. } // TODO: (Narupon) Uncomment for use TransactionScope res.ResultData = strInventorySlipNo; } } catch (Exception ex) { res.AddErrorMessage(ex); return(Json(res)); } return(Json(res)); }