using EasyBL.WebApi.Message;
using Entity;
using Entity.Sugar;
using Entity.ViewModels;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using SqlSugar.Base;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
namespace EasyBL.WEBAPP.OPM
{
public class OpmComService : ServiceBase
{
#region 驗證發票號碼是否重複key入
///
/// 驗證發票號碼是否重複key入
///
/// todo: describe i_crm parameter on CheckInvoiceNumber
///
public ResponseMessage CheckInvoiceNumber(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.DB;
try
{
do
{
var bExsit = false;
var sInvoiceNumber = _fetchString(i_crm, @"InvoiceNumber");
bExsit = db.Queryable().Any(it => it.InvoiceNumber == sInvoiceNumber && it.OrgID == i_crm.ORIGID);
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, bExsit);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"CheckInvoiceNumber(驗證發票號碼是否重複key入)", @"", @"", @"");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 驗證發票號碼是否重複key入
#region 獲取賬單資料
///
/// 獲取賬單資料
///
/// todo: describe i_crm parameter on GetBills
///
public ResponseMessage GetBills(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.DB;
try
{
do
{
var sBillNO = _fetchString(i_crm, @"BillNO");
//20200721 調整抓取資料回推由一年改為兩年
var rDate = DateTime.Now.AddYears(-2);
var saBillInfo = db.Queryable()
.OrderBy(x => x.CreateDate)
.Where(x => x.OrgID == i_crm.ORIGID && x.CreateDate > rDate)
.WhereIF(!string.IsNullOrEmpty(sBillNO), x => x.BillNO == sBillNO)
.Select(x => new { x.BillNO })
.ToList();
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, saBillInfo);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"GetBills(獲取賬單資料)", @"", @"", @"");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 獲取賬單資料
#region 預設預約單資料
///
/// 預設預約單資料
///
/// todo: describe i_crm parameter on InitAppoint
///
public ResponseMessage InitAppoint(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
var sAppointNO = _fetchString(i_crm, @"AppointNO");
//預約單基本資料
var oTempl = db.Queryable(
(t1, t2) => new object[]
{
JoinType.Inner, t1.OrgID == t2.OrgID && t1.ExhibitionNO == t2.SN.ToString()
}
)
.Where((t1, t2) => t1.OrgID == i_crm.ORIGID && t1.AppointNO == sAppointNO)
.Select((t1, t2) => new OTB_OPM_OtherExhibition
{
OrgID = t1.OrgID,
ExhibitionNO = t2.SN.ToString(),
ImportBillName = t2.Exhibitioname_TW,
ImportBillEName = t2.Exhibitioname_EN,
ExhibitionDateStart = t2.ExhibitionDateStart,
ExhibitionDateEnd = t2.ExhibitionDateEnd,
Hall = t2.ExhibitionAddress,
MuseumMumber = t1.MuseumMumber,
Supplier = @"",
Contactor = t1.AppointUser,
Telephone = t1.AppointTel,
SitiContactor = t1.Contactor,
SitiTelephone = t1.ContactTel,
ApproachTime = t1.ApproachTime,
ExitTime = t1.ExitTime
})
.Single();
var oImportCustomers = db.Queryable(
(t1, t2) => new object[]
{
JoinType.Inner, t1.OrgID == t2.OrgID && t1.CustomerId == t2.guid.ToString()
}
)
.Where((t1, t2) => t1.OrgID == i_crm.ORIGID && t1.AppointNO == sAppointNO)
.Select((t1, t2) => new
{
t2.FormalGuid,
})
.Single();
oTempl.Supplier = oImportCustomers.FormalGuid;
//該展覽所有廠商(排除已經產生賬單的資料)
var saImportCustomers = db.Queryable(
(t1, t2) => new object[]
{
JoinType.Inner, t1.OrgID == t2.OrgID && t1.CustomerId == t2.guid.ToString()
}
)
.Where((t1, t2) => t1.OrgID == i_crm.ORIGID && t1.ExhibitionNO == oTempl.ExhibitionNO && t2.IsFormal == true && SqlFunc.IsNullOrEmpty(t1.OtherId))
.Select((t1, t2) => new
{
t1.AppointNO,
t2.FormalGuid,
})
.ToList();
var saKeys = saImportCustomers.Select(x => x.FormalGuid).ToList();
//抓去正式客戶資料
var saCustomers = db.Queryable()
.Where(x => x.OrgID == i_crm.ORIGID && saKeys.Contains(x.guid))
.Select(x => new
{
AppointNO = "",
x.guid,
x.CustomerNO,
x.UniCode,
x.CustomerCName,
x.CustomerEName,
x.Telephone,
x.Email
})
.ToList();
//添加預約單號碼
var saLast = (from e in saCustomers
join f in saImportCustomers on e.guid equals f.FormalGuid
select new
{
f.AppointNO,
e.guid,
e.CustomerNO,
e.UniCode,
e.CustomerCName,
e.CustomerEName,
e.Telephone,
e.Email
}).Distinct();
var map = new Map
{
{ "Base", oTempl },
{ "Customers", saLast }
};
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, map);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"InitAppoint(預設預約單資料)", @"", @"", @"");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 預設預約單資料
#region 獲取賬單關聯
///
/// 獲取賬單關聯
///
/// todo: describe i_crm parameter on InitAppoint
///
public ResponseMessage GetBillAssociated(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
var sAppointNO = _fetchString(i_crm, @"AppointNO");
var sOtherId = _fetchString(i_crm, @"OtherId");
var sSupplierID = _fetchString(i_crm, @"SupplierID");
var map = new Map();
var tb_FeeItems = new DataTable(@"tb");
if (i_crm.ORIGID == "TG")
{
var oPackingOrder = db.Queryable(
(t1, t2, t3) => new object[]
{
JoinType.Inner, t1.OrgID == t2.OrgID && t1.CustomerId == t2.guid.ToString(),
JoinType.Inner, t2.OrgID == t3.OrgID && t2.FormalGuid == t3.guid
}
)
.Where((t1, t2, t3) => t1.OrgID == i_crm.ORIGID)
.WhereIF(!string.IsNullOrEmpty(sAppointNO), (t1, t2, t3) => t1.AppointNO == sAppointNO)
.WhereIF(!string.IsNullOrEmpty(sOtherId), (t1, t2, t3) => t1.OtherId == sOtherId)
.WhereIF(!string.IsNullOrEmpty(sSupplierID), (t1, t2, t3) => t2.FormalGuid == sSupplierID && t3.guid == sSupplierID)
.Select((t1, t2, t3) => t1).Single();
if (oPackingOrder != null)
{
var jaPackingInfo = (JArray)JsonConvert.DeserializeObject(oPackingOrder.PackingInfo);
var iAllNumber = 0;
var iAllWeight = 0;
Decimal iAllVolume = 0;
var sContactorId = "";
var sContactorName = "";
if (jaPackingInfo.Count > 0)
{
foreach (var jo in jaPackingInfo)
{
var iNumber = int.Parse(jo["ExpoNumber"].ToString());
var iWeight = int.Parse(jo["ExpoWeight"].ToString()) * iNumber;
var iVolume = Math.Round(Convert.ToDecimal(jo["ExpoLen"].ToString()) * Convert.ToDecimal(jo["ExpoWidth"].ToString()) * Convert.ToDecimal(jo["ExpoHeight"].ToString()) * iNumber / Convert.ToDecimal("1000000"), 2);
iAllNumber += iNumber;
iAllWeight += iWeight;
iAllVolume = iAllVolume + iVolume;
}
var oCustomers = db.Queryable(
(t1, t2, t3) => new object[]
{
JoinType.Inner, t1.OrgID == t2.OrgID && t1.CustomerId == t2.guid.ToString(),
JoinType.Inner, t2.OrgID == t3.OrgID && t2.FormalGuid == t3.guid
}
)
.Where((t1, t2, t3) => t1.OrgID == i_crm.ORIGID)
.WhereIF(!string.IsNullOrEmpty(sAppointNO), (t1, t2, t3) => t1.AppointNO == sAppointNO)
.WhereIF(!string.IsNullOrEmpty(sOtherId), (t1, t2, t3) => t1.OtherId == sOtherId)
.WhereIF(!string.IsNullOrEmpty(sSupplierID), (t1, t2, t3) => t2.FormalGuid == sSupplierID && t3.guid == sSupplierID)
.Select((t1, t2, t3) => t3).Single();
if (!string.IsNullOrEmpty(oCustomers.Contactors))
{
var jaContactors = (JArray)JsonConvert.DeserializeObject(oCustomers.Contactors);
foreach (var joContacto in jaContactors)
{
if (joContacto["FullName"].ToString() == oPackingOrder.Contactor)
{
sContactorId = joContacto["guid"].ToString();
sContactorName = joContacto["FullName"].ToString();
}
}
}
map = new Map
{
{"CustomerId",oCustomers.guid },
{"CustomerCode",oCustomers.CustomerNO },
{"UniCode",oCustomers.UniCode },
{"ContactorId",sContactorId },
{"ContactorName",sContactorName },
{"ContactTel",oPackingOrder.ContactTel },
{"Number",iAllNumber },
{"Unit","PKG" },
{"Weight",iAllWeight },
{"Volume",iAllVolume }
};
}
var saPackingInfo = (JArray)JsonConvert.DeserializeObject(oPackingOrder.PackingInfo);
tb_FeeItems.Columns.Add(@"guid", typeof(String));//費用代號
tb_FeeItems.Columns.Add(@"FinancialCode", typeof(String));//費用代號
tb_FeeItems.Columns.Add(@"FinancialCostStatement", typeof(String));//費用說明
tb_FeeItems.Columns.Add(@"FinancialCurrency", typeof(String));//幣別
tb_FeeItems.Columns.Add(@"FinancialUnitPrice", typeof(String));//單價
tb_FeeItems.Columns.Add(@"FinancialNumber", typeof(String));//FinancialNumber
tb_FeeItems.Columns.Add(@"FinancialUnit", typeof(String));//單位
tb_FeeItems.Columns.Add(@"FinancialAmount", typeof(String));//金額
tb_FeeItems.Columns.Add(@"FinancialExchangeRate", typeof(String));//匯率
tb_FeeItems.Columns.Add(@"FinancialTWAmount", typeof(String));//台幣金額
tb_FeeItems.Columns.Add(@"FinancialTaxRate", typeof(String));//稅率
tb_FeeItems.Columns.Add(@"FinancialTax", typeof(String));//稅額
tb_FeeItems.Columns.Add(@"Memo", typeof(String));//稅額
tb_FeeItems.Columns.Add(@"CreateUser", typeof(String));//創建人
tb_FeeItems.Columns.Add(@"CreateDate", typeof(String));//創建時間
var oExhibitionRules = db.Queryable(
(t1, t2) => new object[]
{
JoinType.Inner, t1.OrgID == t2.OrgID && t1.Guid == t2.CostRulesId
}
)
.Where((t1, t2) => t1.OrgID == i_crm.ORIGID && t2.SN.ToString() == oPackingOrder.ExhibitionNO)
.Select((t1, t2) => t1).Single();
foreach (JObject packingInfo in saPackingInfo)
{
try
{
var bExpoStack = (bool)(packingInfo["ExpoStack"] ?? "false");
var bExpoStorage = (bool)(packingInfo["ExpoStorage"] ?? "false");
var bExpoSplit = (bool)(packingInfo["ExpoSplit"] ?? "false");
var bExpoPack = (bool)(packingInfo["ExpoPack"] ?? "false");
var bExpoFeed = (bool)(packingInfo["ExpoFeed"] ?? "false");
var tb_row = tb_FeeItems.NewRow();
if (bExpoStack)
{//堆高機
tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 1);
tb_FeeItems.Rows.Add(tb_row);
}
if (bExpoSplit)
{//進場服務費
tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 2);
tb_FeeItems.Rows.Add(tb_row);
}
if (bExpoPack)
{//退場服務費
tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 3);
tb_FeeItems.Rows.Add(tb_row);
}
if (bExpoFeed)
{//空箱收送與儲存(空箱收送)
tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 4);
tb_FeeItems.Rows.Add(tb_row);
}
if (bExpoStorage)
{//空箱收送與儲存(儲存)
tb_row = GetFeeItemsInfo(i_crm, tb_FeeItems, packingInfo, oExhibitionRules, 5);
tb_FeeItems.Rows.Add(tb_row);
}
}
catch { }
}
}
}
var mapRel = new Map
{
{ "Base", map },
{ "Fees", tb_FeeItems }
};
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, mapRel);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"GetBillAssociated(獲取賬單關聯)", @"", @"", @"");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
///
///
/// todo: describe i_crm parameter on GetFeeItemsInfo
/// todo: describe tb parameter on GetFeeItemsInfo
/// todo: describe joInfo parameter on GetFeeItemsInfo
/// todo: describe rule parameter on GetFeeItemsInfo
/// todo: describe flag parameter on GetFeeItemsInfo
///
private static DataRow GetFeeItemsInfo(RequestMessage i_crm, DataTable tb, JObject joInfo, OTB_WSM_ExhibitionRules rule, int flag)
{
var tb_row = tb.NewRow();
var dTransferRate = Math.Round(Convert.ToDecimal("100") / Convert.ToDecimal("105"), 5);
var iExpoNumber = Convert.ToInt32(joInfo["ExpoNumber"].ToString());
var dTotalCBM = Convert.ToDecimal(joInfo["TotalCBM"].ToString());
var dExpoWeightTon = Convert.ToDecimal(joInfo["ExpoWeightTon"].ToString());
var iExpoDays = Convert.ToInt32(joInfo["ExpoDays"].ToString());
var iPackingPrice = Math.Round(Convert.ToDecimal(rule.PackingPrice) * dTransferRate, 2);
var iFeedingPrice = Math.Round(Convert.ToDecimal(rule.FeedingPrice) * dTransferRate, 2);
var iStoragePrice = Math.Round(Convert.ToDecimal(rule.StoragePrice) * dTransferRate, 2);
dTotalCBM = dTotalCBM < 1 ? 1 : dTotalCBM;
tb_row[@"guid"] = Guid.NewGuid();
tb_row[@"Memo"] = @"";
tb_row[@"FinancialCurrency"] = @"NTD";
tb_row[@"FinancialNumber"] = iExpoNumber;
switch (flag)
{
case 1://堆高機
{
tb_row[@"FinancialCode"] = @"TEC06";
tb_row[@"FinancialCostStatement"] = @"堆高機";
var jaCostRules = (JArray)JsonConvert.DeserializeObject(rule.CostRules);
var oCurRule = GetCurRule(joInfo, jaCostRules);
var iPrice = Math.Round(int.Parse(oCurRule["Price"].ToString()) * dTransferRate, 2);
tb_row[@"FinancialUnitPrice"] = iPrice;
if (oCurRule["PricingMode"].ToString() == "T")
{
tb_row[@"FinancialNumber"] = dExpoWeightTon * iExpoNumber;
tb_row[@"FinancialUnit"] = @"TON";
tb_row[@"FinancialAmount"] = iPrice * dExpoWeightTon * iExpoNumber;
}
else
{
tb_row[@"FinancialUnit"] = @"SHPT";
tb_row[@"FinancialAmount"] = iPrice * iExpoNumber;
}
}
break;
case 2://進場服務費
{
tb_row[@"FinancialCode"] = @"TEC34";
tb_row[@"FinancialCostStatement"] = @"進場服務費";
tb_row[@"FinancialUnitPrice"] = iPackingPrice;
tb_row[@"FinancialNumber"] = dTotalCBM * iExpoNumber;
tb_row[@"FinancialUnit"] = @"CBM";
tb_row[@"FinancialAmount"] = iPackingPrice * dTotalCBM * iExpoNumber;
}
break;
case 3://退場服務費
{
tb_row[@"FinancialCode"] = @"TEC35";
tb_row[@"FinancialCostStatement"] = @"退場服務費";
tb_row[@"FinancialUnitPrice"] = iPackingPrice;
tb_row[@"FinancialNumber"] = dTotalCBM * iExpoNumber;
tb_row[@"FinancialUnit"] = @"CBM";
tb_row[@"FinancialAmount"] = iPackingPrice * dTotalCBM * iExpoNumber;
}
break;
case 4://空箱收送與儲存(空箱收送)
{
tb_row[@"FinancialCode"] = @"TEC05";
tb_row[@"FinancialCostStatement"] = @"空箱收送與儲存";
tb_row[@"FinancialUnitPrice"] = iFeedingPrice;
tb_row[@"FinancialNumber"] = dTotalCBM * iExpoNumber;
tb_row[@"FinancialUnit"] = @"CBM";
tb_row[@"FinancialAmount"] = iFeedingPrice * dTotalCBM * iExpoNumber;
}
break;
case 5://空箱收送與儲存(儲存)
{
tb_row[@"FinancialCode"] = @"TEC05";
tb_row[@"FinancialCostStatement"] = @"空箱收送與儲存";
tb_row[@"FinancialUnitPrice"] = iStoragePrice * dTotalCBM * iExpoNumber;
tb_row[@"FinancialNumber"] = iExpoDays;
tb_row[@"FinancialUnit"] = @"DAY";
tb_row[@"FinancialAmount"] = iStoragePrice * dTotalCBM * iExpoNumber * iExpoDays;
}
break;
default:
break;
}
tb_row[@"FinancialTWAmount"] = tb_row[@"FinancialAmount"];
tb_row[@"FinancialTaxRate"] = 0.05;
tb_row[@"FinancialExchangeRate"] = 1;
tb_row[@"FinancialTax"] = Convert.ToDouble(tb_row[@"FinancialTWAmount"].ToString()) * 0.05;
tb_row[@"CreateUser"] = i_crm.USERID ?? @"";
tb_row[@"CreateDate"] = DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss");
return tb_row;
}
private static JObject GetCurRule(JObject joData, JArray rules)
{
var jo = new JObject();
var weight = (Decimal)joData["ExpoWeightTon"];
foreach (JObject rule in rules)
{
var rule_min = PackNum(rule["Weight_Min"]);
var rule_max = PackNum(rule["Weight_Max"]);
if (weight >= rule_min && weight < rule_max || (weight == 30 && rule_max == 30))
{
jo = rule;
break;
}
}
return jo;
}
private static Decimal PackNum(object str)
{
return Convert.ToDecimal((str == null ? "" : str.ToString()) == "" ? "0" : str);
}
#endregion 獲取賬單關聯
#region 複製費用項目
///
/// 複製費用項目
///
/// todo: describe i_crm parameter on InitAppoint
///
public ResponseMessage GetBillInfos(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
var sExhibitionNO = _fetchString(i_crm, @"ExhibitionNO");
var sBillNO = _fetchString(i_crm, @"BillNO");
var saBillInfo = db.Queryable(
(t1, t2, t3, t4, t5) => new object[]
{
JoinType.Inner, t1.OrgID == t2.OrgID && t1.CreateUser == t2.MemberID,
JoinType.Inner, t1.OrgID == t3.OrgID && t1.ResponsiblePerson == t3.MemberID,
JoinType.Inner, t1.OrgID == t4.OrgID && t1.ExhibitionNO == t4.SN.ToString(),
JoinType.Left, t1.OrgID == t5.OrgID && t1.Payer == t5.guid
}
)
.Where((t1, t2, t3, t4, t5) => t1.OrgID == i_crm.ORIGID)
.WhereIF(!string.IsNullOrEmpty(sExhibitionNO), (t1, t2, t3, t4, t5) => t1.ExhibitionNO == sExhibitionNO)
.WhereIF(!string.IsNullOrEmpty(sBillNO), (t1, t2, t3, t4, t5) => t1.BillNO == sBillNO)
.Select((t1, t2, t3, t4, t5) => new View_OPM_BillInfo
{
SN = SqlFunc.GetSelfAndAutoFill(t1.SN),
CreateUserName = t2.MemberName,
ResponsiblePersonName = t3.MemberName,
ExhibitioShotName = t4.ExhibitioShotName_CN,
ExhibitioName = t4.Exhibitioname_TW,
PayerName = SqlFunc.IIF(SqlFunc.HasValue(t5.CustomerCName), t5.CustomerCName, t5.CustomerEName)
})
.OrderBy("t1.CreateDate")
.ToList();
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, saBillInfo);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"GetBillInfos(複製費用項目)", @"", @"", @"");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 複製費用項目
#region 取得帳單存取權限
public ResponseMessage GetExhibitionBillAuthorize(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
var MemberToAccess = new List();
// Account
//select MemberIDs from OVW_SYS_Rules where RuleID in ('Account','Admin')
var sRuleIDs = _fetchString(i_crm, @"RuleID");
var sResponsiblePerson = _fetchString(i_crm, @"ResponsiblePerson");
var sMemberdb = new SimpleClient(db);
var spOrgID = new SugarParameter("@OrgID", i_crm.ORIGID);
var spResponsiblePerson = new SugarParameter("@MemberID", sResponsiblePerson);
var spRuleID = new SugarParameter("@RuleID", sRuleIDs);
//直屬主管、部門主管
var Supervisors = db.Ado.SqlQuery(@"SELECT M.ImmediateSupervisor + ',' + D.ChiefOfDepartmentID FROM OTB_SYS_Members M
LEFT JOIN OTB_SYS_Departments D ON D.DepartmentID = M.DepartmentID WHERE M.OrgID = @OrgID AND M.MemberID = @MemberID ", spOrgID, spResponsiblePerson);
MemberToAccess.AddRange(Supervisors);
//
var oVW_SYS_Rules = db.Queryable().Where(r => r.DelStatus == "N" && r.OrgID == i_crm.ORIGID)
.WhereIF(!string.IsNullOrWhiteSpace(sRuleIDs), r => sRuleIDs.Contains(r.RuleID)).Select(c => c.MemberIDs).ToList();
MemberToAccess.AddRange(oVW_SYS_Rules);
var BillAuditor = Common.GetSystemSetting(db, i_crm.ORIGID, "BillAuditor");
MemberToAccess.Add(BillAuditor);
//var saBillInfo = db.Queryable(
// (t1, t2, t3, t4, t5) => new object[]
// {
// JoinType.Inner, t1.OrgID == t2.OrgID && t1.CreateUser == t2.MemberID,
// JoinType.Inner, t1.OrgID == t3.OrgID && t1.ResponsiblePerson == t3.MemberID,
// JoinType.Inner, t1.OrgID == t4.OrgID && t1.ExhibitionNO == t4.SN.ToString(),
// JoinType.Left, t1.OrgID == t5.OrgID && t1.Payer == t5.guid
// }
// )
// .Where((t1, t2, t3, t4, t5) => t1.OrgID == i_crm.ORIGID)
// .WhereIF(!string.IsNullOrEmpty(sExhibitionNO), (t1, t2, t3, t4, t5) => t1.ExhibitionNO == sExhibitionNO)
// .WhereIF(!string.IsNullOrEmpty(sBillNO), (t1, t2, t3, t4, t5) => t1.BillNO == sBillNO)
// .Select((t1, t2, t3, t4, t5) => new View_OPM_BillInfo
// {
// SN = SqlFunc.GetSelfAndAutoFill(t1.SN),
// CreateUserName = t2.MemberName,
// ResponsiblePersonName = t3.MemberName,
// ExhibitioShotName = t4.ExhibitioShotName_CN,
// ExhibitioName = t4.Exhibitioname_TW,
// PayerName = SqlFunc.IIF(SqlFunc.HasValue(t5.CustomerCName), t5.CustomerCName, t5.CustomerEName)
// })
// .OrderBy("t1.CreateDate")
// .ToList();
var AccessAccounts = String.Join(",", MemberToAccess);
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, AccessAccounts);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(OpmComService), @"進出口管理模組", @"GetExhibitionBillAuthorize(取得帳單存取權限)", @"", @"", @"");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion
}
}