From 94598041ca08255a40c0156a5a9aace997c87fc5 Mon Sep 17 00:00:00 2001
From: berlin-tzen <berlintzen@gmail.com>
Date: Wed, 22 Feb 2023 15:56:43 +0800
Subject: [PATCH] =?UTF-8?q?[WHAT]=20=E4=BF=AE=E6=94=B9Booking=20API?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ShowEasy/BookingMaintain_QryService.cs    | 19 ++---
 .../ShowEasy/BookingMaintain_UpdService.cs    | 79 +++++++------------
 .../EasyBL.WEBAPP/ShowEasy/BookingService.cs  | 57 ++++++++++---
 EuroTran/Entity/ShowEasyDtos/ContactDTO.cs    |  2 +-
 EuroTran/Entity/Sugar/SETB_SAL_Booking.cs     |  8 ++
 .../WebApp/Controllers/BookingController.cs   | 60 +++-----------
 6 files changed, 109 insertions(+), 116 deletions(-)

diff --git a/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingMaintain_QryService.cs b/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingMaintain_QryService.cs
index 1b5df39..ca53e84 100644
--- a/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingMaintain_QryService.cs
+++ b/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingMaintain_QryService.cs
@@ -118,7 +118,7 @@ namespace EasyBL.WEBAPP.SYS
                     var sEffective = _fetchString(i_crm, @"Effective");
                     var bExcel = _fetchBool(i_crm, @"Excel");
 
-                    var BookingDic = FindAllDetailByIDsAsDictionary(sLanguageID, "", "");
+                    var BookingDic = FindAllDetailByIDsAsDictionary(sLanguageID, "", "", "");
 
                     var BookingList = db.Queryable<SETB_SAL_Booking, SETB_CMS_Member, SETB_PDT_ServiceBaseInfo>((t1, t2, t3) => new object[] {
 
@@ -250,7 +250,7 @@ namespace EasyBL.WEBAPP.SYS
                         sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
                     }
 
-                    var rsBooking = QueryOneDetailBooking(sLanguageID, sBookingID);
+                    var rsBooking = QueryOneDetailBooking(sLanguageID, sBookingID, "");
 
                     rm = new SuccessResponseMessage(null, i_crm);
                     rm.DATA.Add(BLWording.REL, rsBooking);
@@ -550,7 +550,7 @@ namespace EasyBL.WEBAPP.SYS
         #endregion 預訂管理(List 幣別列表 call ServiceMaintain_UpdService QueryCurrencyList)
 
         //QueryALLBookingAsDic
-        public Dictionary<string, View_SAL_Booking> FindAllByIDsAsDictionary(string sBookingID, string sMemberID)
+        public Dictionary<string, View_SAL_Booking> FindAllByIDsAsDictionary(string sBookingID, string sBookingNo, string sMemberID)
         {
 
             string sMsg = null;
@@ -565,6 +565,7 @@ namespace EasyBL.WEBAPP.SYS
                     var saBookingList = db.Queryable<SETB_SAL_Booking>()
                         .Where(t1 => t1.DelStatus == "N" && t1.Effective == "Y")
                         .WhereIF(!string.IsNullOrEmpty(sBookingID), t1 => t1.BookingID == sBookingID)
+                        .WhereIF(!string.IsNullOrEmpty(sBookingNo), t1 => t1.BookingNo == sBookingNo)
                         .WhereIF(!string.IsNullOrEmpty(sMemberID), t1 => t1.MemberID == sMemberID)
                         .Select(t1 => new View_SAL_Booking {
 
@@ -592,11 +593,11 @@ namespace EasyBL.WEBAPP.SYS
 
         }
 
-        public Dictionary<string, View_SAL_Booking> FindAllDetailByIDsAsDictionary(string sLanguageID, string sBookingID, string sMemberID) {
+        public Dictionary<string, View_SAL_Booking> FindAllDetailByIDsAsDictionary(string sLanguageID, string sBookingID, string sBookingNo, string sMemberID) {
 
             var rsBookingDic = new Dictionary<string, View_SAL_Booking>();
 
-            var BookingDic = FindAllByIDsAsDictionary(sBookingID, sMemberID);
+            var BookingDic = FindAllByIDsAsDictionary(sBookingID, sBookingNo, sMemberID);
 
             MemberMaintain_QryService mm_qry = new MemberMaintain_QryService();
             var MemberDic = mm_qry.FindAllByIDsAsDictionary(sMemberID, "");
@@ -704,9 +705,9 @@ namespace EasyBL.WEBAPP.SYS
 
         }
 
-        public View_SAL_Booking QueryOneDetailBooking(string sLanguageID, string sBookingID) {
+        public View_SAL_Booking QueryOneDetailBooking(string sLanguageID, string sBookingID, string sBookingNo) {
 
-            var Booking = FindAllDetailByIDsAsDictionary(sLanguageID, sBookingID, "").Values.ToList()
+            var Booking = FindAllDetailByIDsAsDictionary(sLanguageID, sBookingID, sBookingNo, "").Values.ToList()
                 .Where(w => w.BookingID == sBookingID)
                 .FirstOrDefault();
 
@@ -725,7 +726,7 @@ namespace EasyBL.WEBAPP.SYS
                 sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
             }
 
-            var BookingDic = FindAllDetailByIDsAsDictionary(sLanguageID, "", sMemberID);
+            var BookingDic = FindAllDetailByIDsAsDictionary(sLanguageID, "", "", sMemberID);
 
             BookingDic = FilterByMemberID(BookingDic, sMemberID);
 
@@ -846,7 +847,7 @@ namespace EasyBL.WEBAPP.SYS
                 sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
             }
 
-            var BookingDic = FindAllDetailByIDsAsDictionary(sLanguageID, "", sMemberID);
+            var BookingDic = FindAllDetailByIDsAsDictionary(sLanguageID, "", "", sMemberID);
 
             BookingDic = FilterByMemberID(BookingDic, sMemberID);
 
diff --git a/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingMaintain_UpdService.cs b/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingMaintain_UpdService.cs
index 73ea8ba..fb228b7 100644
--- a/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingMaintain_UpdService.cs
+++ b/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingMaintain_UpdService.cs
@@ -28,6 +28,24 @@ namespace EasyBL.WEBAPP.WSM
 
         #endregion 預訂維護(單筆查詢 call BookingMaintainQryService QueryOne)
 
+        public ResponseMessage SaveBooking(SETB_SAL_Booking Booking) {
+
+            ResponseMessage rsResult = null;
+
+            if (string.IsNullOrEmpty(Booking.BookingID))
+            {
+                // insert
+                rsResult = Insert(Booking);
+            }
+            else {
+                // update
+                rsResult = Update(Booking);
+            }
+
+            return rsResult;
+
+        }
+
         #region 預訂維護(新增)
 
         /// <summary>
@@ -36,7 +54,7 @@ namespace EasyBL.WEBAPP.WSM
         /// <param name="i_crm">todo: describe i_crm parameter on UpdImportCustomers</param>
         /// <returns></returns>
         /// Origtek framwork API
-        public ResponseMessage Insert(RequestMessage i_crm)
+        public ResponseMessage Insert(SETB_SAL_Booking Booking)
         {
             ResponseMessage rm = null;
             string sMsg = null;
@@ -49,27 +67,12 @@ namespace EasyBL.WEBAPP.WSM
 
                         var sBookingID = Guid.NewGuid().ToString();
 
-                        var oEntity = _fetchEntity<View_SAL_Booking>(i_crm) as SETB_SAL_Booking;
-
-                        _setEntityBase(oEntity, i_crm);
-                        oEntity.BookingID = sBookingID;
-                        oEntity.DelStatus = "N";
-
-
-                        BookingMaintain_QryService bm_qry = new BookingMaintain_QryService();
-
-                        var iOldCout = bm_qry.QueryIntCount(i_crm);
-
-                        if (oEntity.OrderByValue <= iOldCout)
-                        {
-                            var iRelUp = db.Updateable<SETB_SAL_Booking>()
-                                            .UpdateColumns(x => new SETB_SAL_Booking { OrderByValue = x.OrderByValue + 1 })
-                                            .Where(x => x.OrgID == i_crm.ORIGID && x.BookingID == oEntity.BookingID && x.OrderByValue >= oEntity.OrderByValue)
-                                            .ExecuteCommand();
-                        }
+                        Booking.BookingID = sBookingID;
+                        Booking.DelStatus = "N";
+                        Booking.Effective = "Y";
 
-                        var iRel = db.Insertable(oEntity).ExecuteCommand();
-                        rm = new SuccessResponseMessage(null, i_crm);
+                        var iRel = db.Insertable(Booking).ExecuteCommand();
+                        rm = new SuccessResponseMessage(null, null);
                         rm.DATA.Add(BLWording.REL, iRel);
                     } while (false);
 
@@ -79,13 +82,12 @@ namespace EasyBL.WEBAPP.WSM
             catch (Exception ex)
             {
                 sMsg = Util.GetLastExceptionMsg(ex);
-                LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BookingMaintain_UpdService), "", "Insert 預訂維護(新增)", "", "", "");
             }
             finally
             {
                 if (null != sMsg)
                 {
-                    rm = new ErrorResponseMessage(sMsg, i_crm);
+                    rm = new ErrorResponseMessage(sMsg, null);
                 }
             }
             return rm;
@@ -101,7 +103,7 @@ namespace EasyBL.WEBAPP.WSM
         /// <param name="i_crm">todo: describe i_crm parameter on UpdImportCustomers</param>
         /// <returns></returns>
         /// Origtek framwork API
-        public ResponseMessage Update(RequestMessage i_crm)
+        public ResponseMessage Update(SETB_SAL_Booking Booking)
         {
             ResponseMessage rm = null;
             string sMsg = null;
@@ -111,34 +113,14 @@ namespace EasyBL.WEBAPP.WSM
                 {
                     do
                     {
-
-                        var oNewEntity = _fetchEntity<View_SAL_Booking>(i_crm) as SETB_SAL_Booking;
-
-                        _setEntityBase(oNewEntity, i_crm);
-                        oNewEntity.DelStatus = "N";
-
-                        var oOldEntity = db.Queryable<SETB_SAL_Booking>().Single(x => x.OrgID == i_crm.ORIGID && x.BookingID == oNewEntity.BookingID);
-
-                        if (oNewEntity.OrderByValue > oOldEntity.OrderByValue)
-                        {
-                            var iRelUp = db.Updateable<SETB_SAL_Booking>()
-                                            .UpdateColumns(x => new SETB_SAL_Booking { OrderByValue = x.OrderByValue - 1 })
-                                            .Where(x => x.OrgID == oNewEntity.OrgID && x.BookingID == oNewEntity.BookingID && x.OrderByValue <= oNewEntity.OrderByValue && x.OrderByValue > oOldEntity.OrderByValue).ExecuteCommand();
-                        }
-                        else
-                        {
-                            var iRelDown = db.Updateable<SETB_SAL_Booking>()
-                                            .UpdateColumns(x => new SETB_SAL_Booking { OrderByValue = x.OrderByValue + 1 })
-                                            .Where(x => x.OrgID == oNewEntity.OrgID && x.BookingID == oNewEntity.BookingID && x.OrderByValue >= oNewEntity.OrderByValue && x.OrderByValue < oOldEntity.OrderByValue).ExecuteCommand();
-                        }
-
-                        var iRel = db.Updateable(oNewEntity)
+                        
+                        var iRel = db.Updateable(Booking)
                             .IgnoreColumns(x => new
                             {
                                 x.CreateUser,
                                 x.CreateDate
                             }).ExecuteCommand();
-                        rm = new SuccessResponseMessage(null, i_crm);
+                        rm = new SuccessResponseMessage(null, null);
                         rm.DATA.Add(BLWording.REL, iRel);
                     } while (false);
 
@@ -148,13 +130,12 @@ namespace EasyBL.WEBAPP.WSM
             catch (Exception ex)
             {
                 sMsg = Util.GetLastExceptionMsg(ex);
-                LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BookingMaintain_UpdService), "", "Update 預訂維護(修改)", "", "", "");
             }
             finally
             {
                 if (null != sMsg)
                 {
-                    rm = new ErrorResponseMessage(sMsg, i_crm);
+                    rm = new ErrorResponseMessage(sMsg, null);
                 }
             }
             return rm;
diff --git a/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingService.cs b/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingService.cs
index 96b46ee..88b27bc 100644
--- a/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingService.cs
+++ b/EuroTran/EasyBL.WEBAPP/ShowEasy/BookingService.cs
@@ -3,6 +3,7 @@ using EasyBL.WebApi;
 using EasyBL.WebApi.Common;
 using EasyBL.WebApi.Message;
 using EasyBL.WEBAPP.ShowEasy;
+using EasyBL.WEBAPP.WSM;
 using Entity.ShowEasyDtos;
 using Entity.Sugar;
 using Entity.ViewModels;
@@ -86,7 +87,9 @@ namespace EasyBL.WEBAPP.SYS
                     //取Member所有的訂單
                     BookingMaintain_QryService booking_qry = new BookingMaintain_QryService();
 
-                    var allBookingServiceList = booking_qry.FindAllByIDsAsDictionary("", member.MemberID).Values.ToList().Where(w => !string.IsNullOrEmpty(w.ServiceID)).Select(s => s.ServiceID).ToList();
+                    var allBookingServiceList = booking_qry.FindAllByIDsAsDictionary("", "", member.MemberID).Values.ToList()
+                        .Where(w => !string.IsNullOrEmpty(w.ServiceID))
+                        .Select(s => s.ServiceID).ToList();
 
                     //取所有category
                     ServiceSubCategoryMaintain_QryService serviceSub_qry = new ServiceSubCategoryMaintain_QryService();
@@ -240,7 +243,7 @@ namespace EasyBL.WEBAPP.SYS
         /// </summary>
         /// <param name="i_crm"></param>
         /// <returns></returns>
-        public HttpResponseMessage GetOneDetailBooking(string sLanguageID, string sBookingID) {
+        public HttpResponseMessage GetOneDetailBooking(string sLanguageID, string sBookingID, string sBookingNo) {
 
             SuccessResponseMessage srm = null;
             string sError = null;
@@ -255,15 +258,10 @@ namespace EasyBL.WEBAPP.SYS
                         sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
                     }
 
-                    var rsBooking = bm_qry.QueryOneDetailBooking(sLanguageID, sBookingID);
+                    var rsBooking = bm_qry.QueryOneDetailBooking(sLanguageID, sBookingID, sBookingNo);
 
-                    if (rsBooking != null) {
-
-                        var Booking = EntityToDTO(rsBooking);
-
-                        srm = new SuccessResponseMessage(null, null);
-                        srm.DATA.Add(BLWording.REL, Booking);
-                    }
+                    srm = new SuccessResponseMessage(null, null);
+                    srm.DATA.Add(BLWording.REL, rsBooking);
 
                 } while (false);
             }
@@ -286,6 +284,45 @@ namespace EasyBL.WEBAPP.SYS
 
         #endregion 訂單管理(BookingDTO API 以ID查詢單筆訂單)
 
+        public HttpResponseMessage SaveBooking(string sAccount, SETB_SAL_Booking Booking) {
+
+            SuccessResponseMessage srm = null;
+            string sError = null;
+
+            try
+            {
+                do
+                {
+
+                    MemberMaintain_QryService mm_qry = new MemberMaintain_QryService();
+                    var Member = mm_qry.QueryOneByAccount(sAccount);
+
+                    Booking.MemberID = Member.MemberID;
+
+                    BookingMaintain_UpdService bm_upd = new BookingMaintain_UpdService();
+                    var rsResult = bm_upd.SaveBooking(Booking);
+
+                    //返回token信息
+                    srm = new SuccessResponseMessage(null, null);
+                    srm.DATA.Add(BLWording.REL, rsResult.DATA[BLWording.REL]);
+
+                } while (false);
+            }
+            catch (Exception ex)
+            {
+                sError = Util.GetLastExceptionMsg(ex);
+                srm = new SuccessResponseMessage(null, null)
+                {
+                    STATUSCODE = (int)StatusCodeEnum.Error,
+                    MSG = StatusCodeEnum.Error.GetEnumText()
+                };
+                srm.DATA.Add(BLWording.REL, "");
+            }
+
+            return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
+
+        }
+
         private BookingDTO EntityToDTO(View_SAL_Booking entityBooking) {
 
             BookingDTO dtoBooking = new BookingDTO();
diff --git a/EuroTran/Entity/ShowEasyDtos/ContactDTO.cs b/EuroTran/Entity/ShowEasyDtos/ContactDTO.cs
index 6ef49dc..d37cf05 100644
--- a/EuroTran/Entity/ShowEasyDtos/ContactDTO.cs
+++ b/EuroTran/Entity/ShowEasyDtos/ContactDTO.cs
@@ -13,7 +13,7 @@ namespace Entity.ShowEasyDtos
         public string LastName { get; set; }
         public string Email { get; set; }
         public string Phone { get; set; }
-
+        public string MobilePhone { get; set; }
 
     }
 }
diff --git a/EuroTran/Entity/Sugar/SETB_SAL_Booking.cs b/EuroTran/Entity/Sugar/SETB_SAL_Booking.cs
index 3abfd15..9729dd3 100644
--- a/EuroTran/Entity/Sugar/SETB_SAL_Booking.cs
+++ b/EuroTran/Entity/Sugar/SETB_SAL_Booking.cs
@@ -65,6 +65,14 @@ namespace Entity.Sugar
         public string ServiceID { get; set; }
         public const string CN_SERVICEID = "ServiceID";
 
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        public string NoticeDetail { get; set; }
+        public const string CN_NOTICEDETAIL = "NoticeDetail";
+
         /// <summary>
         /// Desc:
         /// Default:
diff --git a/EuroTran/WebApp/Controllers/BookingController.cs b/EuroTran/WebApp/Controllers/BookingController.cs
index ac9c273..3824ceb 100644
--- a/EuroTran/WebApp/Controllers/BookingController.cs
+++ b/EuroTran/WebApp/Controllers/BookingController.cs
@@ -7,6 +7,7 @@ using EasyBL.WEBAPP;
 using EasyBL.WEBAPP.SYS;
 using Entity.ShowEasyDtos;
 using Entity.Sugar;
+using Entity.ViewModels;
 using Newtonsoft.Json;
 using SqlSugar.Base;
 using System;
@@ -49,49 +50,6 @@ namespace WebApp.Controllers
             return new BookingService().GetBookingCategory(SEToken.Account, LangType);
         }
 
-        ///// <summary>
-        ///// 
-        ///// </summary>
-        ///// <param name=""></param>
-        ///// <returns></returns>
-        //[HttpGet]
-        //[SEApiSecurityFilter]
-        //public HttpResponseMessage Bookings(
-        //    string Lang,
-        //    string SubCategoryIDs,
-        //    string BookingStatuses,
-        //    string PaymentStatuses)
-        //{
-
-        //    List<string> rsSubCategoryIDs = new List<string>();
-        //    List<string> rsBookingStatuses = new List<string>();
-        //    List<string> rsPaymentStatuses = new List<string>();
-
-        //    var SEToken = SETokenUtil.GetToken(this.Request);
-
-        //    if (!string.IsNullOrEmpty(SubCategoryIDs))
-        //    {
-        //        rsSubCategoryIDs = JsonConvert.DeserializeObject<List<string>>(SubCategoryIDs);
-        //    }
-
-        //    if (!string.IsNullOrEmpty(BookingStatuses))
-        //    {
-        //        rsBookingStatuses = JsonConvert.DeserializeObject<List<string>>(BookingStatuses);
-        //    }
-
-        //    if (!string.IsNullOrEmpty(PaymentStatuses))
-        //    {
-        //        rsPaymentStatuses = JsonConvert.DeserializeObject<List<string>>(PaymentStatuses);
-        //    }
-
-        //    return new BookingService().GetBookings(SEToken.Account, Lang, rsSubCategoryIDs, rsBookingStatuses, rsPaymentStatuses);
-        //}
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name=""></param>
-        /// <returns></returns>
         [HttpGet]
         [SEApiSecurityFilter]
         public HttpResponseMessage BookingCardList(
@@ -126,13 +84,21 @@ namespace WebApp.Controllers
         }
 
         [HttpGet]
-        //[SEApiSecurityFilter]
-        public HttpResponseMessage Booking (string Lang, string BookingID)
+        public HttpResponseMessage Booking(string Lang, string BookingID, string BookingNo)
+        {
+            return new BookingService().GetOneDetailBooking(Lang, BookingID, BookingNo);
+        }
+
+        [HttpPost]
+        [SEApiSecurityFilter]
+        public HttpResponseMessage Booking(SETB_SAL_Booking Booking)
         {
 
-            //var SEToken = SETokenUtil.GetToken(this.Request);
+            var SEToken = SETokenUtil.GetToken(this.Request);
+
+            Booking.OrgID = SEToken.OrgID;
 
-            return new BookingService().GetOneDetailBooking(Lang, BookingID);
+            return new BookingService().SaveBooking(SEToken.Account, Booking);
         }
 
     }