Exemple #1
0
        /// <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));
        }