예제 #1
0
        /// <summary>
        /// prepare data and save to ef, ใช้ทั้ง update และ insert
        /// </summary>
        /// <param name="crew"></param>
        /// <param name="isCreate">ส่ง true ถ้าต้องการ insert</param>
        public void DoSave(Crew crew, bool isCreate)
        {
            if (isCreate)
            {
                //ถ้า Insert แต่ Alien มีค่าอยู่แล้ว ต้องเอาออกก่อน ไม่งั้นจะ add Alien เข้าไปด้วย
                if (crew.AlienId != 0)
                {
                    var updatedAlien = crew.Alien;
                    crew.Alien = null;
                    //ให้ไป update ที่ alien โดยตรง
                    var oldAlien = entities.Aliens.Single(a => a.Id == crew.AlienId);
                    entities.Aliens.Attach(oldAlien);
                    updatedAlien.Photo.CopyFrom(oldAlien.Photo); //ต้อง copy ถ่ายค่าของรูปภาพมาด้วย เพราะไม่มีข้อมูลเก็บในหน้าจอ
                    entities.Aliens.ApplyCurrentValues(updatedAlien);
                }

                _add(crew);
            }

            _doBeforePost(crew, isCreate);
            _validate(crew, isCreate);

            _saveCheckCode(crew);
        }
        private void _updateCrews(ConveyanceInOut convInOut)
        {
            //หารายการลูกเรือคราวที่แล้ว
            //เริ่มต้นที่การหาวันที่ล่าสุดของเรือที่กำหนด
            //th20110409 แก้ Bug กรณีที่มีเรือ แต่ไม่มีรายการเข้าออก จะ error เนื่องจาก query นี้ให้ค่า null
            DateTime?maxInOutdate = entities.Crews
                                    .Where(c =>
                                           (c.ConveyanceInOut != null) &&
                                           (c.ConveyanceInOut.ConveyanceId == convInOut.ConveyanceId) &&
                                           (c.ConveyanceInOut.InOutDate <= convInOut.InOutDate) && //th20110409 เอาเฉพาะอันที่เก่ากว่าด้วย เผื่อ user key ย้อนหลัง
                                                                                                   //th ไม่ต้องกรองอันนี้ เรือเข้าก็เอาชุดเก่าที่เคยออกไปมาให้ได้ (c.ConveyanceInOut.InOutType == ModelConst.CONVINOUT_IN) && //th20110409 กรองเฉพาะเรือเข้า
                                           (c.IsCrew ?? false) &&
                                           !c.IsCancel)
                                    .Max(c => (DateTime?)c.ConveyanceInOut.InOutDate);

            if (maxInOutdate == null) //ถ้าไม่มี record เก่า ไม่ต้องทำต่อ
            {
                return;
            }

            //หา id ของรายการเข้าออกเรือ
            int?maxConveyanceInOutId = entities.ConveyanceInOuts
                                       .Where(c => !c.IsCancel &&
                                              c.ConveyanceId == convInOut.ConveyanceId &&               //th20110409 ควรจะต้องกรองเฉพาะเรือลำเดิมเท่านั้น ไม่งั้น ถ้ามีหลายลำเข้าวันเดียวกัน ก็จะเอามามั่ว
                                              c.InOutDate == maxInOutdate)
                                       .Max(c => (int?)c.Id);

            if (maxConveyanceInOutId == null)
            {
                return;
            }

            //ท่อนที่ 1 เอาลูกเรือตรง ๆ เข้ามาใส่
            var lastcrews = (from c in entities.Crews
                             where (c.ConveyanceInOut.ConveyanceId == convInOut.ConveyanceId) &&
                             (c.IsCrew ?? false) &&
                             !c.IsCancel &&
                             (c.ConveyanceInOut.Id == maxConveyanceInOutId) &&
                             //หาพวกที่ไม่ได้อยู่ใน remove ของคราวที่แล้ว
                             !(from d in entities.AddRemoveCrews
                               where !d.IsCancel &&
                               (d.ConveyanceInOutId == maxConveyanceInOutId) &&
                               (d.AddRemoveType == ModelConst.ADDREMOVETYPE_RMV)             //เอาเฉพาะรายการลด
                               select d.AlienId).Contains(c.AlienId)
                             select c).ToList();

            foreach (var crew in lastcrews)
            {
                //entities.Crews.Attach(crew);
                //entities.Crews.ApplyCurrentValues(crew);
                var newcrew = new Crew();

                newcrew.Code               = crew.Code;
                newcrew.AlienId            = crew.AlienId;
                newcrew.PassportCard.DocNo = crew.PassportCard.DocNo;

                //th20110411 เพิ่มการ copy id และ seaman Req 2
                newcrew.IDCardNo     = crew.IDCardNo;
                newcrew.SeamanCardNo = crew.SeamanCardNo;

                newcrew.IsCrew   = crew.IsCrew;
                newcrew.IsCancel = crew.IsCancel;

                newcrew.Remark = crew.Remark; //th20110409

                newcrew.ConveyanceInOut = convInOut;
                newcrew.UpdateInfo.LogAdded(CurrentUserName);
                newcrew.UpdateInfo.LogUpdated(CurrentUserName);

                entities.Crews.AddObject(newcrew);
            }

            //th20110409 ท่อนที่ 2 ถ้าเป็นขาเข้า เอาคนเพิ่มจากคราวที่แล้ว มาใส่ด้วย
            if (convInOut.InOutType == ModelConst.CONVINOUT_IN)
            {
                var lastAddCrews = from d in entities.AddRemoveCrews
                                   where !d.IsCancel &&
                                   (d.ConveyanceInOutId == maxConveyanceInOutId) &&
                                   (d.AddRemoveType == ModelConst.ADDREMOVETYPE_ADD)       //เอาเฉพาะรายการเพิ่ม
                                   select d;

                foreach (var addCrew in lastAddCrews)
                {
                    if (!lastcrews.Any(lc => lc.AlienId == addCrew.AlienId)) //เอาคนที่ซ้ำกับ list 1 ออกไป
                    {
                        //entities.Crews.Attach(crew);
                        //entities.Crews.ApplyCurrentValues(crew);
                        var newcrew = new Crew();

                        newcrew.Code               = addCrew.Code;
                        newcrew.AlienId            = addCrew.AlienId;
                        newcrew.PassportCard.DocNo = addCrew.Alien.PassportCard.DocNo;

                        //th20110411 เพิ่มการ copy id และ seaman Req 2
                        newcrew.IDCardNo     = addCrew.Alien.IDCardNo;
                        newcrew.SeamanCardNo = addCrew.Alien.SeamanCardNo;

                        newcrew.IsCrew   = true;
                        newcrew.IsCancel = addCrew.IsCancel;

                        newcrew.Remark = addCrew.ExtendedData.Custom1; //th20110409

                        newcrew.ConveyanceInOut = convInOut;
                        newcrew.UpdateInfo.LogAdded(CurrentUserName);
                        newcrew.UpdateInfo.LogUpdated(CurrentUserName);

                        entities.Crews.AddObject(newcrew);
                    }
                }
            }
        }
예제 #3
0
 /// <summary>
 /// สำหรับลบ record ออกจาก ef รวมทั้งลบลูกที่เกี่ยวข้อง (ถ้ามี)
 /// </summary>
 /// <param name="crew"></param>
 private void _delete(Crew crew)
 {
     // ถ้ามี ref ตัวลูก ให้ loop ลบ ref ก่อน...
     //entities.ConveyanceInOuts.DeleteObject(crew);
     crew.IsCancel = true;
 }
예제 #4
0
 //
 // Insert / Delete Method
 /// <summary>
 /// สำหรับเพิ่ม record ลง ef
 /// </summary>
 /// <param name="crew"></param>
 private void _add(Crew crew)
 {
     entities.Crews.AddObject(crew);
 }
예제 #5
0
 /// <summary>
 /// prepare data and delete from ef
 /// </summary>
 /// <param name="crew"></param>
 public void DoDelete(Crew crew)
 {
     _delete(crew);
     _save();
 }