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); }
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); }