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.
778 lines
34 KiB
778 lines
34 KiB
|
|
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;
|
|
using Newtonsoft.Json;
|
|
using SqlSugar;
|
|
using SqlSugar.Base;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Http;
|
|
using System.Text;
|
|
using System.Web;
|
|
|
|
namespace EasyBL.WEBAPP.SYS
|
|
{
|
|
//子類別查詢API (服務有包含該類別才列出)
|
|
public class BookingOnlineService : ServiceBase
|
|
{
|
|
#region 子類別查詢API (服務有包含該類別才列出)
|
|
|
|
/// <summary>
|
|
/// 子類別查詢API (服務有包含該類別才列出)
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
///
|
|
public HttpResponseMessage GetBookingCategory(string Account, string Lang)
|
|
{
|
|
SuccessResponseMessage srm = null;
|
|
string sError = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
//取Member所有的訂單
|
|
BookingMaintain_QryService booking_qry = new BookingMaintain_QryService();
|
|
var allBookingServiceList = booking_qry.FindAllByIDsAsDictionary("", "", Account).Values.ToList()
|
|
.Where(w => !string.IsNullOrEmpty(w.ServiceID))
|
|
.Select(s => s.ServiceID).ToList();
|
|
|
|
//取所有category
|
|
ServiceSubCategoryMaintain_QryService serviceSub_qry = new ServiceSubCategoryMaintain_QryService();
|
|
var subCategory = serviceSub_qry.FindAllByIDsAsDictionary("", Lang);
|
|
|
|
//取得所有OnSiteService
|
|
ONSiteMaintain_QryService onSiteService_qry = new ONSiteMaintain_QryService();
|
|
var allService = onSiteService_qry.FindAllByIDsAsDictionary(Lang, "");
|
|
|
|
var ServiceIDSet = new HashSet<string>(); //去重複值
|
|
var CategoryDic = new Dictionary<string, CategoryDTO>();
|
|
|
|
foreach (var ServiceID in allBookingServiceList)
|
|
{
|
|
|
|
SETB_PDT_ONSiteBaseInfo Service = new SETB_PDT_ONSiteBaseInfo();
|
|
|
|
if (allService.ContainsKey(ServiceID))
|
|
{
|
|
Service = allService[ServiceID];
|
|
}
|
|
|
|
var SubCategoryIDList = new List<string>();
|
|
|
|
if (!string.IsNullOrEmpty(Service.SubCategoryID))
|
|
{
|
|
SubCategoryIDList = JsonConvert.DeserializeObject<List<string>>(Service.SubCategoryID);
|
|
}
|
|
|
|
foreach (var subCategoryID in SubCategoryIDList)
|
|
{
|
|
|
|
SETB_SYS_Category category = new SETB_SYS_Category();
|
|
|
|
if (subCategory.ContainsKey(subCategoryID))
|
|
{
|
|
category = subCategory[subCategoryID]; //用subCategoryID在subCategory內找
|
|
}
|
|
|
|
CategoryDTO categoryDTO = new CategoryDTO();
|
|
|
|
categoryDTO.CategoryID = category.CategoryID;
|
|
categoryDTO.CategoryName = category.CategoryName;
|
|
|
|
CategoryDic[categoryDTO.CategoryID] = categoryDTO; //把categoryDTO.CategoryID當作key,把value(categoryDTO)存進CategoryDic
|
|
//存到Dictionary內會去重複值。不用額外用HashSet
|
|
}
|
|
}
|
|
|
|
srm = new SuccessResponseMessage(null, null);
|
|
srm.DATA.Add(BLWording.REL, CategoryDic.Values.ToList());
|
|
|
|
} 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));
|
|
|
|
}
|
|
|
|
#endregion 子類別查詢API (服務有包含該類別才列出)
|
|
|
|
#region My Booking Card
|
|
|
|
/// <summary>
|
|
/// My Booking Card
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
///
|
|
public HttpResponseMessage BookingCardList(string sLanguageID, string sAccount, int iPageIndex, int iPageSize, List<string> SubCategoryIDs, List<string> BookingStatuses, List<string> PaymentStatuses, string Query)
|
|
{
|
|
|
|
SuccessResponseMessage srm = null;
|
|
string sError = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
if (string.IsNullOrEmpty(sLanguageID)) {
|
|
sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
|
|
}
|
|
|
|
BookingMaintain_QryService bm_qry = new BookingMaintain_QryService();
|
|
|
|
var rsResult = bm_qry.QueryAllBookingAsDTO(sLanguageID, sAccount, SubCategoryIDs, BookingStatuses, PaymentStatuses, Query).Values.ToList();
|
|
|
|
// Pagination
|
|
if (iPageSize <= 0)
|
|
{
|
|
iPageSize = 10;
|
|
}
|
|
|
|
if (iPageIndex <= 0)
|
|
{
|
|
iPageIndex = 1;
|
|
}
|
|
|
|
var pml = new PageModel
|
|
{
|
|
PageIndex = iPageIndex,
|
|
PageSize = iPageSize
|
|
};
|
|
|
|
pml.Total = rsResult.Count;
|
|
|
|
rsResult = rsResult.Skip(iPageSize * (iPageIndex - 1)).Take(iPageSize).ToList();
|
|
|
|
pml.DataList = rsResult.ToList();
|
|
|
|
srm = new SuccessResponseMessage(null, null);
|
|
srm.DATA.Add(BLWording.REL, pml);
|
|
|
|
} 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));
|
|
|
|
}
|
|
|
|
#endregion My Booking Card
|
|
|
|
|
|
#region Upload 上傳匯款單
|
|
public HttpResponseMessage UploadRemittance(string OrgID, string Account, string BookingID)
|
|
{
|
|
SuccessResponseMessage srm = null;
|
|
string sError = null;
|
|
try
|
|
{
|
|
var c = HttpContext.Current;
|
|
|
|
var sGUID = Guid.NewGuid().ToString();
|
|
|
|
SECommonService commonService = new SECommonService();
|
|
// 文件上傳
|
|
HttpResponseMessage ret = commonService.UploadRemittance(c, OrgID, Account, BookingID);
|
|
if (ret.StatusCode == HttpStatusCode.OK)
|
|
{
|
|
|
|
var db = SugarBase.DB;
|
|
//SETB_CMS_Member i_crm = new SETB_CMS_Member();
|
|
SETB_SAL_Payment i_crm = new SETB_SAL_Payment();
|
|
|
|
string requestUrl = Common.ConfigGetValue("", "ida:RedirectUri");
|
|
|
|
var sName = db.Queryable<SETB_CMS_Member>() //取會員資料
|
|
.Where(x => x.Account == Account)
|
|
.Single();
|
|
|
|
|
|
var sUploadTime = db.Updateable<SETB_SAL_Payment>() //更新付款時間 + 付款狀態
|
|
.UpdateColumns(x => new SETB_SAL_Payment { PaymentStatus = "Y" })
|
|
.Where(x => x.BookingID == BookingID)
|
|
.ExecuteCommand();
|
|
|
|
var sBookingStatus = db.Updateable<SETB_SAL_BookingOnline>() //更新訂單狀態
|
|
.UpdateColumns(x => new SETB_SAL_BookingOnline { PaymentStatus = "02", ModifyDate = DateTime.Now })
|
|
.Where(x => x.BookingID == BookingID)
|
|
.ExecuteCommand();
|
|
|
|
var sUser = db.Queryable<SETB_SAL_Payment>() //取付款資料
|
|
.Where(x => x.BookingID == BookingID)
|
|
.Single();
|
|
|
|
var sFilePath = db.Queryable<OTB_SYS_Files>() //從file表中取圖
|
|
.Where(x => x.ParentID == sUser.Remittance)
|
|
.Single();
|
|
|
|
var sbookingID = db.Queryable<SETB_SAL_BookingOnline>()
|
|
.Where(x => x.BookingID == BookingID)
|
|
.Single();
|
|
|
|
sUser.Remittance = requestUrl + "/" + sFilePath.FilePath.Replace("\\", "/");
|
|
|
|
//開始寄信
|
|
var oEmail = new Emails(); //寄件人
|
|
var toEmail = new List<EmailTo>(); //收件人
|
|
var oEmailTo = new EmailTo //收件人資訊
|
|
{
|
|
ToUserID = "",
|
|
ToUserName = "ShowEasy",
|
|
ToEmail = "info@showeasy.com",
|
|
Type = "to"
|
|
};
|
|
toEmail.Add(oEmailTo);
|
|
oEmail.FromUserName = "訂單匯款通知"; //取fonfig
|
|
oEmail.Title = "訂單匯款通知"; //取fonfig
|
|
oEmail.EmailBody = CheckPaymentStatus(sName.FirstName, sName.LastName, sbookingID.BookingNo, sbookingID.TotalPrice, sUser.PaymentDate);
|
|
oEmail.IsCCSelf = false;
|
|
oEmail.Attachments = null;
|
|
oEmail.EmailTo = toEmail;
|
|
var bSend = new MailService(OrgID, true).MailFactory(oEmail, out sError);
|
|
|
|
srm = new SuccessResponseMessage(null, null);
|
|
srm.DATA.Add(BLWording.REL, sUser.Remittance);
|
|
}
|
|
}
|
|
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));
|
|
}
|
|
#endregion Upload 上傳匯款單
|
|
|
|
|
|
#region Redirect to Backend
|
|
public HttpResponseMessage RedirectToBackend(string BookingNo)
|
|
{
|
|
//string sMsg = null;
|
|
SuccessResponseMessage srm = SugarBase.ExecTran(db =>
|
|
{
|
|
do
|
|
{
|
|
|
|
var sUser = db.Queryable<SETB_SAL_BookingOnline>() //取付款資料
|
|
.Where(x => x.BookingNo == BookingNo)
|
|
.Single();
|
|
|
|
|
|
srm = new SuccessResponseMessage(null, null);
|
|
srm.DATA.Add("authtoken", sUser);
|
|
|
|
} while (false);
|
|
|
|
return srm;
|
|
});
|
|
|
|
return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
|
|
}
|
|
#endregion Redirect to Backend
|
|
|
|
//Booking Processing Mail Template
|
|
private string CheckPaymentStatus(string FirstName, string LastName, string BookingNo, string Amount, DateTime? date)
|
|
{
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
EmailTemplate_CH mailTemplate = new EmailTemplate_CH();
|
|
var Server = Common.ConfigGetValue("", "ida:RedirectUri");
|
|
|
|
sb.Append(mailTemplate.MailHeader());
|
|
sb.Append(mailTemplate.MailCSS());
|
|
sb.Append(mailTemplate.MailShowEasyLogo());
|
|
//Email Body
|
|
sb.Append("<tr>");
|
|
sb.Append("<td style = \"padding: 0 50px 0 50px; background-color: #f8f8f8\" class=\"sm-p bar\">");
|
|
sb.Append("<table border=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width: 100%\">");
|
|
sb.Append("<tr>");
|
|
sb.Append("<td>");
|
|
sb.Append("<table border = \"0\" cellpadding = \"0\" cellspacing = \"0\" role = \"presentation\" align = \"left\"> ");
|
|
//Text:您好,Janie,
|
|
sb.Append("<tr>");
|
|
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"340\" style = \"display: block;padding-top: 30px;padding-left: 30px;padding-right: 30px;adding-bottom: 10px;font-family: arial, sans-serif;color: #000000;text-align: left\";>");
|
|
sb.Append("<h1 style = \"font-family: 'arial', 'sans-serif'; font-weight: 700; font-size: 16px; line-height: 18px; color: #000000; margin: 0 0 0 0;\">");
|
|
sb.Append("你好,Showeasy內部人員,");
|
|
sb.Append("</h1>");
|
|
sb.Append("</td>");
|
|
sb.Append("</tr>");
|
|
//Text:我們已經成功收到你的付款!
|
|
sb.Append("<tr>");
|
|
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"340\" style = \"display: block;padding-top: 10px;padding-left: 30px;padding-right: 30px;padding-bottom: 30px;font-family: arial, sans-serif;color: #000000;text-align: left;\">");
|
|
sb.Append("<p style = \"font-weight: 400;font-size: 12px;line-height: 14px;letter-spacing: 0.02em;font-family: 'arial', 'sans-serif';margin: 0 0 0px;\" class=\"has-markdown\">");
|
|
sb.Append("您的客戶已上傳匯款證明單,請至後台確認。");
|
|
sb.Append("</p>");
|
|
sb.Append("</td>");
|
|
sb.Append("</tr>");
|
|
//訂單編號
|
|
sb.Append("<tr>");
|
|
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"340\" width = \"340px\" style = \"display: block;padding-top: 20px;padding-left: 30px;padding-right: 30px;color: #504f4f;text-align: left;\">");
|
|
sb.Append("<p style = \"font-weight: 400;font-size: 12px;line-height: 14px;letter-spacing: 0.02em;font-family: 'arial', 'sans-serif';margin: 0 0 0px;\" class=\"has-markdown\">");
|
|
sb.Append("訂單編號: " + BookingNo);
|
|
sb.Append("</p>");
|
|
sb.Append("</td>");
|
|
//客戶名稱
|
|
sb.Append("<tr>");
|
|
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"340\" width = \"340px\" style = \"display: block;padding-top: 10px;padding-left: 30px;padding-right: 30px;color: #504f4f;text-align: left;\">");
|
|
sb.Append("<p style = \"font-weight: 400;font-size: 12px;line-height: 14px;letter-spacing: 0.02em;font-family: 'arial', 'sans-serif';margin: 0 0 0px;\" class=\"has-markdown\">");
|
|
sb.Append("客戶名稱: " + FirstName + " " + LastName);
|
|
sb.Append("</p>");
|
|
sb.Append("</td>");
|
|
//訂單金額
|
|
sb.Append("<tr>");
|
|
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"340\" width = \"340px\" style = \"display: block;padding-top: 10px;padding-left: 30px;padding-right: 30px;color: #504f4f;text-align: left;\">");
|
|
sb.Append("<p style = \"font-weight: 400;font-size: 12px;line-height: 14px;letter-spacing: 0.02em;font-family: 'arial', 'sans-serif';margin: 0 0 0px;\" class=\"has-markdown\">");
|
|
sb.Append("訂單金額: " + Amount);
|
|
sb.Append("</p>");
|
|
sb.Append("</td>");
|
|
//上傳日期
|
|
sb.Append("<tr>");
|
|
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"340\" width = \"340px\" style = \"display: block;padding-top: 10px;padding-left: 30px;padding-right: 30px;padding-bottom: 30px;color: #504f4f;text-align: left;\">");
|
|
sb.Append("<p style = \"font-weight: 400;font-size: 12px;line-height: 14px;letter-spacing: 0.02em;font-family: 'arial', 'sans-serif';margin: 0 0 0px;\" class=\"has-markdown\">");
|
|
sb.Append("上傳日期: " + date);
|
|
sb.Append("</p>");
|
|
sb.Append("</td>");
|
|
sb.Append("</tr>");
|
|
sb.Append("</tr>");
|
|
//查看訂單按鈕
|
|
sb.Append("<tr>");
|
|
sb.Append("<td bgcolor =\"#FEFEFE\" style =\"display: block;padding-top: 30px;font-family: arial, sans-serif;color: #232323;text-align: left;\">");
|
|
sb.Append("<table align =\"center\" border = \"0\" cellpadding = \"0\" cellspacing = \"0\" role = \"presentation\">");
|
|
sb.Append("<tr>");
|
|
sb.Append("<td class=\"s-btn s-btn__primary\" style=\"border-radius: 16px; background: #ee9546\">");
|
|
sb.Append("<a class=\"s-btn s-btn__primary\" href=\"");
|
|
sb.Append(Server + "/api/BookingOnline/RedirectToBackend?BookingNo=" + BookingNo);
|
|
sb.Append(" \" target=\"_parent\" style=\"background: #ee9546;border: 1px solid #ee9546;font-family: arial, sans-serif; font-size: 14px;line-height: 16px; color: #ffffff;text-align: center;text-decoration: none;padding: 12px 20px; display: block; border-radius: 16px; white-space: nowrap;\">");
|
|
//sb.Append("<a class=\"s-btn s-btn__primary\" href=\"https://www.showeasy.com\" target=\"_parent\" style=\"background: #f48800;border: 1px solid #ee9546;font-family: arial, sans-serif;font-size: 14px;line-height: 16px;color: #ffffff;text-align: center;text-decoration: none;padding: 12px 20px;display: block;border-radius: 16px;white-space: nowrap;\">");
|
|
sb.Append("查看訂單");
|
|
sb.Append("</a>");
|
|
sb.Append("</td>");
|
|
sb.Append("</tr>");
|
|
sb.Append("</table>");
|
|
sb.Append("</td>");
|
|
sb.Append("</tr>");
|
|
//如果按鈕無法點擊 (連結記得改成要打的API)
|
|
sb.Append("<tr>");
|
|
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"340\" width = \"340px\" style = \"display: block;padding-bottom: 30px;padding-top: 30px;padding-left: 30px;padding-right: 30px;color: #9c9c9c;text-align: center;\">");
|
|
sb.Append("<p style = \"font-weight: 400;font-size: 12px;line-height: 14px;letter-spacing: 0.02em;font-family: 'arial', 'sans-serif';margin: 0 0 0px;\" class=\"has-markdown\">");
|
|
sb.Append("如果按鈕無法點擊,你可以直接點擊");
|
|
sb.Append("<a href =\"");
|
|
sb.Append(Server + "/api/BookingOnline/RedirectToBackend?BookingNo=" + BookingNo);
|
|
sb.Append("\" style = \"color: #7997ff;font-size: 12px;font-weight: 400;font-family: 'Arial', '微軟正黑體','Microsoft JhengHei', 'Helvetica Neue',Helvetica, Arial, sans-serif;padding: 0;margin: 0;text-align: center;padding-left: 0px;padding-right: 30px;padding-top: 4px;text-decoration: underline;\">");
|
|
sb.Append("<span align=\"center\" width=\"340\">這裡</span>");
|
|
sb.Append("</a>");
|
|
sb.Append("</p>");
|
|
sb.Append("</td>");
|
|
sb.Append("</tr>");
|
|
sb.Append("</table>");
|
|
sb.Append("</td>");
|
|
sb.Append("</tr>");
|
|
sb.Append("</table>");
|
|
sb.Append("</td>");
|
|
sb.Append("</tr>");
|
|
//sb.Append(mailTemplate.MailButtom());
|
|
sb.Append(mailTemplate.MailFooter());
|
|
|
|
return sb.ToString();
|
|
|
|
}
|
|
|
|
#region 取消訂單
|
|
|
|
public HttpResponseMessage CancelBooking(string sAccount, string BookingID, string Lang)
|
|
{
|
|
|
|
SuccessResponseMessage srm = null;
|
|
string sError = null;
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var db = SugarBase.DB;
|
|
var Img = "";
|
|
var sPayment = "";
|
|
var changeBookingStatus = db.Updateable<SETB_SAL_BookingOnline>() //更新訂單狀態
|
|
.UpdateColumns(x => new SETB_SAL_BookingOnline { BookingStatus = "04", ModifyDate = DateTime.Now })
|
|
.Where(x => x.BookingID == BookingID && x.Account == sAccount && x.LangType == Lang)
|
|
.ExecuteCommand();
|
|
|
|
var sUser = db.Queryable<SETB_CMS_Member>() //get Member info
|
|
.Where(x => x.Account == sAccount)
|
|
.Single();
|
|
|
|
var booking = db.Queryable<SETB_SAL_BookingOnline>() //get Booking info
|
|
.Where(x => x.Account == sAccount && x.BookingID == BookingID)
|
|
.Single();
|
|
|
|
var service = db.Queryable<SETB_PDT_ONSiteBaseInfo>() //get Service info
|
|
.Where(x => x.ServiceID == booking.ServiceID && x.LangID == Lang)
|
|
.Single();
|
|
|
|
service.PreviewFile = GetPreviewFile(service.PreviewFile);
|
|
|
|
var supplier = db.Queryable<SETB_SCM_Supplier>() //get Supplier info
|
|
.Where(x => x.SupplierID == service.SupplierID && x.LangType == Lang)
|
|
.Single();
|
|
|
|
var supplierMail = db.Queryable<SETB_SCM_SupplierContactor>() //get Supplier Mail
|
|
.Where(x => x.SupplierID == service.SupplierID && x.LangType == Lang)
|
|
.Single();
|
|
|
|
//var img = db.Queryable<OTB_SYS_Files>() //get img info
|
|
//.Where(x => x.ParentID == sAccount && x.ParentID == service.PreviewFile)
|
|
//.Single();
|
|
|
|
if (!string.IsNullOrEmpty(booking.PaymentStatus))
|
|
{
|
|
if (booking.PaymentStatus == "01")
|
|
{
|
|
sPayment = "未付清";
|
|
}
|
|
else if (booking.PaymentStatus == "02")
|
|
{
|
|
sPayment = "已付款待確認";
|
|
}
|
|
else if (booking.PaymentStatus == "03")
|
|
{
|
|
sPayment = "確認付款";
|
|
}
|
|
else if (booking.PaymentStatus == "04")
|
|
{
|
|
sPayment = "退款中";
|
|
}
|
|
else
|
|
{
|
|
sPayment = "已退款";
|
|
}
|
|
}
|
|
|
|
var OrgID = WebAppGlobalConstWord.TG_ORGID;
|
|
|
|
if (sUser != null)
|
|
{
|
|
|
|
}
|
|
|
|
//寄信給User
|
|
var oEmail = new Emails(); //寄件人
|
|
var toEmail = new List<EmailTo>(); //收件人
|
|
var oEmailTo = new EmailTo //收件人資訊
|
|
{
|
|
ToUserID = sUser.MemberID,
|
|
ToUserName = sUser.LastName,
|
|
ToEmail = sUser.Email,
|
|
Type = "to"
|
|
};
|
|
toEmail.Add(oEmailTo);
|
|
oEmail.FromUserName = "訂單取消通知"; //取fonfig
|
|
oEmail.Title = "訂單取消通知"; //取fonfig
|
|
oEmail.EmailBody = new BookingMail().CancelledBooking(service.PreviewFile, sUser.LastName, booking.BookingStatus, sPayment, booking.BookingNo, booking.BookingItem, booking.BookingDate, booking.ServiceDateS, booking.CurrencyID, booking.TotalPrice, service.ServiceName);
|
|
oEmail.IsCCSelf = false;
|
|
oEmail.Attachments = null;
|
|
oEmail.EmailTo = toEmail;
|
|
var bSend = new MailService(OrgID, true).MailFactory(oEmail, out sError);
|
|
|
|
//寄信給Supplier
|
|
oEmail = new Emails(); //寄件人
|
|
toEmail = new List<EmailTo>(); //收件人
|
|
oEmailTo = new EmailTo //收件人資訊
|
|
{
|
|
ToUserID = sUser.MemberID,
|
|
ToUserName = sUser.LastName,
|
|
ToEmail = sUser.Email,
|
|
Type = "to"
|
|
};
|
|
toEmail.Add(oEmailTo);
|
|
oEmail.FromUserName = "訂單取消通知"; //取fonfig
|
|
oEmail.Title = "訂單取消通知"; //取fonfig
|
|
oEmail.EmailBody = new BookingMail().CancelOrderNotify(booking.BookingNo, service.ServiceName, sUser.FirstName, sUser.LastName, booking.CurrencyID, booking.TotalPrice, booking.ModifyDate);
|
|
oEmail.IsCCSelf = false;
|
|
oEmail.Attachments = null;
|
|
oEmail.EmailTo = toEmail;
|
|
bSend = new MailService(OrgID, true).MailFactory(oEmail, out sError);
|
|
|
|
//返回token信息
|
|
srm = new SuccessResponseMessage(null, null);
|
|
srm.DATA.Add(BLWording.REL, bSend);
|
|
|
|
} 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));
|
|
|
|
}
|
|
|
|
#endregion 取消訂單
|
|
|
|
#region My Booking Card
|
|
public HttpResponseMessage GetOneDetailBooking(string sLanguageID, string sAccount, string sBookingID, string sBookingNo)
|
|
{
|
|
|
|
SuccessResponseMessage srm = null;
|
|
string sError = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
|
|
BookingMaintain_QryService bm_qry = new BookingMaintain_QryService();
|
|
|
|
if (string.IsNullOrEmpty(sLanguageID))
|
|
{
|
|
sLanguageID = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
|
|
}
|
|
|
|
var rsBooking = bm_qry.QueryOneDetailBooking(sLanguageID, sAccount, sBookingID, sBookingNo);
|
|
|
|
srm = new SuccessResponseMessage(null, null);
|
|
srm.DATA.Add(BLWording.REL, rsBooking);
|
|
|
|
} 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));
|
|
|
|
|
|
|
|
}
|
|
|
|
#endregion My Booking Card
|
|
|
|
public HttpResponseMessage SaveBookingStatus(string sBookingID, string sBookingStatus) {
|
|
|
|
SuccessResponseMessage srm = null;
|
|
string sError = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
RequestMessage i_crm = new RequestMessage();
|
|
i_crm.DATA.Add("BookingID", sBookingID);
|
|
i_crm.DATA.Add("BookingStatus", sBookingStatus);
|
|
|
|
BookingMaintain_UpdService bm_upd = new BookingMaintain_UpdService();
|
|
|
|
var rsResult = bm_upd.UpdateBookingStatus(i_crm);
|
|
|
|
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));
|
|
|
|
}
|
|
|
|
public static Dictionary<string, BookingDTO> EntityDicToDTODic(Dictionary<string, View_SAL_BookingOnline> BookingDic)
|
|
{
|
|
|
|
Dictionary<string, BookingDTO> rsBookingDTODic = new Dictionary<string, BookingDTO>();
|
|
|
|
foreach (var entityBooking in BookingDic.Values)
|
|
{
|
|
|
|
BookingDTO rsBookingDTO = new BookingDTO();
|
|
|
|
rsBookingDTO.BookingID = entityBooking.BookingID;
|
|
rsBookingDTO.BookingNo = entityBooking.BookingNo;
|
|
rsBookingDTO.BookingDate = entityBooking.BookingDate;
|
|
rsBookingDTO.LanguageID = entityBooking.LangType;
|
|
|
|
if (!string.IsNullOrEmpty(entityBooking.BookingItem))
|
|
{
|
|
rsBookingDTO.BookingDetail = JsonConvert.DeserializeObject<List<string>>(entityBooking.BookingItem);
|
|
}
|
|
|
|
OnSiteServiceDTO rsOnSiteService = new OnSiteServiceDTO();
|
|
rsOnSiteService.ServiceID = entityBooking.ServiceID;
|
|
rsBookingDTO.OnSiteService = rsOnSiteService;
|
|
|
|
rsBookingDTO.NoticeDetail = entityBooking.Message;
|
|
//rsBookingDTO.OtherDetail = entityBooking.OtherDetail;
|
|
//rsBookingDTO.InvoiceID = entityBooking.InvoiceID;
|
|
|
|
MemberDTO rsMember = new MemberDTO();
|
|
//rsMember.MemberID = entityBooking.MemberID;
|
|
rsMember.Account = entityBooking.Account;
|
|
//rsBookingDTO.MemberID = entityBooking.MemberID;
|
|
rsBookingDTO.Member = rsMember;
|
|
|
|
//rsBookingDTO.PurchaserType = entityBooking.PurchaserType;
|
|
|
|
ContactDTO rsContact = new ContactDTO();
|
|
//rsContact.ContactID = entityBooking.ContactID;
|
|
rsBookingDTO.Contact = rsContact;
|
|
|
|
PaymentDTO rsPayment = new PaymentDTO();
|
|
//rsPayment.PaymentID = entityBooking.PaymentID;
|
|
rsPayment.PaymentMethod = entityBooking.PayType;
|
|
rsBookingDTO.Payment = rsPayment;
|
|
|
|
//rsBookingDTO.ShippingID = entityBooking.ShippingID;
|
|
rsBookingDTO.BookingStatus = entityBooking.BookingStatus;
|
|
//rsBookingDTO.Quantity = entityBooking.Quantity;
|
|
|
|
CurrencyDTO rsCurrency = new CurrencyDTO();
|
|
rsCurrency.CurrencyCode = entityBooking.CurrencyID;
|
|
rsBookingDTO.Currency = rsCurrency;
|
|
|
|
//rsBookingDTO.TaxRateID = entityBooking.TaxRateID;
|
|
rsBookingDTO.TotalPrice = entityBooking.TotalPrice;
|
|
//rsBookingDTO.CancellationPolicy = entityBooking.CancellationPolicy;
|
|
rsBookingDTO.Memo = entityBooking.Memo;
|
|
|
|
rsBookingDTODic[rsBookingDTO.BookingID] = rsBookingDTO;
|
|
|
|
}
|
|
|
|
return rsBookingDTODic;
|
|
}
|
|
|
|
//Find BookingID
|
|
public HttpResponseMessage FindBookingID(string Lang, string Account, string BookingNo)
|
|
{
|
|
|
|
SuccessResponseMessage srm = null;
|
|
string sError = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
|
|
var BookindID = db.Queryable<SETB_SAL_BookingOnline>()
|
|
.Where(x => x.LangType == Lang && x.Account == Account && x.BookingNo == BookingNo)
|
|
.Single();
|
|
|
|
srm = new SuccessResponseMessage(null, null);
|
|
srm.DATA.Add(BLWording.REL, BookindID.BookingID);
|
|
|
|
} 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));
|
|
|
|
}
|
|
|
|
//取得封面圖片
|
|
public string GetPreviewFile(string PreviewFile)
|
|
{
|
|
var sFilePath = "";
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var sORIGID = WebAppGlobalConstWord.TG_ORGID;
|
|
string requestUrl = Common.ConfigGetValue("", "ida:RedirectUri");
|
|
var oFilePath = db.Queryable<OTB_SYS_Files>()
|
|
.Where(x => x.ParentID == PreviewFile && x.OrgID == sORIGID)
|
|
.Select(x => new FileDTO
|
|
{
|
|
FileID = x.FileID,
|
|
FileName = x.FileName,
|
|
FilePath = x.FilePath
|
|
})
|
|
.Single();
|
|
|
|
|
|
if (oFilePath != null)
|
|
{
|
|
sFilePath = requestUrl + "/" + oFilePath.FilePath.Replace("\\", "/");
|
|
|
|
}
|
|
return sFilePath;
|
|
|
|
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
return sFilePath;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|