public static sysGlobalClass.CResutlWebMethod saveToDB(DataValue dataValue)
    {
        sysGlobalClass.CResutlWebMethod result = new sysGlobalClass.CResutlWebMethod();
        PTTGC_EPIEntities db = new PTTGC_EPIEntities();

        if (!UserAcc.UserExpired())
        {
            dataValue.sComID      = STCrypt.Decrypt(dataValue.sComID);
            dataValue.sFacilityID = !string.IsNullOrEmpty(dataValue.sFacilityID) ? STCrypt.Decrypt(dataValue.sFacilityID) : "";
            Func <string, int, int?, int, bool> CheckDuplicateName = (name, comID, facID, nLevel) =>
            {
                bool Isdup = false;
                var  q     = db.mTFacility.Where(w => w.CompanyID == comID && w.nLevel == nLevel && (facID.HasValue ? w.ID != facID : true) && w.Name == name && w.cDel == "N");
                Isdup = q.Any();
                return(Isdup);
            };
            #region  Add / Update
            if (CheckDuplicateName(dataValue.sFacilityName, SystemFunction.GetIntNullToZero(dataValue.sComID), dataValue.IsNew ? (int?)null : SystemFunction.GetIntNullToZero(dataValue.sFacilityID), (dataValue.sComType == "GC" ? 1 : 0)))
            {
                result.Status = SystemFunction.process_Failed;
                result.Msg    = "Duplicate Facility name";
                return(result);
            }

            int nFacility_PTT = SystemFunction.GetIntNullToZero(dataValue.sFacilityPTT_ID);
            int nFacilityID   = SystemFunction.GetIntNullToZero(dataValue.sFacilityID);
            if (dataValue.sComType == "GC" && nFacility_PTT != 0)
            {
                var query = db.mTFacility.Where(w => w.cDel == "N" && w.nLevel == 1 && w.nHeaderID == nFacility_PTT && w.ID != nFacilityID);
                if (query.Any())
                {
                    result.Status = SystemFunction.process_Failed;
                    result.Msg    = "Cannot reference PTT facility, because exist used.";
                    return(result);
                }
            }

            int nComID       = SystemFunction.GetIntNullToZero(dataValue.sComID);
            var itemFacility = db.mTFacility.FirstOrDefault(w => w.ID == nFacilityID && w.CompanyID == nComID);
            int nMaxID       = db.mTFacility.Any() ? db.mTFacility.Max(m => m.ID) + 1 : 1;
            if (dataValue.IsNew)
            {
                itemFacility          = new mTFacility();
                itemFacility.ID       = nMaxID;
                itemFacility.cDel     = "N";
                itemFacility.CreateID = UserAcc.GetObjUser().nUserID;
                itemFacility.dCreate  = DateTime.Now;
            }
            itemFacility.sMappingCodePTT = (dataValue.sMapPTTCode + "").Trim();
            itemFacility.Name            = dataValue.sFacilityName;
            itemFacility.nLevel          = dataValue.sComType == "GC" ? 1 : 0;
            itemFacility.nHeaderID       = dataValue.sComType == "GC" ? (nFacility_PTT == 0 ? (int?)null : nFacility_PTT) : (int?)null;
            itemFacility.sRelation       = dataValue.sComType == "GC" ? (nFacility_PTT == 0 ? itemFacility.ID + "" : nFacility_PTT + "-" + itemFacility.ID) : itemFacility.ID + "";
            //itemFacility.sRelation = dataValue.sComType == "GC" ? nFacility_PTT + "-" + itemFacility.ID : itemFacility.ID + "";
            itemFacility.OperationTypeID = SystemFunction.GetIntNullToZero(dataValue.sOperationTypePTT_ID);
            itemFacility.CompanyID       = SystemFunction.GetIntNullToZero(dataValue.sComID);
            itemFacility.Description     = dataValue.sDescription;
            itemFacility.cActive         = dataValue.sActive;
            itemFacility.sRemark         = dataValue.sActive == "Y" ? null : dataValue.sRemark;
            itemFacility.UpdateID        = dataValue.IsNew ? (int?)null : UserAcc.GetObjUser().nUserID;
            itemFacility.dUpdate         = DateTime.Now;
            if (dataValue.IsNew)
            {
                db.mTFacility.Add(itemFacility);
            }

            if (dataValue.sComType == "GC")
            {
                //db.mTFacility_Operationtype.RemoveRange(db.mTFacility_Operationtype.Where(w => w.nFacID == itemFacility.ID));
                //foreach (var item in dataValue.lstOperationTypeGC_ID)
                //{
                //    mTFacility_Operationtype oprt = new mTFacility_Operationtype();
                //    oprt.nFacID = itemFacility.ID;
                //    oprt.nOperationtypeID = SystemFunction.GetIntNullToZero(item);
                //    db.mTFacility_Operationtype.Add(oprt);
                //}
            }
            else
            {
                if (!dataValue.IsNew)
                {
                    db.mTFacility.Where(w => w.nHeaderID == itemFacility.ID && w.cDel == "N").ToList().ForEach(f =>
                    {
                        f.OperationTypeID = itemFacility.OperationTypeID;
                    });
                }
            }
            db.SaveChanges();
            result.Status = SystemFunction.process_Success;
            #endregion
        }
        else
        {
            result.Status = SystemFunction.process_SessionExpired;
        }
        return(result);
    }
Ejemplo n.º 2
0
    public static sysGlobalClass.CResutlWebMethod saveToDB(DataValue dataValue)
    {
        sysGlobalClass.CResutlWebMethod result = new sysGlobalClass.CResutlWebMethod();
        PTTGC_EPIEntities db = new PTTGC_EPIEntities();

        if (!UserAcc.UserExpired())
        {
            dataValue.sFacilityID = STCrypt.Decrypt(dataValue.sFacilityID);
            dataValue.sAssetID    = !string.IsNullOrEmpty(dataValue.sAssetID) ? STCrypt.Decrypt(dataValue.sAssetID) : "";

            Func <string, int?, bool> CheckDuplicateName = (name, AssetID) =>
            {
                bool Isdup = false;
                var  q     = db.mTFacility.Where(w => (AssetID.HasValue ? w.ID != AssetID : true) && w.nLevel == 2 && w.Name.Trim().ToLower() == name.Trim().ToLower() && w.cDel == "N");
                Isdup = q.Any();
                return(Isdup);
            };

            Func <string, int?, bool> CheckDuplicateNameSAP = (name, AssetID) =>
            {
                bool Isdup = false;
                var  q     = db.mTFacility.Where(w => (AssetID.HasValue ? w.ID != AssetID : true) && w.nLevel == 2 && w.sSAPName.Trim().ToLower() == name.Trim().ToLower() && w.cDel == "N");
                Isdup = q.Any();
                return(Isdup);
            };

            Func <string, int?, bool> CheckDuplicateCodeSAP = (code, AssetID) =>
            {
                bool Isdup = false;
                var  q     = db.mTFacility.Where(w => (AssetID.HasValue ? w.ID != AssetID : true) && w.nLevel == 2 && w.sRefFacCode.Trim().ToLower() == code.Trim().ToLower() && w.cDel == "N");
                Isdup = q.Any();
                return(Isdup);
            };

            #region  Add / Update
            if (dataValue.sRefFacType == "N" && CheckDuplicateName(dataValue.sAssetName, dataValue.IsNew ? (int?)null : SystemFunction.GetIntNullToZero(dataValue.sAssetID)))
            {
                result.Status = SystemFunction.process_Failed;
                result.Msg    = "Already Sub-facility Name !";
                return(result);
            }

            if (dataValue.sRefFacType == "P" && !string.IsNullOrEmpty(dataValue.sRefFacCode))
            {
                if (CheckDuplicateCodeSAP(dataValue.sRefFacCode, dataValue.IsNew ? (int?)null : SystemFunction.GetIntNullToZero(dataValue.sAssetID)))
                {
                    result.Status = SystemFunction.process_Failed;
                    result.Msg    = "Already SAP Code !";
                    return(result);
                }
            }

            bool IsPass       = true;
            int  sAssetID     = SystemFunction.GetIntNullToZero(dataValue.sAssetID);
            int  nFacilityID  = SystemFunction.GetIntNullToZero(dataValue.sFacilityID);
            var  itemAsset    = db.mTFacility.FirstOrDefault(w => w.ID == sAssetID);
            var  itemFacility = db.mTFacility.FirstOrDefault(w => w.ID == nFacilityID);
            int  nMaxID       = db.mTFacility.Any() ? db.mTFacility.Max(m => m.ID) + 1 : 1;
            if (dataValue.IsNew)
            {
                itemAsset          = new mTFacility();
                itemAsset.ID       = nMaxID;
                itemAsset.cDel     = "N";
                itemAsset.CreateID = UserAcc.GetObjUser().nUserID;
                itemAsset.dCreate  = DateTime.Now;
            }

            if (dataValue.sRefFacType == "P")
            {
                #region SAP Master
                var dataComp = db.mTCompany.FirstOrDefault(w => w.ID == itemFacility.CompanyID);
                if (dataComp != null)
                {
                    var qSAPFac = db.v_TM_SAP_ALLFAC.FirstOrDefault(w => w.sCode == dataValue.sRefFacCode && w.sCompCode == dataComp.sCode);
                    if (qSAPFac != null)
                    {
                        itemAsset.sRefFacCode    = dataValue.sRefFacCode;
                        itemAsset.Name           = qSAPFac.sName.Trims();
                        itemAsset.sRefFacSubType = qSAPFac.sType;
                        itemAsset.sInternalCode  = "";
                    }
                    else
                    {
                        IsPass        = false;
                        result.Status = SystemFunction.process_Failed;
                        result.Msg    = "Not found SAP master data !";
                    }
                }
                else
                {
                    IsPass        = false;
                    result.Status = SystemFunction.process_Failed;
                    result.Msg    = "Not found company data !";
                }
                #endregion
            }
            else
            {
                #region Manual Create
                var dataComp = db.mTCompany.FirstOrDefault(w => w.ID == itemFacility.CompanyID);
                if (dataComp != null)
                {
                    if (!string.IsNullOrEmpty(dataValue.sRefFacCode))//มีการอัพเดท SAP Code หลังจากที่ manual create
                    {
                        var qSAPFac = db.v_TM_SAP_ALLFAC.FirstOrDefault(w => w.sCode == dataValue.sRefFacCode && w.sCompCode == dataComp.sCode);
                        if (qSAPFac != null)
                        {
                            itemAsset.sRefFacCode = dataValue.sRefFacCode;
                            itemAsset.Name        = qSAPFac.sName.Trims();
                        }
                        else
                        {
                            IsPass        = false;
                            result.Status = SystemFunction.process_Failed;
                            result.Msg    = "Not found SAP master data !";
                        }
                    }
                    else
                    {
                        itemAsset.Name        = dataValue.sAssetName;
                        itemAsset.sRefFacCode = "";
                    }

                    itemAsset.sRefFacSubType = dataValue.sRefFacSubType;
                    if (dataValue.IsNew || string.IsNullOrEmpty(itemAsset.sInternalCode))
                    {
                        string sType = dataValue.sRefFacSubType == "O" ? "Z" : dataValue.sRefFacSubType;
                        char   cType = '-';
                        switch (sType)
                        {
                        case "O": cType = 'Z'; break;

                        case "S": cType = 'S'; break;

                        case "P": cType = 'P'; break;
                        }

                        Func <string, int> GetNumber = (code) =>
                        {
                            string[] arr = code.Split(cType);
                            return((arr[arr.Length - 1]).toIntNullToZero());
                        };

                        var qFacInternalCode = db.mTFacility.Where(w => w.cDel == "N" && w.CompanyID == itemFacility.CompanyID && w.sInternalCode.Contains(sType)).AsEnumerable().Select(s => new
                        {
                            nNumber = GetNumber(s.sInternalCode)
                        }).ToList();
                        int nNumber = qFacInternalCode.Any() ? qFacInternalCode.Max(x => x.nNumber) + 1 : 1;
                        itemAsset.sInternalCode = dataComp.sCode + sType + nNumber; //EX. 10Z1
                    }
                }
                else
                {
                    IsPass        = false;
                    result.Status = SystemFunction.process_Failed;
                    result.Msg    = "Not found company data !";
                }
                #endregion
            }

            if (IsPass)
            {
                itemAsset.sRefFacType     = dataValue.sRefFacType;
                itemAsset.nLevel          = 2;
                itemAsset.nHeaderID       = itemFacility.ID;
                itemAsset.sRelation       = itemFacility.sRelation + "-" + itemAsset.ID;
                itemAsset.OperationTypeID = itemFacility.OperationTypeID;
                itemAsset.CompanyID       = itemFacility.CompanyID;
                itemAsset.Description     = dataValue.sDescription;
                itemAsset.cActive         = dataValue.sActive;
                itemAsset.sRemark         = dataValue.sActive == "Y" ? null : dataValue.sRemark;
                itemAsset.UpdateID        = dataValue.IsNew ? (int?)null : UserAcc.GetObjUser().nUserID;
                itemAsset.dUpdate         = DateTime.Now;
                if (dataValue.IsNew)
                {
                    db.mTFacility.Add(itemAsset);
                }

                db.SaveChanges();
                result.Status = SystemFunction.process_Success;
            }
            #endregion
        }
        else
        {
            result.Status = SystemFunction.process_SessionExpired;
        }
        return(result);
    }