/// <summary> /// What to do when create new addRemoveCrew /// </summary> /// <param name="addRemoveCrew"></param> public void DoNewRecord(AddRemoveCrew addRemoveCrew, int addRemoveType) { //addRemoveCrew.Code = _getNewProductCode(); addRemoveCrew.AddRemoveType = addRemoveType; addRemoveCrew.UpdateInfo.LogAdded(CurrentUserName); if (addRemoveCrew.Alien != null) { addRemoveCrew.Alien.UpdateInfo.LogAdded(CurrentUserName); } addRemoveCrew.IsCancel = false; }
/// <summary> /// เรียกการบันทึกข้อมูล โดยตรวจสอบว่า Code ซ้ำหรือไม่ /// </summary> /// <param name="addRemoveCrew"></param> /// <param name="numRecursive">จำนวนที่ให้วน loop ปรกติไม่ต้องใส่มา</param> private void _saveCheckCode(AddRemoveCrew addRemoveCrew, int numRecursive = 5) { try { _save(); } catch (Exception ex) { var clash = new RulesException <AddRemoveCrew>(); clash.ErrorFor(x => x, "Error :" + ex.ExMessage()); throw clash; } }
/// <summary> /// ตรวจสอบว่าข้อมูลที่กรอกเข้ามาถูกต้องหรือไม่ /// โดยเป็นส่วนของ logic ที่ไม่สามารถระบุใน metadata ไม่ได้ และไม่ได้ระบุเอาไว้ใน constraint ของ database /// </summary> /// <param name="addRemoveCrew"></param> /// <param name="isCreate"></param> private void _validate(AddRemoveCrew addRemoveCrew, bool isCreate, int addRemoveType) { var errors = new RulesException <AddRemoveCrew>(); if (addRemoveCrew.Code != "") { int addRemoveCrewId = 0; if (!isCreate) { addRemoveCrewId = addRemoveCrew.Id; } //ถ้ามี subcode if (addRemoveCrew.SubCode != "") { var oldCode = (from p in entities.AddRemoveCrews where (p.Id != addRemoveCrewId) && (p.Code == addRemoveCrew.Code) && (p.SubCode == addRemoveCrew.SubCode) && (p.AddRemoveType == addRemoveType) && (!p.IsCancel) select p.Id).Count(); if (oldCode > 0) { errors.ErrorFor(x => x, "ลำดับที่และลำดับย่อยที่กรอก ซ้ำกับรายการอื่นในปีเดียวกัน"); } } //ถ้าไม่มี ให้เช็คกับ code โดยตรง else { var oldCode = (from p in entities.AddRemoveCrews where (p.Id != addRemoveCrewId) && (p.Code == addRemoveCrew.Code) && (p.AddRemoveType == addRemoveType) && (!p.IsCancel) select p.Id).Count(); if (oldCode > 0) { errors.ErrorFor(x => x, "ลำดับที่ ที่กรอก ซ้ำกับรายการอื่นในปีเดียวกัน"); } } } if (errors.Errors.Any()) { throw errors; } }
/// <summary> /// What to do before save any edit or newly created record /// </summary> /// <param name="addRemoveCrew"></param> private void _doBeforePost(AddRemoveCrew addRemoveCrew, bool isCreate, int addRemoveType) { addRemoveCrew.ClearNullDate(); addRemoveCrew.UpdateInfo.LogUpdated(CurrentUserName); if (addRemoveCrew.Alien != null) { addRemoveCrew.Alien.UpdateInfo.LogUpdated(CurrentUserName); } if (isCreate) { if (addRemoveCrew.Alien != null) { addRemoveCrew.Alien.DataInType = 5; // ลูกเรือ มากับเรือ } } //Update ConveyanceInOut ตรงนี้ ConveyanceInOut convInOut; if (addRemoveCrew.AddRemoveType == ModelConst.ADDREMOVETYPE_ADD) { var convNameCond = addRemoveCrew.OutDetail.InWay.Replace(" ", "").ToLower(); var convInOutDate = addRemoveCrew.OutDetail.InDate; convInOut = (from a in entities.ConveyanceInOuts where (a.Conveyance.Name.ToLower().Replace(" ", "") == convNameCond) && (a.InOutDate == convInOutDate) select a).FirstOrDefault(); } else { var convNameCond = addRemoveCrew.InDetail.InWay.Replace(" ", "").ToLower(); var convInOutDate = addRemoveCrew.InDetail.InDate; convInOut = (from a in entities.ConveyanceInOuts where (a.Conveyance.Name.ToLower().Replace(" ", "") == convNameCond) && (a.InOutDate == convInOutDate) select a).FirstOrDefault(); } if (convInOut != null) { addRemoveCrew.ConveyanceInOut = convInOut; } }
/// <summary> /// prepare data and save to ef, ใช้ทั้ง update และ insert /// </summary> /// <param name="addRemoveCrew"></param> /// <param name="isCreate">ส่ง true ถ้าต้องการ insert</param> public void DoSave(AddRemoveCrew addRemoveCrew, bool isCreate, int addRemoveType) { if (isCreate) { //ถ้า Insert แต่ Alien มีค่าอยู่แล้ว ต้องเอาออกก่อน ไม่งั้นจะ add Alien เข้าไปด้วย if (addRemoveCrew.AlienId != 0) { var updatedAlien = addRemoveCrew.Alien; addRemoveCrew.Alien = null; //ให้ไป update ที่ alien โดยตรง var oldAlien = entities.Aliens.Single(a => a.Id == addRemoveCrew.AlienId); entities.Aliens.Attach(oldAlien); updatedAlien.Photo.CopyFrom(oldAlien.Photo); //ต้อง copy ถ่ายค่าของรูปภาพมาด้วย เพราะไม่มีข้อมูลเก็บในหน้าจอ entities.Aliens.ApplyCurrentValues(updatedAlien); } _add(addRemoveCrew); } _doBeforePost(addRemoveCrew, isCreate, addRemoveType); _validate(addRemoveCrew, isCreate, addRemoveType); _saveCheckCode(addRemoveCrew); }
/// <summary> /// สำหรับลบ record ออกจาก ef รวมทั้งลบลูกที่เกี่ยวข้อง (ถ้ามี) /// </summary> /// <param name="addRemoveCrew"></param> private void _delete(AddRemoveCrew addRemoveCrew) { // ถ้ามี ref ตัวลูก ให้ loop ลบ ref ก่อน... //entities.AddRemoveCrews.DeleteObject(addRemoveCrew); addRemoveCrew.IsCancel = true; }
// // Insert / Delete Method /// <summary> /// สำหรับเพิ่ม record ลง ef /// </summary> /// <param name="addRemoveCrew"></param> private void _add(AddRemoveCrew addRemoveCrew) { entities.AddRemoveCrews.AddObject(addRemoveCrew); }
/// <summary> /// prepare data and delete from ef /// </summary> /// <param name="addRemoveCrew"></param> public void DoDelete(AddRemoveCrew addRemoveCrew) { _delete(addRemoveCrew); _save(); }