Esempio n. 1
0
        /// <summary>
        /// Register receiving returned instrument
        /// </summary>
        /// <param name="Con">Register condition object</param>
        /// <returns></returns>
        public ActionResult IVS030_cmdConfirm_Cont(IVS030ConfirmCond Con)
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                IVS030_ScreenParameter prm = GetScreenObject <IVS030_ScreenParameter>();
                if (prm.ElemInstrument == null)
                {
                    prm.ElemInstrument = new List <IVS030INST>();
                }

                IInventoryHandler    InvH     = ServiceContainer.GetService <IInventoryHandler>() as IInventoryHandler;
                IInstallationHandler InstallH = ServiceContainer.GetService <IInstallationHandler>() as IInstallationHandler;
                ICommonHandler       comh     = ServiceContainer.GetService <ICommonHandler>() as ICommonHandler;

                if (comh.IsSystemSuspending())
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0049);
                    return(Json(res));
                }
                if (!CheckUserPermission(ScreenID.C_INV_SCREEN_ID_RECEIVE_RETURN, FunctionID.C_FUNC_ID_OPERATE))
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0053);
                    return(Json(res));
                }

                //4.6
                using (TransactionScope scope = new TransactionScope())
                {
                    List <tbt_InventorySlip> doTbt_InventorySlipForUpdate = null;

                    //Comment by Jutarat A. on 11022013 (Move to check before 4.8.1)
                    ////4.7.1
                    //if (!string.IsNullOrEmpty(prm.ContractCode) && prm.ServiceTypeCode == ServiceType.C_SERVICE_TYPE_SALE)
                    //{
                    //    //4.7.1.1
                    //    bool blnProcessStatus = InstallH.ReceiveReturnInstrument(prm.SlipNo, prm.office.OfficeCode);

                    //    //4.7.1.2
                    //    if (!blnProcessStatus)
                    //    {
                    //        //Rollback
                    //        return Json(res);
                    //    }

                    //    //4.7.1.3
                    //    res.ResultData = MessageUtil.GetMessage(MessageUtil.MODULE_INVENTORY, MessageUtil.MessageList.MSG4019);
                    //    return Json(res);
                    //}
                    //End Comment

                    //4.7.1
                    if (!string.IsNullOrEmpty(prm.ContractCode))
                    {
                        doTbt_InventorySlipForUpdate = InvH.GetTbt_InventorySlipForReceiveReturn(prm.SlipNo);
                    }
                    else
                    {
                        List <tbt_InventorySlip> doTbt_InventorySlip = InvH.GetTbt_InventorySlip(prm.SlipNo);

                        doTbt_InventorySlipForUpdate = new List <tbt_InventorySlip>();
                        doTbt_InventorySlipForUpdate.AddRange(doTbt_InventorySlip);
                    }

                    if (doTbt_InventorySlipForUpdate == null)
                    {
                        doTbt_InventorySlipForUpdate = new List <tbt_InventorySlip>();
                    }


                    //Add by Jutarat A. on 11022013 (Move to check before 4.8.1)
                    //4.7.2
                    if (!string.IsNullOrEmpty(prm.ContractCode) && prm.ServiceTypeCode == ServiceType.C_SERVICE_TYPE_SALE &&
                        (doTbt_InventorySlipForUpdate != null && doTbt_InventorySlipForUpdate.Count > 0 &&
                         doTbt_InventorySlipForUpdate[0].SourceLocationCode != InstrumentLocation.C_INV_LOC_WIP &&
                         doTbt_InventorySlipForUpdate[0].SourceLocationCode != InstrumentLocation.C_INV_LOC_PARTIAL_OUT))
                    {
                        //4.7.2.1
                        bool blnProcessStatus = InstallH.ReceiveReturnInstrument(prm.SlipNo, prm.office.OfficeCode);

                        //4.7.2.2
                        if (!blnProcessStatus)
                        {
                            //Rollback
                            return(Json(res));
                        }

                        //4.7.2.3
                        scope.Complete(); //Add by Jutarat A. on 11022013 (Commit)

                        res.ResultData = MessageUtil.GetMessage(MessageUtil.MODULE_INVENTORY, MessageUtil.MessageList.MSG4019);
                        return(Json(res));
                    }
                    //End Add

                    //4.8.1
                    foreach (tbt_InventorySlip i in doTbt_InventorySlipForUpdate)
                    {
                        //4.8.2.1
                        if (i.DestinationLocationCode == InstrumentLocation.C_INV_LOC_ELIMINATION)
                        {
                            List <tbt_InventorySlip> lstUpdateSlip = InvH.GetTbt_InventorySlip(i.SlipNo);
                            if (lstUpdateSlip.Count > 0)
                            {
                                lstUpdateSlip[0].SlipStatus = InventorySlipStatus.C_INV_SLIP_STATUS_COMPLETE;
                                if (!string.IsNullOrEmpty(prm.Memo))
                                {
                                    lstUpdateSlip[0].Memo = prm.Memo;
                                }
                                if (!string.IsNullOrEmpty(prm.ApproveNo))
                                {
                                    lstUpdateSlip[0].ApproveNo = prm.ApproveNo;
                                }
                                lstUpdateSlip[0].StockInDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;

                                //Comment by Jutarat A. on 30052013 (Set at UpdateTbt_InventorySlip())
                                //lstUpdateSlip[0].UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                                //lstUpdateSlip[0].UpdateBy = CommonUtil.dsTransData.dtUserData.EmpNo;
                                //End Comment

                                List <tbt_InventorySlip> doTbt_InventorySlip = InvH.UpdateTbt_InventorySlip(lstUpdateSlip);

                                if (doTbt_InventorySlip == null || doTbt_InventorySlip.Count <= 0)
                                {
                                    //Rollback
                                    return(Json(res));
                                }
                            }
                        }
                        else
                        {
                            //4.8.2.2
                            bool blnProcessUpdate = InvH.RegisterReceiveInstrument(i.SlipNo, prm.Memo, prm.ApproveNo);
                            if (!blnProcessUpdate)
                            {
                                //Rollback
                                return(Json(res));
                            }
                        }
                    }

                    string strSourceLocationCode = string.Empty;

                    //4.9
                    foreach (tbt_InventorySlip i in doTbt_InventorySlipForUpdate)
                    {
                        //4.9.1
                        if (i.DestinationLocationCode == InstrumentLocation.C_INV_LOC_ELIMINATION)
                        {
                            continue;
                        }

                        //4.9.2
                        if (i.SourceLocationCode == InstrumentLocation.C_INV_LOC_UNOPERATED_WIP ||
                            i.SourceLocationCode == InstrumentLocation.C_INV_LOC_WIP ||
                            i.SourceLocationCode == InstrumentLocation.C_INV_LOC_PROJECT_WIP ||
                            i.SourceLocationCode == InstrumentLocation.C_INV_LOC_PARTIAL_OUT    // New WIP concept @ 24-Feb-2015
                            )
                        {
                            strSourceLocationCode = InstrumentLocation.C_INV_LOC_WAITING_RETURN;
                        }
                        else
                        {
                            strSourceLocationCode = InstrumentLocation.C_INV_LOC_RETURN_WIP;
                        }

                        //4.9.3
                        if (InvH.CheckNewInstrument(i.SlipNo) == 1)
                        {
                            //4.9.3.1
                            List <doGroupNewInstrument> doGroupNewInstrument = InvH.GetGroupNewInstrument(i.SlipNo);

                            foreach (doGroupNewInstrument groupNewIns in doGroupNewInstrument)
                            {
                                //4.9.3.2
                                groupNewIns.SourceLocationCode = strSourceLocationCode;

                                //4.9.3.3
                                #region Monthly Price @ 2015
                                //decimal decMovingAveragePrice = InvH.CalculateMovingAveragePrice(groupNewIns);
                                var decMovingAveragePrice = InvH.GetMonthlyAveragePrice(groupNewIns.Instrumentcode, i.SlipIssueDate, InventoryAccountCode.C_INV_ACCOUNT_CODE_INPROCESS, SECOM_AJIS.Common.Util.ConstantValue.CurrencyUtil.C_CURRENCY_LOCAL, SECOM_AJIS.Common.Util.ConstantValue.CurrencyUtil.C_CURRENCY_US);
                                #endregion

                                int? intReturnInprocess;                                                                                                                 // New WIP concept @ 24-Feb-2015
                                bool blnUpdate = InvH.UpdateAccountTransferNewInstrument(groupNewIns, Convert.ToDecimal(decMovingAveragePrice), out intReturnInprocess); // New WIP concept @ 24-Feb-2015

                                if (!blnUpdate)
                                {
                                    //Rollback
                                    return(Json(res));
                                }

                                #region // New WIP concept @ 24-Feb-2015
                                if ((intReturnInprocess ?? 0) > 0)
                                {
                                    List <tbt_AccountInprocess> accountInProcessList = InvH.GetTbt_AccountInProcess(
                                        groupNewIns.SourceLocationCode
                                        , groupNewIns.ContractCode ?? groupNewIns.ProjectCode
                                        , groupNewIns.Instrumentcode
                                        );
                                    tbt_AccountStockMoving accountStockMoving = new tbt_AccountStockMoving();
                                    accountStockMoving.SlipNo                      = i.SlipNo;
                                    accountStockMoving.TransferTypeCode            = i.TransferTypeCode;
                                    accountStockMoving.SourceAccountStockCode      = InventoryAccountCode.C_INV_ACCOUNT_CODE_INPROCESS;
                                    accountStockMoving.DestinationAccountStockCode = InventoryAccountCode.C_INV_ACCOUNT_CODE_INSTOCK;
                                    accountStockMoving.SourceLocationCode          = groupNewIns.SourceLocationCode;
                                    accountStockMoving.DestinationLocationCode     = groupNewIns.DestinationLocationCode;
                                    accountStockMoving.InstrumentCode              = groupNewIns.Instrumentcode;
                                    accountStockMoving.InstrumentQty               = intReturnInprocess;
                                    if (accountInProcessList.Count != 0)
                                    {
                                        accountStockMoving.InstrumentPrice = accountInProcessList[0].MovingAveragePrice.Value;
                                    }
                                    accountStockMoving.CreateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                                    accountStockMoving.CreateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
                                    accountStockMoving.UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                                    accountStockMoving.UpdateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
                                    List <tbt_AccountStockMoving> targetAccountStockMovingList = new List <tbt_AccountStockMoving>();
                                    targetAccountStockMovingList.Add(accountStockMoving);
                                    List <tbt_AccountStockMoving> resultAccountStockMovingList = InvH.InsertAccountStockMoving(targetAccountStockMovingList);
                                    if (resultAccountStockMovingList.Count <= 0)
                                    {
                                        throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0148, new string[] { TableName.C_TBL_NAME_INV_ACC_STOCK_MOVING });
                                    } //end if/else
                                }
                                #endregion
                            }
                        }

                        //4.9.4
                        if (InvH.CheckSecondhandInstrument(i.SlipNo) == 1)
                        {
                            //4.9.4.1
                            List <doGroupSecondhandInstrument> doGroupSecondhandInstrument = InvH.GetGroupSecondhandInstrument(i.SlipNo);

                            //4.9.4.2
                            foreach (doGroupSecondhandInstrument doGroupSecond in doGroupSecondhandInstrument)
                            {
                                doGroupSecond.SourceLocationCode = strSourceLocationCode;

                                bool blnUpdate = InvH.UpdateAccountTransferSecondhandInstrument(doGroupSecond);

                                if (!blnUpdate)
                                {
                                    //Rollback
                                    return(Json(res));
                                }
                            }
                        }

                        //4.9.5
                        if (InvH.CheckSampleInstrument(i.SlipNo) == 1)
                        {
                            //4.9.5.1
                            List <doGroupSampleInstrument> doGroupSampleInstrument = InvH.GetGroupSampleInstrument(i.SlipNo);

                            //4.9.5.2
                            foreach (doGroupSampleInstrument dogroupSample in doGroupSampleInstrument)
                            {
                                dogroupSample.SourceLocationCode = strSourceLocationCode;

                                int? intReturnInprocess;                                                                                  // New WIP concept @ 24-Feb-2015
                                bool blnUpdate = InvH.UpdateAccountTransferSampleInstrument(dogroupSample, null, out intReturnInprocess); // New WIP concept @ 24-Feb-2015

                                if (!blnUpdate)
                                {
                                    //Rollback
                                    return(Json(res));
                                }

                                #region // New WIP concept @ 24-Feb-2015
                                if ((intReturnInprocess ?? 0) > 0)
                                {
                                    tbt_AccountStockMoving accountStockMoving = new tbt_AccountStockMoving();
                                    accountStockMoving.SlipNo                      = i.SlipNo;
                                    accountStockMoving.TransferTypeCode            = i.TransferTypeCode;
                                    accountStockMoving.SourceAccountStockCode      = InventoryAccountCode.C_INV_ACCOUNT_CODE_INPROCESS;
                                    accountStockMoving.DestinationAccountStockCode = InventoryAccountCode.C_INV_ACCOUNT_CODE_INSTOCK;
                                    accountStockMoving.SourceLocationCode          = dogroupSample.SourceLocationCode;
                                    accountStockMoving.DestinationLocationCode     = dogroupSample.DestinationLocationCode;
                                    accountStockMoving.InstrumentCode              = dogroupSample.Instrumentcode;
                                    accountStockMoving.InstrumentQty               = intReturnInprocess;
                                    accountStockMoving.InstrumentPrice             = InventoryConfig.C_INV_DEFAULT_SAMPLE_AMOUNT;
                                    accountStockMoving.CreateDate                  = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                                    accountStockMoving.CreateBy                    = CommonUtil.dsTransData.dtUserData.EmpNo;
                                    accountStockMoving.UpdateDate                  = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                                    accountStockMoving.UpdateBy                    = CommonUtil.dsTransData.dtUserData.EmpNo;
                                    List <tbt_AccountStockMoving> targetAccountStockMovingList = new List <tbt_AccountStockMoving>();
                                    targetAccountStockMovingList.Add(accountStockMoving);
                                    List <tbt_AccountStockMoving> resultAccountStockMovingList = InvH.InsertAccountStockMoving(targetAccountStockMovingList);
                                    if (resultAccountStockMovingList.Count <= 0)
                                    {
                                        throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0148, new string[] { TableName.C_TBL_NAME_INV_ACC_STOCK_MOVING });
                                    } //end if/else
                                }
                                #endregion
                            }
                        }
                    }

                    //4.10
                    if (prm.SlipSelectType == IVS030_ScreenParameter.SlipType.InstallationSlip)
                    {
                        bool blnProcessStatus = InstallH.ReceiveReturnInstrument(prm.SlipNo, prm.office.OfficeCode);

                        if (!blnProcessStatus)
                        {
                            //Rollback
                            return(Json(res));
                        }
                    }

                    //Genereate Invenotry Slip Report
                    var    srvInvDoc     = ServiceContainer.GetService <IInventoryDocumentHandler>() as IInventoryDocumentHandler;
                    string invslipnolist = string.Join(",", doTbt_InventorySlipForUpdate.Select(d => d.SlipNo));
                    srvInvDoc.GenerateIVR210FilePath(invslipnolist, null, CommonUtil.dsTransData.dtUserData.EmpNo, CommonUtil.dsTransData.dtOperationData.ProcessDateTime);

                    res.ResultData = new {
                        SlipNo  = prm.SlipNo,
                        Message = MessageUtil.GetMessage(MessageUtil.MODULE_INVENTORY, MessageUtil.MessageList.MSG4019)
                    };


                    scope.Complete();
                }

                return(Json(res));
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex); return(Json(res));
            }
        }
        /// <summary>
        /// Register Elimination.<br />
        /// - Check system suspending.<br />
        /// - Check quantity.<br />
        /// - Insert inventory slip.<br />
        /// - Update account transfer new/second hand/sample instrument.<br />
        /// - Insert account stock moving.<br />
        /// - Generate report.
        /// </summary>
        /// <returns></returns>
        public ActionResult IVS050_cmdConfirm()
        {
            ObjectResultData res = new ObjectResultData();

            try
            {       //Check Suspend
                IVS050_ScreenParameter prm = GetScreenObject <IVS050_ScreenParameter>();
                if (prm.ElemInstrument == null)
                {
                    prm.ElemInstrument = new List <IVS040INST>();
                }
                ICommonHandler ComH = ServiceContainer.GetService <ICommonHandler>() as ICommonHandler;
                if (ComH.IsSystemSuspending())
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0049);
                    return(Json(res));
                }
                if (!CheckUserPermission(ScreenID.C_INV_SCREEN_ID_ELIMINATION, FunctionID.C_FUNC_ID_OPERATE))
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0053);
                    return(Json(res));
                }

                IInventoryHandler InvH = ServiceContainer.GetService <IInventoryHandler>() as IInventoryHandler;
                //8.4.1
                bool isError = false;
                foreach (IVS040INST i in prm.ElemInstrument)
                {
                    doCheckTransferQty Cond = new doCheckTransferQty();
                    Cond.OfficeCode     = prm.office.OfficeCode;
                    Cond.LocationCode   = InstrumentLocation.C_INV_LOC_PRE_ELIMINATION;
                    Cond.AreaCode       = i.AreaCode;
                    Cond.ShelfNo        = i.ShelfNo;
                    Cond.InstrumentCode = i.InstrumentCode;
                    Cond.TransferQty    = i.TransferInstrumentQty;

                    doCheckTransferQtyResult TransferQtyResult = InvH.CheckTransferQty(Cond);
                    i.InstrumentQty = TransferQtyResult.CurrentyQty;

                    if (TransferQtyResult.OverQtyFlag == null)
                    {
                        res.AddErrorMessage(MessageUtil.MODULE_INVENTORY, MessageUtil.MessageList.MSG4009, new string[] { i.InstrumentCode }, new string[] { i.TransQtyID });
                        //res.ResultData = i.InstrumentCode + "," + i.row_id;
                        isError = true;
                    }
                    else if (TransferQtyResult.OverQtyFlag == true)
                    {
                        res.AddErrorMessage(MessageUtil.MODULE_INVENTORY, MessageUtil.MessageList.MSG4008, new string[] { i.InstrumentCode }, new string[] { i.TransQtyID });
                        //res.ResultData = i.InstrumentCode + "," + i.row_id;
                        isError = true;
                    }
                }
                if (isError)
                {
                    //res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;
                    res.ResultData = prm.ElemInstrument;
                    return(Json(res));
                }

                string strInventorySlipNo = null;
                using (TransactionScope scope = new TransactionScope())
                {
                    //8.5
                    doRegisterTransferInstrumentData data = new doRegisterTransferInstrumentData();
                    data.SlipId = SlipID.C_INV_SLIPID_ELIMINATE;

                    data.InventorySlip = new tbt_InventorySlip();
                    data.lstTbt_InventorySlipDetail = new List <tbt_InventorySlipDetail>();
                    tbt_InventorySlip InvSlip = new tbt_InventorySlip();
                    InvSlip.SlipStatus              = InventorySlipStatus.C_INV_SLIP_STATUS_COMPLETE;
                    InvSlip.TransferTypeCode        = TransferType.C_INV_TRANSFERTYPE_ELIMINATION;
                    InvSlip.SlipIssueDate           = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                    InvSlip.StockInDate             = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                    InvSlip.StockOutDate            = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                    InvSlip.SourceLocationCode      = InstrumentLocation.C_INV_LOC_PRE_ELIMINATION;
                    InvSlip.DestinationLocationCode = InstrumentLocation.C_INV_LOC_ELIMINATION;
                    InvSlip.SourceOfficeCode        = prm.office.OfficeCode;
                    InvSlip.DestinationOfficeCode   = prm.office.OfficeCode;
                    InvSlip.ApproveNo  = prm.ApproveNo;
                    InvSlip.Memo       = prm.Memo;
                    InvSlip.ShelfType  = ShelfType.C_INV_SHELF_TYPE_NORMAL;
                    InvSlip.CreateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
                    InvSlip.CreateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                    InvSlip.UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                    InvSlip.UpdateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;

                    data.InventorySlip = InvSlip;

                    data.lstTbt_InventorySlipDetail = new List <tbt_InventorySlipDetail>();
                    int iRunNo = 1;
                    foreach (IVS040INST i in prm.ElemInstrument)
                    {
                        tbt_InventorySlipDetail SlipDetail = new tbt_InventorySlipDetail();
                        SlipDetail.SlipNo              = null;
                        SlipDetail.RunningNo           = iRunNo;
                        SlipDetail.InstrumentCode      = i.InstrumentCode;
                        SlipDetail.SourceAreaCode      = i.AreaCode;
                        SlipDetail.DestinationAreaCode = i.AreaCode;
                        SlipDetail.SourceShelfNo       = i.ShelfNo;
                        SlipDetail.DestinationShelfNo  = i.ShelfNo;
                        SlipDetail.TransferQty         = i.TransferInstrumentQty;
                        SlipDetail.InstrumentAmount    = i.TransferAmount;

                        data.lstTbt_InventorySlipDetail.Add(SlipDetail);
                        iRunNo++;
                    }
                    strInventorySlipNo = InvH.RegisterTransferInstrument(data);

                    List <tbt_AccountStockMoving> listInsertAccStockMoving = new List <tbt_AccountStockMoving>();

                    if (InvH.CheckNewInstrument(strInventorySlipNo) == 1)
                    {
                        //8.7.1
                        List <doGroupNewInstrument> groupNewInstrument = InvH.GetGroupNewInstrument(strInventorySlipNo);
                        foreach (doGroupNewInstrument i in groupNewInstrument)
                        {
                            i.DestinationLocationCode = InstrumentLocation.C_INV_LOC_ELIMINATION;
                            #region Monthly Price @ 2015
                            //decimal decMovingAveragePrice = InvH.CalculateMovingAveragePrice(i);
                            decimal decMovingAveragePrice = InvH.GetMonthlyAveragePrice(i.Instrumentcode, InvSlip.SlipIssueDate, InventoryAccountCode.C_INV_ACCOUNT_CODE_INSTOCK, SECOM_AJIS.Common.Util.ConstantValue.CurrencyUtil.C_CURRENCY_LOCAL, SECOM_AJIS.Common.Util.ConstantValue.CurrencyUtil.C_CURRENCY_US);
                            #endregion
                            bool canUpdate = InvH.UpdateAccountTransferNewInstrument(i, Convert.ToDecimal(decMovingAveragePrice));

                            if (!canUpdate)
                            {
                                scope.Dispose();
                                return(Json(res));
                            }

                            List <tbt_AccountInstock> listInstock = InvH.GetTbt_AccountInStock(i.Instrumentcode, InstrumentLocation.C_INV_LOC_PRE_ELIMINATION, prm.office.OfficeCode);
                            if (listInstock.Count <= 0)
                            {
                                scope.Dispose();
                                return(Json(res));
                            }
                            tbt_AccountStockMoving accountStockMoving = new tbt_AccountStockMoving();
                            accountStockMoving.SlipNo                      = strInventorySlipNo;
                            accountStockMoving.TransferTypeCode            = TransferType.C_INV_TRANSFERTYPE_ELIMINATION;
                            accountStockMoving.SourceAccountStockCode      = InventoryAccountCode.C_INV_ACCOUNT_CODE_INSTOCK;
                            accountStockMoving.DestinationAccountStockCode = InventoryAccountCode.C_INV_ACCOUNT_CODE_ELIMINATE;
                            accountStockMoving.SourceLocationCode          = InstrumentLocation.C_INV_LOC_PRE_ELIMINATION;
                            accountStockMoving.DestinationLocationCode     = InstrumentLocation.C_INV_LOC_ELIMINATION;
                            accountStockMoving.InstrumentCode              = i.Instrumentcode;
                            accountStockMoving.InstrumentQty               = i.TransferQty;
                            accountStockMoving.InstrumentPrice             = listInstock[0].MovingAveragePrice;
                            accountStockMoving.CreateDate                  = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                            accountStockMoving.CreateBy                    = CommonUtil.dsTransData.dtUserData.EmpNo;
                            accountStockMoving.UpdateDate                  = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                            accountStockMoving.UpdateBy                    = CommonUtil.dsTransData.dtUserData.EmpNo;
                            listInsertAccStockMoving.Add(accountStockMoving);
                        }
                    }

                    //8.8
                    int blnCheckSecondhandInstrument = InvH.CheckSecondhandInstrument(strInventorySlipNo);
                    if (blnCheckSecondhandInstrument == 1)
                    {
                        List <doGroupSecondhandInstrument> GroupSecondHandInstrument = InvH.GetGroupSecondhandInstrument(strInventorySlipNo);
                        foreach (doGroupSecondhandInstrument i in GroupSecondHandInstrument)
                        {
                            i.DestinationLocationCode = InstrumentLocation.C_INV_LOC_ELIMINATION;
                            bool canUpdate = InvH.UpdateAccountTransferSecondhandInstrument(i);

                            if (!canUpdate)
                            {
                                scope.Dispose();
                                return(Json(res));
                            }

                            decimal sumTransferAmount = 0;
                            foreach (IVS040INST j in prm.ElemInstrument)
                            {
                                if (i.Instrumentcode == j.InstrumentCode &&
                                    (j.AreaCode == InstrumentArea.C_INV_AREA_SE_RENTAL || j.AreaCode == InstrumentArea.C_INV_AREA_SE_HANDLING_DEMO))
                                {
                                    sumTransferAmount += j.TransferAmount;
                                }
                            }

                            tbt_AccountStockMoving accountStockMoving = new tbt_AccountStockMoving();
                            accountStockMoving.SlipNo                      = strInventorySlipNo;
                            accountStockMoving.TransferTypeCode            = TransferType.C_INV_TRANSFERTYPE_ELIMINATION;
                            accountStockMoving.SourceAccountStockCode      = InventoryAccountCode.C_INV_ACCOUNT_CODE_INSTALLED;
                            accountStockMoving.DestinationAccountStockCode = InventoryAccountCode.C_INV_ACCOUNT_CODE_ELIMINATE;
                            accountStockMoving.SourceLocationCode          = InstrumentLocation.C_INV_LOC_PRE_ELIMINATION;
                            accountStockMoving.DestinationLocationCode     = InstrumentLocation.C_INV_LOC_ELIMINATION;
                            accountStockMoving.InstrumentCode              = i.Instrumentcode;
                            accountStockMoving.InstrumentQty               = i.TransferQty;
                            if (sumTransferAmount != 0)
                            {
                                accountStockMoving.InstrumentPrice = sumTransferAmount / i.TransferQty;
                            }
                            else
                            {
                                accountStockMoving.InstrumentPrice = 0;
                            }
                            accountStockMoving.CreateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                            accountStockMoving.CreateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
                            accountStockMoving.UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                            accountStockMoving.UpdateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
                            listInsertAccStockMoving.Add(accountStockMoving);
                        }
                    }

                    //8.9

                    int blnCheckSampleInstrument = InvH.CheckSampleInstrument(strInventorySlipNo);
                    if (blnCheckSampleInstrument == 1)
                    {
                        List <doGroupSampleInstrument> GroupSampleInstrument = InvH.GetGroupSampleInstrument(strInventorySlipNo);
                        foreach (doGroupSampleInstrument i in GroupSampleInstrument)
                        {
                            i.DestinationLocationCode = InstrumentLocation.C_INV_LOC_ELIMINATION;
                            bool canUpdate = InvH.UpdateAccountTransferSampleInstrument(i, null);

                            if (!canUpdate)
                            {
                                scope.Dispose();
                                return(Json(res));
                            }

                            tbt_AccountStockMoving accountStockMoving = new tbt_AccountStockMoving();
                            accountStockMoving.SlipNo                      = strInventorySlipNo;
                            accountStockMoving.TransferTypeCode            = TransferType.C_INV_TRANSFERTYPE_ELIMINATION;
                            accountStockMoving.SourceAccountStockCode      = InventoryAccountCode.C_INV_ACCOUNT_CODE_INSTOCK;
                            accountStockMoving.DestinationAccountStockCode = InventoryAccountCode.C_INV_ACCOUNT_CODE_ELIMINATE;
                            accountStockMoving.SourceLocationCode          = InstrumentLocation.C_INV_LOC_PRE_ELIMINATION;
                            accountStockMoving.DestinationLocationCode     = InstrumentLocation.C_INV_LOC_ELIMINATION;
                            accountStockMoving.InstrumentCode              = i.Instrumentcode;
                            accountStockMoving.InstrumentQty               = i.TransferQty;
                            accountStockMoving.InstrumentPrice             = InventoryConfig.C_INV_DEFAULT_SAMPLE_AMOUNT;
                            accountStockMoving.CreateDate                  = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                            accountStockMoving.CreateBy                    = CommonUtil.dsTransData.dtUserData.EmpNo;
                            accountStockMoving.UpdateDate                  = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                            accountStockMoving.UpdateBy                    = CommonUtil.dsTransData.dtUserData.EmpNo;
                            listInsertAccStockMoving.Add(accountStockMoving);
                        }
                    }

                    //8.10
                    List <tbt_AccountStockMoving> resultInsert = InvH.InsertAccountStockMoving(listInsertAccStockMoving);
                    if (resultInsert.Count <= 0)
                    {
                        scope.Dispose();
                        return(Json(res));
                    }

                    scope.Complete();
                } //end transaction scope

                IInventoryDocumentHandler handlerInventoryDocument = ServiceContainer.GetService <IInventoryDocumentHandler>() as IInventoryDocumentHandler;
                string reportPath = handlerInventoryDocument.GenerateIVR030FilePath(strInventorySlipNo, prm.office.OfficeCode, CommonUtil.dsTransData.dtUserData.EmpNo, CommonUtil.dsTransData.dtOperationData.ProcessDateTime);
                prm.slipNo         = strInventorySlipNo;
                prm.reportFilePath = reportPath;
                UpdateScreenObject(prm);

                res.ResultData = strInventorySlipNo;

                return(Json(res));
            }
            catch (Exception ex)
            {
                res.ResultData = "toregister";
                res.AddErrorMessage(ex); return(Json(res));
            }
        }