/// <summary>
        /// Register purchase order.<br />
        /// - Check system suspending.<br />
        /// - Check permission.<br />
        /// - Insert new purchase order.<br />
        /// - Generate report.
        /// </summary>
        /// <returns></returns>
        public ActionResult IVS250_cmdConfirm()
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                IVS250_ScreenParameter prm = GetScreenObject <IVS250_ScreenParameter>();
                if (prm.lstInstrument == null)
                {
                    prm.lstInstrument = new List <doInstrument250>();
                }
                if (prm.SpecifyPOrder250 == null)
                {
                    prm.SpecifyPOrder250 = new doSpecifyPOrder250();
                }
                //Check Suspend
                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_REGISTER_PURCHASE_ORDER, FunctionID.C_FUNC_ID_OPERATE))
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0053);
                    return(Json(res));
                }

                foreach (var i in prm.lstInstrument)
                {
                    IInstrumentMasterHandler InsH    = ServiceContainer.GetService <IInstrumentMasterHandler>() as IInstrumentMasterHandler;
                    List <tbm_Instrument>    lstInst = InsH.GetTbm_Instrument(i.InstrumentCode);

                    if (lstInst[0].LineUpTypeCode == LineUpType.C_LINE_UP_TYPE_LOGICAL_DELETE)
                    {
                        res.AddErrorMessage(MessageUtil.MODULE_INVENTORY, MessageUtil.MessageList.MSG4140, new string[] { lstInst[0].InstrumentCode });
                        return(Json(res));
                    }
                }

                using (TransactionScope scope = new TransactionScope())
                {
                    try
                    {
                        IInventoryHandler InvH = ServiceContainer.GetService <IInventoryHandler>() as IInventoryHandler;
                        string            strPurchaseOrderNo = InvH.GeneratePurchaseOrderNo(prm.Supplier.RegionCode);

                        tbt_PurchaseOrder doPurchaseOrder = new tbt_PurchaseOrder();
                        doPurchaseOrder.PurchaseOrderNo     = strPurchaseOrderNo;
                        doPurchaseOrder.PurhcaseOrderType   = prm.SpecifyPOrder250.PurchaseOrderType;
                        doPurchaseOrder.PurchaseOrderStatus = PurchaseOrderStatus.C_PURCHASE_ORDER_STATUS_WAIT_TO_RECEIVE;
                        doPurchaseOrder.SupplierCode        = prm.SpecifyPOrder250.SupplierCode;
                        doPurchaseOrder.TransportType       = prm.SpecifyPOrder250.TransportType;
                        doPurchaseOrder.Currency            = prm.SpecifyPOrder250.Currency;
                        doPurchaseOrder.BankName            = prm.Supplier.BankName;
                        doPurchaseOrder.AccountNo           = prm.Supplier.AccountNo;
                        doPurchaseOrder.AccountName         = prm.Supplier.AccountName;
                        doPurchaseOrder.ShippingDate        = prm.SpecifyPOrder250.AdjustDueDate;
                        doPurchaseOrder.Amount = prm.SpecifyPOrder250.TotalAmount;
                        if (prm.SpecifyPOrder250.PurchaseOrderType == PurchaseOrderType.C_PURCHASE_ORDER_TYPE_DOMESTIC ||
                            (prm.SpecifyPOrder250.PurchaseOrderType == PurchaseOrderType.C_PURCHASE_ORDER_TYPE_SECOM && prm.SpecifyPOrder250.Currency == CurrencyType.C_CURRENCY_TYPE_THB))
                        {
                            doPurchaseOrder.Vat = prm.SpecifyPOrder250.Vat;
                        }
                        doPurchaseOrder.Memo       = prm.SpecifyPOrder250.Memo;
                        doPurchaseOrder.CreateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
                        doPurchaseOrder.CreateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                        doPurchaseOrder.UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                        doPurchaseOrder.UpdateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
                        doPurchaseOrder.WHT        = prm.SpecifyPOrder250.WHT;
                        doPurchaseOrder.Discount   = prm.SpecifyPOrder250.Discount;

                        List <tbt_PurchaseOrder> lst = new List <tbt_PurchaseOrder>();
                        lst.Add(doPurchaseOrder);
                        List <tbt_PurchaseOrder> dolstPurchaseOrder = InvH.InsertTbt_PurchaseOrder(lst);

                        if (dolstPurchaseOrder.Count <= 0)
                        {
                            throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0148, new string[] { TableName.C_TBL_NAME_INV_PURCHASE });
                        }

                        List <tbt_PurchaseOrderDetail> lstDetail = new List <tbt_PurchaseOrderDetail>();

                        //foreach (doInstrument250 i in prm.lstInstrument)
                        foreach (doInstrument250 i in prm.SpecifyPOrder250.InstrumentData) //Modify by Jutarat A. on 28102013
                        {
                            tbt_PurchaseOrderDetail OrderDetail = new tbt_PurchaseOrderDetail();
                            OrderDetail.PurchaseOrderNo   = strPurchaseOrderNo;
                            OrderDetail.InstrumentCode    = i.InstrumentCode;
                            OrderDetail.InstrumentName    = i.InstrumentName; //Add by Jutarat A. on 28102013
                            OrderDetail.Memo              = i.Memo;           //Add by Jutarat A. on 28102013
                            OrderDetail.UnitPrice         = i.UnitPrice;
                            OrderDetail.FirstOrderQty     = i.OrderQty;
                            OrderDetail.ModifyOrderQty    = null;
                            OrderDetail.ReceiveQty        = 0;
                            OrderDetail.CreateBy          = CommonUtil.dsTransData.dtUserData.EmpNo;
                            OrderDetail.CreateDate        = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                            OrderDetail.UpdateDate        = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                            OrderDetail.UpdateBy          = CommonUtil.dsTransData.dtUserData.EmpNo;
                            OrderDetail.Unit              = i.Unit;
                            OrderDetail.OriginalUnitPrice = i.OriginalUnitPrice;
                            OrderDetail.Amount            = i.Amount;
                            lstDetail.Add(OrderDetail);
                        }
                        List <tbt_PurchaseOrderDetail> doPurchaseOrderDetail = InvH.InsertTbt_PurchaseOrderDetail(lstDetail);

                        if (doPurchaseOrderDetail.Count <= 0)
                        {
                            throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0148, new string[] { TableName.C_TBL_NAME_INV_PURCHASE_DETAIL });
                        }

                        //if (prm.SpecifyPOrder250.PurchaseOrderType == PurchaseOrderType.C_PURCHASE_ORDER_TYPE_SECOM)
                        //{
                        //    IInventoryDocumentHandler handlerInventoryDocument = ServiceContainer.GetService<IInventoryDocumentHandler>() as IInventoryDocumentHandler;
                        //    string reportPath = handlerInventoryDocument.GenerateIVR190FilePath(strPurchaseOrderNo, prm.office.OfficeCode, CommonUtil.dsTransData.dtUserData.EmpNo, CommonUtil.dsTransData.dtOperationData.ProcessDateTime);
                        //    prm.slipNo = strPurchaseOrderNo;
                        //    prm.reportFilePath = reportPath;
                        //}
                        //else if (prm.SpecifyPOrder250.PurchaseOrderType == PurchaseOrderType.C_PURCHASE_ORDER_TYPE_DOMESTIC)
                        //{
                        //    IInventoryDocumentHandler handlerInventoryDocument = ServiceContainer.GetService<IInventoryDocumentHandler>() as IInventoryDocumentHandler;
                        //    string reportPath = handlerInventoryDocument.GenerateIVR191FilePath(strPurchaseOrderNo, prm.office.OfficeCode, CommonUtil.dsTransData.dtUserData.EmpNo, CommonUtil.dsTransData.dtOperationData.ProcessDateTime);
                        //    prm.slipNo = strPurchaseOrderNo;
                        //    prm.reportFilePath = reportPath;
                        //}

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

                        scope.Complete();
                        res.ResultData = strPurchaseOrderNo;
                        return(Json(res));
                    }
                    catch (Exception ex)
                    {
                        res.AddErrorMessage(ex);
                        return(Json(res));
                    }
                }
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex); return(Json(res));
            }
        }