You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

947 lines
33 KiB

using EasyBL.WebApi.Message;
using EasyBL.WEBAPP.ShowEasy;
using EasyBL.WEBAPP.WSM;
using Entity.ShowEasyDtos;
using Entity.Sugar;
using Entity.ViewModels;
using Newtonsoft.Json;
using SqlSugar;
using SqlSugar.Base;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace EasyBL.WEBAPP.SYS
{
public class BookingMaintain_QryService : ServiceBase
{
#region 預訂管理(分頁查詢)
/// <summary>
/// 預訂管理(分頁查詢)
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
/// Origtek framwork API
public ResponseMessage QueryPage(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.DB;
try
{
do
{
var pml = new PageModel
{
PageIndex = _fetchInt(i_crm, @"pageIndex"),
PageSize = _fetchInt(i_crm, @"pageSize")
};
var iPageCount = 0;
var sSortField = _fetchString(i_crm, @"sortField");
var sSortOrder = _fetchString(i_crm, @"sortOrder");
var sLanguageID = _fetchString(i_crm, @"LanguageID");
if (string.IsNullOrEmpty(sLanguageID)) {
sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
}
var sBookingNo = _fetchString(i_crm, @"BookingNo");
var sCustomer = _fetchString(i_crm, @"Customer");
var sBookingStatus = _fetchString(i_crm, @"BookingStatus");
var sSupplierStatus = _fetchString(i_crm, @"SupplierStatus");
var sPaymentStatus = _fetchString(i_crm, @"PaymentStatus");
var sBookingStartDate = _fetchString(i_crm, @"BookingStartDate");
var dateBookingStartDate = DateTime.Now.AddMonths(-1);
if (!string.IsNullOrEmpty(sBookingStartDate))
{
dateBookingStartDate = DateTime.ParseExact(sBookingStartDate, "yyyy-MM-dd", DateTimeFormatInfo.InvariantInfo);
}
var sBookingEndDate = _fetchString(i_crm, @"BookingEndDate");
var dateBookingEndDate = DateTime.Now;
if (!string.IsNullOrEmpty(sBookingEndDate))
{
dateBookingEndDate = DateTime.ParseExact(sBookingEndDate, "yyyy-MM-dd", DateTimeFormatInfo.InvariantInfo);
}
if (dateBookingStartDate > dateBookingEndDate)
{
var dateTemp = dateBookingEndDate;
dateBookingEndDate = dateBookingStartDate;
dateBookingStartDate = dateTemp;
}
var sServiceStartDate = _fetchString(i_crm, @"ServiceStartDate");
var dateServiceStartDate = DateTime.Now.AddMonths(-1);
if (!string.IsNullOrEmpty(sServiceStartDate))
{
dateServiceStartDate = DateTime.ParseExact(sServiceStartDate, "yyyy-MM-dd", DateTimeFormatInfo.InvariantInfo);
}
var sServiceEndDate = _fetchString(i_crm, @"ServiceEndDate");
var dateServiceEndDate = DateTime.Now;
if (!string.IsNullOrEmpty(sServiceEndDate))
{
dateServiceEndDate = DateTime.ParseExact(sServiceEndDate, "yyyy-MM-dd", DateTimeFormatInfo.InvariantInfo);
}
if (dateServiceStartDate > dateServiceEndDate)
{
var dateTemp = dateServiceEndDate;
dateServiceEndDate = dateServiceStartDate;
dateServiceStartDate = dateTemp;
}
var sEffective = _fetchString(i_crm, @"Effective");
var bExcel = _fetchBool(i_crm, @"Excel");
var BookingDic = FindAllDetailByIDsAsDictionary(sLanguageID, "", "", "");
var BookingList = db.Queryable<SETB_SAL_Booking, SETB_CMS_Member, SETB_PDT_ServiceBaseInfo>((t1, t2, t3) => new object[] {
JoinType.Left, t1.MemberID == t2.MemberID,
JoinType.Left, t1.ServiceID == t3.ServiceID,
})
.Where(t1 => t1.OrgID == i_crm.ORIGID && t1.DelStatus != "Y")
.WhereIF(!string.IsNullOrEmpty(sBookingNo), t1 => t1.BookingNo.Contains(sBookingNo))
.WhereIF(!string.IsNullOrEmpty(sBookingStatus), t1 => t1.BookingStatus == sBookingStatus)
.WhereIF(!string.IsNullOrEmpty(sSupplierStatus), t1 => t1.SupplierStatus == sSupplierStatus)
.WhereIF(!string.IsNullOrEmpty(sPaymentStatus), t1 => t1.PaymentStatus == sPaymentStatus)
.Where(t1 => SqlFunc.Between(t1.BookingDate, dateBookingStartDate, dateBookingEndDate))
.Where(t1 => SqlFunc.Between(t1.ServiceStartDate, dateServiceStartDate, dateServiceEndDate))
.WhereIF(!string.IsNullOrEmpty(sCustomer), (t1, t2) => t2.FirstName.Contains(sCustomer) || t2.LastName.Contains(sCustomer))
.Where(t1 => sEffective.Contains(t1.Effective))
.Select((t1, t2, t3) => new View_SAL_Booking
{
BookingID = SqlFunc.GetSelfAndAutoFill(t1.BookingID),
OrderCount = SqlFunc.Subqueryable<View_SAL_Booking>()
.Where(p => p.OrgID == t1.OrgID && p.DelStatus == "N")
.Count()
})
.MergeTable()
.OrderBy(sSortField, sSortOrder)
.ToPageList(pml.PageIndex, bExcel ? 100000 : pml.PageSize, ref iPageCount);
pml.Total = iPageCount;
var rsBookingDic = new Dictionary<string, View_SAL_Booking>();
foreach (var Booking in BookingList) {
if (BookingDic.ContainsKey(Booking.BookingID)) {
rsBookingDic[Booking.BookingID] = BookingDic[Booking.BookingID];
}
}
pml.DataList = rsBookingDic.Values.ToList();
rm = new SuccessResponseMessage(null, i_crm);
if (bExcel)
{
const string sFileName = "預訂管理";
var oHeader = new Dictionary<string, string>
{
{ "RowIndex", "項次" },
{ "BookingID","預訂編號" },
{ "BookingNo","預訂號碼" },
{ "Effective", "狀態(Y:有效;N:無效)" },
{ "OrderByValue", "排序" }
};
var dicAlain = ExcelService.GetExportAlain(oHeader, "Effective");
var saBooking = pml.DataList as List<View_SAL_Booking>;
var bOk = new ExcelService().CreateExcelByList(saBooking, out string sPath, oHeader, dicAlain, sFileName);
rm.DATA.Add(BLWording.REL, sPath);
}
else
{
rm.DATA.Add(BLWording.REL, pml);
}
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BookingMaintain_QryService), "", "QueryPage 預訂管理(分頁查詢)", "", "", "");
System.Diagnostics.Debug.WriteLine("預訂管理 sMsg" + ": " + sMsg);
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 預訂管理(分頁查詢)
#region 預訂管理(單筆查詢)
/// <summary>
/// 預訂管理(單筆查詢)
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
/// Origtek framwork API
public ResponseMessage QueryOne(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
var sBookingID = _fetchString(i_crm, @"BookingID");
var sLanguageID = _fetchString(i_crm, @"LanguageID");
if (string.IsNullOrEmpty(sLanguageID)) {
sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
}
var rsBooking = QueryOneDetailBooking(sLanguageID, "", sBookingID, "");
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, rsBooking);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BookingMaintain_QryService), "", "QueryOne 預訂管理(單筆查詢)", "", "", "");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 預訂管理(單筆查詢)
#region 預訂管理(查詢筆數)
/// <summary>
/// 預訂管理(查詢筆數)
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
/// Origtek framwork API
public ResponseMessage QueryCout(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
int iCount = QueryIntCount(i_crm);
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, iCount);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BookingMaintain_QryService), "", "QueryCout 預訂管理(查詢筆數)", "", "", "");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 預訂管理(查詢筆數)
#region 預訂管理(查詢int筆數)
/// <summary>
/// 預訂管理(查詢int筆數)
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
public int QueryIntCount(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
int iCount = 0;
try
{
do
{
var sBookingNo = _fetchString(i_crm, @"BookingNo");
iCount = db.Queryable<SETB_SAL_Booking>()
.Where(x => x.OrgID == i_crm.ORIGID && x.DelStatus != "Y")
.WhereIF(!string.IsNullOrEmpty(sBookingNo), x => x.BookingNo == sBookingNo)
.Count();
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, iCount);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BookingMaintain_QryService), "", "QueryIntCount 預訂管理(查詢int筆數)", "", "", "");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return iCount;
}
#endregion 預訂管理(查詢int筆數)
#region 預訂管理(更新排序 call BookingMaintain_UpdService UpdateOrderByValue)
/// <summary>
/// 預訂管理(更新排序 call BookingMaintain_UpdService UpdateOrderByValue)
/// </summary>
/// <param name="i_crm">todo: describe i_crm parameter on UpdImportCustomers</param>
/// <returns></returns>
/// Origtek framwork API
public ResponseMessage UpdateOrderByValue(RequestMessage i_crm)
{
BookingMaintain_UpdService bm_upd = new BookingMaintain_UpdService();
ResponseMessage rm = bm_upd.UpdateOrderByValue(i_crm);
return rm;
}
#endregion 預訂管理(更新排序 call BookingMaintain_UpdService UpdateOrderByValue)
#region 預訂管理(List 預訂狀態選單查詢)
/// <summary>
/// 預訂管理(List 預訂狀態選單查詢)
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
///
public ResponseMessage QueryBookingStatusList(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
var sArgumentClassID = "BookingStatus";
var saBookingStatus = db.Queryable<OTB_SYS_Arguments>()
//搜尋條件
.Where(t1 => t1.OrgID == i_crm.ORIGID && t1.DelStatus != "Y" && t1.Effective == "Y")
.Where(t1 => t1.ArgumentClassID == sArgumentClassID)
.ToList();
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, saBookingStatus);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BookingMaintain_QryService), "", "QueryBookingStatusList 預訂管理(List 預訂狀態選單查詢)", "", "", "");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 預訂管理(List 預訂狀態選單查詢)
#region 預訂管理(List 供應商狀態選單查詢)
/// <summary>
/// 預訂管理(List 供應商狀態選單查詢)
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
///
public ResponseMessage QuerySupplierStatusList(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
var sArgumentClassID = "SupplierStatus";
var saBookingStatus = db.Queryable<OTB_SYS_Arguments>()
//搜尋條件
.Where(t1 => t1.OrgID == i_crm.ORIGID && t1.DelStatus != "Y" && t1.Effective == "Y")
.Where(t1 => t1.ArgumentClassID == sArgumentClassID)
.ToList();
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, saBookingStatus);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BookingMaintain_QryService), "", "QuerySupplierStatusList 預訂管理(List 供應商狀態選單查詢)", "", "", "");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 預訂管理(List 供應商狀態選單查詢)
#region 預訂管理(List 付款狀態選單查詢)
/// <summary>
/// 預訂管理(List 付款狀態選單查詢)
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
///
public ResponseMessage QueryPaymentStatusList(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
var sArgumentClassID = "PaymentStatus";
var saBookingStatus = db.Queryable<OTB_SYS_Arguments>()
//搜尋條件
.Where(t1 => t1.OrgID == i_crm.ORIGID && t1.DelStatus != "Y" && t1.Effective == "Y")
.Where(t1 => t1.ArgumentClassID == sArgumentClassID)
.ToList();
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, saBookingStatus);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BookingMaintain_QryService), "", "QueryPaymentStatusList 預訂管理(List 付款狀態選單查詢)", "", "", "");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 預訂管理(List 付款狀態選單查詢)
#region 預訂管理(List 幣別列表 call ServiceMaintain_UpdService QueryCurrencyList)
/// <summary>
/// 預訂管理(List 幣別列表 call ServiceMaintain_UpdService QueryCurrencyList)
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
public ResponseMessage QueryCurrencyList(RequestMessage i_crm)
{
ServiceMaintain_QryService sm_qry = new ServiceMaintain_QryService();
ResponseMessage rm = sm_qry.QueryCurrencyList(i_crm);
return rm;
}
#endregion 預訂管理(List 幣別列表 call ServiceMaintain_UpdService QueryCurrencyList)
//QueryALLBookingAsDic
public Dictionary<string, View_SAL_Booking> FindAllByIDsAsDictionary(string sBookingID, string sBookingNo, string sMemberID)
{
string sMsg = null;
var db = SugarBase.GetIntance();
Dictionary<string, View_SAL_Booking> saBookingDic = new Dictionary<string, View_SAL_Booking>();
try
{
do
{
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 {
BookingID = SqlFunc.GetSelfAndAutoFill(t1.BookingID)
})
.ToList();
foreach (var booking in saBookingList)
{
saBookingDic[booking.BookingID] = booking;
}
return saBookingDic;
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
}
return saBookingDic;
}
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, sBookingNo, sMemberID);
MemberMaintain_QryService mm_qry = new MemberMaintain_QryService();
var MemberDic = mm_qry.FindAllByIDsAsDictionary(sMemberID, "");
ContactMaintain_QryService cm_qry = new ContactMaintain_QryService();
var ContactDic = cm_qry.FindAllByIDsAsDictionary("", "");
CompanyMaintain_QryService com_cry = new CompanyMaintain_QryService();
var CompanyDic = com_cry.FindAllByIDsAsDictionary("", "");
ONSiteMaintain_QryService osm_qry = new ONSiteMaintain_QryService();
var OnSiteServiceDic = osm_qry.FindAllDetailByIDsAsDictionary(sLanguageID, "");
PaymentMaintain_QryService pm_qry = new PaymentMaintain_QryService();
var PaymentDic = pm_qry.FindAllByIDsAsDictionary("", sBookingID);
foreach (var Booking in BookingDic.Values) {
// set Member
if (!string.IsNullOrEmpty(Booking.MemberID))
{
if (MemberDic.ContainsKey(Booking.MemberID))
{
Booking.Member = MemberDic[Booking.MemberID];
}
}
// set PurchaserContact
if (!string.IsNullOrEmpty(Booking.PurchaserID))
{
if (MemberDic.ContainsKey(Booking.PurchaserID))
{
Booking.PurchaserContact = ContactDic[Booking.PurchaserID];
}
}
// set Contact
if (!string.IsNullOrEmpty(Booking.ContactID))
{
if (ContactDic.ContainsKey(Booking.ContactID))
{
Booking.BookingContact = ContactDic[Booking.ContactID];
}
}
// set OnSiteContact
if (!string.IsNullOrEmpty(Booking.OnSiteContactID))
{
if (ContactDic.ContainsKey(Booking.OnSiteContactID))
{
Booking.OnSiteContact = ContactDic[Booking.OnSiteContactID];
}
}
// set PurchaserCompany
if (!string.IsNullOrEmpty(Booking.PurchaserCompanyID))
{
if (CompanyDic.ContainsKey(Booking.PurchaserCompanyID))
{
Booking.PurchaserCompany = CompanyDic[Booking.PurchaserCompanyID];
}
}
// set OnSiteService
if (!string.IsNullOrEmpty(Booking.ServiceID))
{
if (OnSiteServiceDic.ContainsKey(Booking.ServiceID))
{
Booking.OnSiteService = OnSiteServiceDic[Booking.ServiceID];
}
}
// set Payment
if (!string.IsNullOrEmpty(Booking.PaymentID))
{
if (PaymentDic.ContainsKey(Booking.PaymentID))
{
Booking.Payment = PaymentDic[Booking.PaymentID];
}
}
rsBookingDic[Booking.BookingID] = Booking;
}
return rsBookingDic;
}
public View_SAL_Booking QueryOneDetailBooking(string sLanguageID, string sMemberID, string sBookingID, string sBookingNo) {
var Booking = FindAllDetailByIDsAsDictionary(sLanguageID, sBookingID, sBookingNo, sMemberID).Values.ToList()
.FirstOrDefault();
return Booking;
}
public Dictionary<string, View_SAL_Booking> QueryAllBooking(
string sLanguageID,
string sMemberID,
List<string> SubCategoryIDs,
List<string> BookingStatus,
List<string> PaymentStatus) {
if (string.IsNullOrEmpty(sLanguageID)) {
sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
}
var BookingDic = FindAllDetailByIDsAsDictionary(sLanguageID, "", "", sMemberID);
BookingDic = FilterByMemberID(BookingDic, sMemberID);
if (SubCategoryIDs.Count > 0) {
BookingDic = FilterBySubCateogyIDs(BookingDic, SubCategoryIDs);
}
if (BookingStatus.Count > 0)
{
BookingDic = FilterByBookingStatus(BookingDic, BookingStatus);
}
if (PaymentStatus.Count > 0)
{
BookingDic = FilterByPaymentStatus(BookingDic, PaymentStatus);
}
return BookingDic;
}
public Dictionary<string, View_SAL_Booking> FilterByMemberID(Dictionary<string, View_SAL_Booking> BookingDic, string sMemberID) {
Dictionary<string, View_SAL_Booking> rsBookingDic = new Dictionary<string, View_SAL_Booking>();
var BookingList = BookingDic.Values.ToList().Where(w => w.Member.MemberID == sMemberID).ToList();
foreach (var Booking in BookingList) {
rsBookingDic[Booking.BookingID] = Booking;
}
return rsBookingDic;
}
public Dictionary<string, View_SAL_Booking> FilterBySubCateogyIDs(Dictionary<string, View_SAL_Booking> BookingDic, List<string> SubCategoryIDs) {
Dictionary<string, View_SAL_Booking> rsBookingDic = new Dictionary<string, View_SAL_Booking>();
foreach (var Booking in BookingDic.Values) {
List<string> rsSubCategoryIDs = new List<string>();
if (Booking.OnSiteService != null) {
if (Booking.OnSiteService.SubCategoryID != null) {
rsSubCategoryIDs = JsonConvert.DeserializeObject<List<string>>(Booking.OnSiteService.SubCategoryID);
}
}
bool hasMatch = rsSubCategoryIDs.Intersect(SubCategoryIDs).Any();
if (hasMatch)
{
rsBookingDic[Booking.BookingID] = Booking;
}
}
return rsBookingDic;
}
public Dictionary<string, View_SAL_Booking> FilterByBookingStatus(Dictionary<string, View_SAL_Booking> BookingDic, List<string> BookingStatuses)
{
Dictionary<string, View_SAL_Booking> rsBookingDic = new Dictionary<string, View_SAL_Booking>();
var rsBookingList = BookingDic.Values.Where(w => !string.IsNullOrEmpty(w.BookingStatus)).ToList();
foreach (var Booking in rsBookingList)
{
bool hasMatch = BookingStatuses.Contains(Booking.BookingStatus);
if (hasMatch)
{
rsBookingDic[Booking.BookingID] = Booking;
}
}
return rsBookingDic;
}
public Dictionary<string, View_SAL_Booking> FilterByPaymentStatus(Dictionary<string, View_SAL_Booking> BookingDic, List<string> PaymentStatuses)
{
Dictionary<string, View_SAL_Booking> rsBookingDic = new Dictionary<string, View_SAL_Booking>();
var rsBookingList = BookingDic.Values.Where(w => !string.IsNullOrEmpty(w.PaymentStatus)).ToList();
foreach (var Booking in rsBookingList)
{
bool hasMatch = PaymentStatuses.Contains(Booking.PaymentStatus);
if (hasMatch)
{
rsBookingDic[Booking.BookingID] = Booking;
}
}
return rsBookingDic;
}
public Dictionary<string, BookingDTO> QueryBookingCardList (
string sLanguageID,
string sMemberID,
List<string> SubCategoryIDs,
List<string> BookingStatus,
List<string> PaymentStatus)
{
Dictionary<string, BookingDTO> rsBookingDic = new Dictionary<string, BookingDTO>();
FileMaintain_QryService fm_qry = new FileMaintain_QryService();
if (string.IsNullOrEmpty(sLanguageID))
{
sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
}
var BookingDic = FindAllDetailByIDsAsDictionary(sLanguageID, "", "", sMemberID);
BookingDic = FilterByMemberID(BookingDic, sMemberID);
if (SubCategoryIDs.Count > 0)
{
BookingDic = FilterBySubCateogyIDs(BookingDic, SubCategoryIDs);
}
if (BookingStatus.Count > 0)
{
BookingDic = FilterByBookingStatus(BookingDic, BookingStatus);
}
if (PaymentStatus.Count > 0)
{
BookingDic = FilterByPaymentStatus(BookingDic, PaymentStatus);
}
CurrencyMaintain_QryService cm_qry = new CurrencyMaintain_QryService();
var CurrencyDic = cm_qry.FindAllByIDsAsDictionary(sLanguageID);
SupplierMaintain_QryService sm_qry = new SupplierMaintain_QryService();
var ProviderDic = sm_qry.FindAllByIDsAsDictionary(sLanguageID);
foreach (var Booking in BookingDic.Values) {
var rsBooking = new BookingDTO();
rsBooking.BookingID = Booking.BookingID;
rsBooking.BookingNo = Booking.BookingNo;
rsBooking.BookingStatus = Booking.BookingStatus;
rsBooking.BookingDate = Booking.BookingDate;
rsBooking.BookingDetail = Booking.BookingDetail;
rsBooking.TotalPrice = Booking.TotalPrice;
rsBooking.Memo = Booking.Memo;
OnSiteServiceDTO rsOnSiteService = new OnSiteServiceDTO();
rsOnSiteService.ServiceID = Booking.OnSiteService.ServiceID;
rsOnSiteService.ServiceName = Booking.OnSiteService.ServiceName;
rsOnSiteService.ServiceStartDate = Booking.ServiceStartDate;
rsOnSiteService.ServiceEndDate = Booking.ServiceEndDate;
rsOnSiteService.Logo = fm_qry.FindOneImageURL(Booking.OnSiteService.PreviewFile);
if (!string.IsNullOrEmpty(Booking.OnSiteService.SupplierID)) {
if (ProviderDic.ContainsKey(Booking.OnSiteService.SupplierID)) {
var Provider = ProviderDic[Booking.OnSiteService.SupplierID];
ProviderDTO rsProvider = new ProviderDTO();
rsProvider.ProviderID = Provider.SupplierID;
rsProvider.ProviderName = Provider.CompanyName;
rsProvider.Logo = fm_qry.FindOneImageURL(Provider.LogoFile);
rsOnSiteService.Provider = rsProvider;
}
}
rsBooking.OnSiteService = rsOnSiteService;
rsBooking.OtherDetail = Booking.OtherDetail;
PaymentDTO rsPayment = new PaymentDTO();
rsPayment.PaymentID = Booking.PaymentID;
rsPayment.PaymentStatus = Booking.PaymentStatus;
rsPayment.Amount = Booking.TotalPrice;
if (!string.IsNullOrEmpty(Booking.CurrencyID)) {
if (CurrencyDic.ContainsKey(Booking.CurrencyID)) {
rsPayment.Currency = CurrencyDic[Booking.CurrencyID];
}
}
rsBooking.Payment = rsPayment;
ContactDTO Contact = new ContactDTO();
Contact.ContactID = Booking.ContactID;
Contact.FirstName = Booking.ContactFirstName;
Contact.LastName = Booking.ContactLastName;
Contact.Phone = Booking.ContactPhone;
Contact.Email = Booking.ContactEmail;
rsBooking.Contact = Contact;
rsBooking.CancellationPolicy = Booking.CancellationPolicy;
rsBookingDic[rsBooking.BookingID] = rsBooking;
}
return rsBookingDic;
}
}
}