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.
702 lines
35 KiB
702 lines
35 KiB
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入
|
|
|
|
/// <summary>
|
|
/// 驗證發票號碼是否重複key入
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on CheckInvoiceNumber</param>
|
|
/// <returns></returns>
|
|
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<OTB_OPM_BillInfo>().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 獲取賬單資料
|
|
|
|
/// <summary>
|
|
/// 獲取賬單資料
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on GetBills</param>
|
|
/// <returns></returns>
|
|
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<OTB_OPM_BillInfo>()
|
|
.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 預設預約單資料
|
|
|
|
/// <summary>
|
|
/// 預設預約單資料
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on InitAppoint</param>
|
|
/// <returns></returns>
|
|
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<OTB_WSM_PackingOrder, OTB_OPM_Exhibition>(
|
|
(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<OTB_WSM_PackingOrder, OTB_CRM_ImportCustomers>(
|
|
(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<OTB_WSM_PackingOrder, OTB_CRM_ImportCustomers>(
|
|
(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<OTB_CRM_Customers>()
|
|
.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 獲取賬單關聯
|
|
|
|
/// <summary>
|
|
/// 獲取賬單關聯
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on InitAppoint</param>
|
|
/// <returns></returns>
|
|
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<OTB_WSM_PackingOrder, OTB_CRM_ImportCustomers, OTB_CRM_Customers>(
|
|
(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<OTB_WSM_PackingOrder, OTB_CRM_ImportCustomers, OTB_CRM_Customers>(
|
|
(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<OTB_WSM_ExhibitionRules, OTB_OPM_Exhibition>(
|
|
(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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on GetFeeItemsInfo</param>
|
|
/// <param name="tb">todo: describe tb parameter on GetFeeItemsInfo</param>
|
|
/// <param name="joInfo">todo: describe joInfo parameter on GetFeeItemsInfo</param>
|
|
/// <param name="rule">todo: describe rule parameter on GetFeeItemsInfo</param>
|
|
/// <param name="flag">todo: describe flag parameter on GetFeeItemsInfo</param>
|
|
/// <returns></returns>
|
|
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 複製費用項目
|
|
|
|
/// <summary>
|
|
/// 複製費用項目
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on InitAppoint</param>
|
|
/// <returns></returns>
|
|
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<OTB_OPM_BillInfo, OTB_SYS_Members, OTB_SYS_Members, OTB_OPM_Exhibition, OTB_CRM_Customers>(
|
|
(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<string>();
|
|
// 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<OTB_SYS_Members>(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<string>(@"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<OVW_SYS_Rules>().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<OTB_OPM_BillInfo, OTB_SYS_Members, OTB_SYS_Members, OTB_OPM_Exhibition, OTB_CRM_Customers>(
|
|
// (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
|
|
}
|
|
}
|