|
@@ -4,6 +4,7 @@ using Aspose.Words.Drawing;
|
|
using Aspose.Words.Tables;
|
|
using Aspose.Words.Tables;
|
|
using DiffMatchPatch;
|
|
using DiffMatchPatch;
|
|
using Microsoft.AspNetCore.SignalR;
|
|
using Microsoft.AspNetCore.SignalR;
|
|
|
|
+using Microsoft.VisualBasic;
|
|
using MySqlX.XDevAPI.Relational;
|
|
using MySqlX.XDevAPI.Relational;
|
|
using NPOI.HSSF.UserModel;
|
|
using NPOI.HSSF.UserModel;
|
|
using NPOI.SS.Formula.Functions;
|
|
using NPOI.SS.Formula.Functions;
|
|
@@ -29,6 +30,7 @@ using OASystem.Domain.Entities.Financial;
|
|
using OASystem.Domain.Entities.Groups;
|
|
using OASystem.Domain.Entities.Groups;
|
|
using OASystem.Domain.ViewModels.Financial;
|
|
using OASystem.Domain.ViewModels.Financial;
|
|
using OASystem.Domain.ViewModels.Groups;
|
|
using OASystem.Domain.ViewModels.Groups;
|
|
|
|
+using OASystem.Domain.ViewModels.QiYeWeChat;
|
|
using OASystem.Infrastructure.Repositories.CRM;
|
|
using OASystem.Infrastructure.Repositories.CRM;
|
|
using OASystem.Infrastructure.Repositories.Financial;
|
|
using OASystem.Infrastructure.Repositories.Financial;
|
|
using OASystem.Infrastructure.Repositories.Groups;
|
|
using OASystem.Infrastructure.Repositories.Groups;
|
|
@@ -5121,7 +5123,7 @@ FROM
|
|
{
|
|
{
|
|
try
|
|
try
|
|
{
|
|
{
|
|
- List<Grp_DelegationInfo> grp_Delegations = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(a => a.IsDel == 0).OrderBy(a => a.Id, OrderByType.Desc).ToList();
|
|
|
|
|
|
+ List<Grp_DelegationInfo> grp_Delegations = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(a => a.IsDel == 0).OrderBy(a => a.VisitStartDate, OrderByType.Desc).ToList();
|
|
List<Crm_DeleClient> crm_Deles = new List<Crm_DeleClient>();
|
|
List<Crm_DeleClient> crm_Deles = new List<Crm_DeleClient>();
|
|
if (dto.DiId == 0)
|
|
if (dto.DiId == 0)
|
|
{
|
|
{
|
|
@@ -5328,7 +5330,7 @@ FROM
|
|
var excelTypeData = dataSource.Where(it => it.STid == 73).ToList(); //三公费用-Excel明细类型
|
|
var excelTypeData = dataSource.Where(it => it.STid == 73).ToList(); //三公费用-Excel明细类型
|
|
List<SetDataInfoView> _ExcelTypeData = _mapper.Map<List<SetDataInfoView>>(excelTypeData);
|
|
List<SetDataInfoView> _ExcelTypeData = _mapper.Map<List<SetDataInfoView>>(excelTypeData);
|
|
|
|
|
|
- List<CurrencyInfo> _currencyInfos = await GeneralMethod.EnterExitCostInitRate();
|
|
|
|
|
|
+ var _currencyInfos = await GeneralMethod.EnterExitCostInitRate();
|
|
|
|
|
|
var viewPermissionData = await _enterExitCostRep.PermissionViewUsersAsync();
|
|
var viewPermissionData = await _enterExitCostRep.PermissionViewUsersAsync();
|
|
return Ok(JsonView(true, "查询成功!", new
|
|
return Ok(JsonView(true, "查询成功!", new
|
|
@@ -7487,7 +7489,7 @@ FROM
|
|
var _ExcelTypeData = _mapper.Map<List<SetDataInfoView>>(excelTypeData);
|
|
var _ExcelTypeData = _mapper.Map<List<SetDataInfoView>>(excelTypeData);
|
|
|
|
|
|
//默认币种显示
|
|
//默认币种显示
|
|
- List<CurrencyInfo> _currencyInfos = await GeneralMethod.EnterExitCostInitRate();
|
|
|
|
|
|
+ var _currencyInfos = await GeneralMethod.EnterExitCostInitRate();
|
|
|
|
|
|
var viewPermissionData = await _enterExitCostDraftRep.PermissionViewUsersAsync();
|
|
var viewPermissionData = await _enterExitCostDraftRep.PermissionViewUsersAsync();
|
|
|
|
|
|
@@ -10529,7 +10531,7 @@ WHERE
|
|
}
|
|
}
|
|
else if (dto.TipsType == 3)
|
|
else if (dto.TipsType == 3)
|
|
{
|
|
{
|
|
-
|
|
|
|
|
|
+ return Ok(JsonView(false, "暂无机票费用提示信息!"));
|
|
}
|
|
}
|
|
return Ok(JsonView(false));
|
|
return Ok(JsonView(false));
|
|
}
|
|
}
|
|
@@ -11628,70 +11630,511 @@ WHERE
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
public async Task<IActionResult> EnterExitCostQuoteInitData(PortDtoBase dto)
|
|
public async Task<IActionResult> EnterExitCostQuoteInitData(PortDtoBase dto)
|
|
{
|
|
{
|
|
- //默认币种显示
|
|
|
|
- var currencyInfos = new List<CurrencyInfo>()
|
|
|
|
|
|
+ var initRates = await GeneralMethod.EnterExitCostInitRate();
|
|
|
|
+ var liveRates = await GeneralMethod.EnterExitCostLiveRate();
|
|
|
|
+ var cnyInfo = new CurrencyInfo() { CurrencyCode = "CNY", CurrencyName = "人民币", Rate = 1.0000M };
|
|
|
|
+ initRates.Insert(0, cnyInfo);
|
|
|
|
+ liveRates.Insert(0, cnyInfo);
|
|
|
|
+ return Ok(JsonView(true, "查询成功!", new
|
|
|
|
+ {
|
|
|
|
+ InitRates = initRates,
|
|
|
|
+ LiveRates = liveRates
|
|
|
|
+ }));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组模块 - 出入境费用报价表 - 报价表名称列表
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpPost]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> EnterExitCostQuoteNameListDto(EnterExitCostQuoteNameListDto dto)
|
|
|
|
+ {
|
|
|
|
+ return Ok(await _enterExitCostQuoteRep.QuoteNameListAsync(dto));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组模块 - 出入境费用报价表 - 团组名称列表
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpPost]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> EnterExitCostQuoteGroupNameListDto(EnterExitCostQuoteGroupNameListDto dto)
|
|
|
|
+ {
|
|
|
|
+ return Ok(await _enterExitCostQuoteRep.GroupNameListAsync(dto));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组模块 - 出入境费用报价表 - 根据团组Id获出入境费用相关信息
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpPost]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> EnterExitCostQuoteEntryExitCosts(EnterExitCostInfobyDiIdDto dto)
|
|
|
|
+ {
|
|
|
|
+ int groupId = dto.DiId,
|
|
|
|
+ currUserId = dto.CurrUserId;
|
|
|
|
+ if (groupId < 1) return Ok(JsonView(false,"请传入有效的GroupId;"));
|
|
|
|
+ if (currUserId < 1) return Ok(JsonView(false, "请传入有效的CurrUserId;"));
|
|
|
|
+
|
|
|
|
+ var info = await _enterExitCostRep.GetEnterExitCostInfoByDiId(dto);
|
|
|
|
+ if (info.Code != StatusCodes.Status200OK) return Ok(info);
|
|
|
|
+
|
|
|
|
+ var infoView = info.Data as EnterExitCostInfoView;
|
|
|
|
+ if (infoView == null) return Ok(JsonView(false, "数据类型转换失败!;"));
|
|
|
|
+
|
|
|
|
+ var countryFees = await _sqlSugar.Queryable<Grp_NationalTravelFee>().Where(x => x.IsDel == 0).ToListAsync();
|
|
|
|
+ var cityFilter = new List<string>() { "全部城市", "其他城市" };
|
|
|
|
+ var currencys = await _sqlSugar.Queryable<Sys_SetData>().Where(x => x.IsDel == 0 && x.STid == 66).ToListAsync();
|
|
|
|
+ var eecRates = infoView.Currencys;
|
|
|
|
+
|
|
|
|
+ var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(x => x.Id == dto.DiId && x.IsDel == 0);
|
|
|
|
+ int pplNum = 1;
|
|
|
|
+ if (groupInfo != null) pplNum = groupInfo.VisitPNumber;
|
|
|
|
+
|
|
|
|
+ var views = new List<QuoteSubItemInfo>();
|
|
|
|
+
|
|
|
|
+ #region 数据填充
|
|
|
|
+
|
|
|
|
+ var intTravelCosts = new List<QuoteSubItemInfo>();
|
|
|
|
+ #region 机票费用 1354
|
|
|
|
+ int intTravelIndex = 1;
|
|
|
|
+ if (infoView.SumJJC == 1)
|
|
|
|
+ {
|
|
|
|
+ intTravelCosts.Add(new QuoteSubItemInfo
|
|
{
|
|
{
|
|
- new CurrencyInfo (){ CurrencyCode="USD",CurrencyName = "美元",Rate = 7.5000M },
|
|
|
|
- new CurrencyInfo (){ CurrencyCode="EUR",CurrencyName = "欧元",Rate = 8.0000M },
|
|
|
|
- new CurrencyInfo (){ CurrencyCode="GBP",CurrencyName = "英镑",Rate = 9.5000M },
|
|
|
|
- new CurrencyInfo (){ CurrencyCode="JPY",CurrencyName = "日元",Rate = 0.0500M },
|
|
|
|
- new CurrencyInfo (){ CurrencyCode="HKD",CurrencyName = "港币",Rate = 0.9500M },
|
|
|
|
- };
|
|
|
|
|
|
+ ItemId = 1354,
|
|
|
|
+ Index = intTravelIndex,
|
|
|
|
+ FeeName = "经济舱",
|
|
|
|
+ UnitPrice = infoView.AirJJ,
|
|
|
|
+ Currency = "CNY",
|
|
|
|
+ Quantity = 1,
|
|
|
|
+ PplNum = 1,
|
|
|
|
+ TotalAmt = infoView.AirJJ,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+ intTravelIndex++;
|
|
|
|
+ }
|
|
|
|
+ if (infoView.SumGWC == 1)
|
|
|
|
+ {
|
|
|
|
+ intTravelCosts.Add(new QuoteSubItemInfo
|
|
|
|
+ {
|
|
|
|
+ ItemId = 1354,
|
|
|
|
+ Index = intTravelIndex,
|
|
|
|
+ FeeName = "公务舱",
|
|
|
|
+ UnitPrice = infoView.AirGW,
|
|
|
|
+ Currency = "CNY",
|
|
|
|
+ Quantity = 1,
|
|
|
|
+ PplNum = 1,
|
|
|
|
+ TotalAmt = infoView.AirGW,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+ intTravelIndex++;
|
|
|
|
+ }
|
|
|
|
+ if (infoView.SumTDC == 1)
|
|
|
|
+ {
|
|
|
|
+ intTravelCosts.Add(new QuoteSubItemInfo
|
|
|
|
+ {
|
|
|
|
+ ItemId = 1354,
|
|
|
|
+ Index = intTravelIndex,
|
|
|
|
+ FeeName = "头等舱",
|
|
|
|
+ UnitPrice = infoView.AirTD,
|
|
|
|
+ Currency = "CNY",
|
|
|
|
+ Quantity = 1,
|
|
|
|
+ PplNum = 1,
|
|
|
|
+ TotalAmt = infoView.AirTD,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+ intTravelIndex++;
|
|
|
|
+ }
|
|
|
|
|
|
- var liveRateInfos = new List<LiveRateInfo>();
|
|
|
|
- var currencyRate = await _juHeApi.PostItemRateAsync(currencyInfos.Select(it => it.CurrencyCode!).ToArray());
|
|
|
|
- if (currencyRate.Any())
|
|
|
|
|
|
+ intTravelCosts.Add(new QuoteSubItemInfo
|
|
{
|
|
{
|
|
- foreach (var item in currencyInfos)
|
|
|
|
|
|
+ ItemId = 1354,
|
|
|
|
+ Index = intTravelIndex,
|
|
|
|
+ FeeName = "城市间交通费用",
|
|
|
|
+ UnitPrice = infoView.CityTranffic,
|
|
|
|
+ Currency = "CNY",
|
|
|
|
+ Quantity = 1,
|
|
|
|
+ PplNum = pplNum,
|
|
|
|
+ TotalAmt = infoView.CityTranffic * pplNum,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ views.AddRange(intTravelCosts);
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ var accomCosts = new List<QuoteSubItemInfo>();
|
|
|
|
+ #region 住宿费 1355
|
|
|
|
+ if (infoView.QuarterageData.Any())
|
|
|
|
+ {
|
|
|
|
+ int accomIndex = 1;
|
|
|
|
+ int accomItemTypeId = 1355;
|
|
|
|
+
|
|
|
|
+ var groupData = infoView.QuarterageData.GroupBy(x => x.NationalTravelFeeId);
|
|
|
|
+
|
|
|
|
+ foreach (var item in groupData)
|
|
{
|
|
{
|
|
- var rateInfo = currencyRate.Where(it => it.Name.Equals(item.CurrencyName)).FirstOrDefault();
|
|
|
|
-
|
|
|
|
- if (rateInfo != null)
|
|
|
|
|
|
+ string feeName = string.Empty;
|
|
|
|
+ var countryInfo = countryFees.FirstOrDefault(x => x.Id == item.Key);
|
|
|
|
+ if (countryInfo != null)
|
|
{
|
|
{
|
|
- decimal rate1 = Convert.ToDecimal(rateInfo.FSellPri) / 100.00M;
|
|
|
|
|
|
+ feeName = countryInfo.Country;
|
|
|
|
+ var city = countryInfo.City;
|
|
|
|
+
|
|
|
|
+ if (!string.IsNullOrEmpty(city) && cityFilter.Any(x => !x.Contains(city)))
|
|
|
|
+ {
|
|
|
|
+ feeName += $"-{city}";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- if (rateInfo.Name.Equals("日元")) rate1 *= 1.3700M;
|
|
|
|
- else rate1 *= 1.035M;
|
|
|
|
|
|
+ var hotelInfo = item.FirstOrDefault();
|
|
|
|
+ if (hotelInfo == null) continue;
|
|
|
|
+ var thisCurrency = currencys.FirstOrDefault(x => x.Id == hotelInfo.Currency)?.Name ?? "nuknow";
|
|
|
|
+ var thisRate = eecRates.FirstOrDefault(x => x.CurrencyCode.Equals(thisCurrency))?.Rate ?? 1.0000M;
|
|
|
|
+ int quantity = item.ToList().Count;
|
|
|
|
|
|
- liveRateInfos.Add(new LiveRateInfo() {
|
|
|
|
- CurrencyCode = item.CurrencyCode,
|
|
|
|
- CurrencyName = item.CurrencyName,
|
|
|
|
- Rate = rate1.TruncDecimals(4),
|
|
|
|
- LastUpdTime = $"{rateInfo.Date} {rateInfo.Time}",
|
|
|
|
- });
|
|
|
|
|
|
+ accomCosts.Add(new QuoteSubItemInfo
|
|
|
|
+ {
|
|
|
|
+ ItemId = accomItemTypeId,
|
|
|
|
+ Index = accomIndex,
|
|
|
|
+ FeeName = feeName,
|
|
|
|
+ UnitPrice = hotelInfo.Cost,
|
|
|
|
+ Currency = thisCurrency,
|
|
|
|
+ Quantity = quantity,
|
|
|
|
+ PplNum = pplNum,
|
|
|
|
+ TotalAmt = hotelInfo.Cost * thisRate * quantity * pplNum,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+ accomIndex++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ views.AddRange(accomCosts);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ var mealCosts = new List<QuoteSubItemInfo>();
|
|
|
|
+ #region 餐饮费 1356
|
|
|
|
+ if (infoView.BoardWagesData.Any())
|
|
|
|
+ {
|
|
|
|
+ var mealIndex = 1;
|
|
|
|
+ int mealItemTypeId = 1356;
|
|
|
|
+
|
|
|
|
+ var groupData = infoView.BoardWagesData.GroupBy(x => x.NationalTravelFeeId);
|
|
|
|
+
|
|
|
|
+ foreach (var item in groupData)
|
|
|
|
+ {
|
|
|
|
+ string feeName = string.Empty;
|
|
|
|
+ var countryInfo = countryFees.FirstOrDefault(x => x.Id == item.Key);
|
|
|
|
+ if (countryInfo != null)
|
|
|
|
+ {
|
|
|
|
+ feeName = countryInfo.Country;
|
|
|
|
+ var city = countryInfo.City;
|
|
|
|
+
|
|
|
|
+ if (!string.IsNullOrEmpty(city) && cityFilter.Any(x => !x.Contains(city)))
|
|
|
|
+ {
|
|
|
|
+ feeName += $"-{city}";
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ var mealInfo = item.FirstOrDefault();
|
|
|
|
+ if (mealInfo == null) continue;
|
|
|
|
+ var thisCurrency = currencys.FirstOrDefault(x => x.Id == mealInfo.Currency)?.Name ?? "nuknow";
|
|
|
|
+ var thisRate = eecRates.FirstOrDefault(x => x.CurrencyCode.Equals(thisCurrency))?.Rate ?? 1.0000M;
|
|
|
|
+ int quantity = item.ToList().Count;
|
|
|
|
+
|
|
|
|
+ mealCosts.Add(new QuoteSubItemInfo
|
|
|
|
+ {
|
|
|
|
+ ItemId = mealItemTypeId,
|
|
|
|
+ Index = mealIndex,
|
|
|
|
+ FeeName = feeName,
|
|
|
|
+ UnitPrice = mealInfo.Cost,
|
|
|
|
+ Currency = thisCurrency,
|
|
|
|
+ Quantity = quantity,
|
|
|
|
+ PplNum = pplNum,
|
|
|
|
+ TotalAmt = mealInfo.Cost * thisRate * quantity * pplNum,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+ mealIndex++;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ views.AddRange(mealCosts);
|
|
}
|
|
}
|
|
|
|
|
|
- return Ok(JsonView(true, "查询成功!", new
|
|
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ var miscCosts = new List<QuoteSubItemInfo>();
|
|
|
|
+ #region 公杂费 1364
|
|
|
|
+ if (infoView.MiscellaneousFeeData.Any())
|
|
{
|
|
{
|
|
- InitRates = await GeneralMethod.EnterExitCostInitRate(),
|
|
|
|
- LiveRates = await GeneralMethod.EnterExitCostLiveRate()
|
|
|
|
- }));
|
|
|
|
|
|
+ var miscIndex = 1;
|
|
|
|
+ int miscItemTypeId = 1364;
|
|
|
|
+
|
|
|
|
+ var groupData = infoView.MiscellaneousFeeData.GroupBy(x => x.NationalTravelFeeId);
|
|
|
|
+
|
|
|
|
+ foreach (var item in groupData)
|
|
|
|
+ {
|
|
|
|
+ string feeName = string.Empty;
|
|
|
|
+ var countryInfo = countryFees.FirstOrDefault(x => x.Id == item.Key);
|
|
|
|
+ if (countryInfo != null)
|
|
|
|
+ {
|
|
|
|
+ feeName = countryInfo.Country;
|
|
|
|
+ var city = countryInfo.City;
|
|
|
|
+
|
|
|
|
+ if (!string.IsNullOrEmpty(city) && cityFilter.Any(x => !x.Contains(city)))
|
|
|
|
+ {
|
|
|
|
+ feeName += $"-{city}";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var miscInfo = item.FirstOrDefault();
|
|
|
|
+ if (miscInfo == null) continue;
|
|
|
|
+ var thisCurrency = currencys.FirstOrDefault(x => x.Id == miscInfo.Currency)?.Name ?? "nuknow";
|
|
|
|
+ var thisRate = eecRates.FirstOrDefault(x => x.CurrencyCode.Equals(thisCurrency))?.Rate ?? 1.0000M;
|
|
|
|
+ int quantity = item.ToList().Count;
|
|
|
|
+
|
|
|
|
+ mealCosts.Add(new QuoteSubItemInfo
|
|
|
|
+ {
|
|
|
|
+ ItemId = miscItemTypeId,
|
|
|
|
+ Index = miscIndex,
|
|
|
|
+ FeeName = feeName,
|
|
|
|
+ UnitPrice = miscInfo.Cost,
|
|
|
|
+ Currency = thisCurrency,
|
|
|
|
+ Quantity = quantity,
|
|
|
|
+ PplNum = pplNum,
|
|
|
|
+ TotalAmt = miscInfo.Cost * thisRate * quantity * pplNum,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+ miscIndex++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ views.AddRange(mealCosts);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ #region 签证+保险 1362
|
|
|
|
+ int visaInsIndex = 1;
|
|
|
|
+ int visaInsItemTypeId = 1362;
|
|
|
|
+ if (infoView.Visa > 0)
|
|
|
|
+ {
|
|
|
|
+ views.Add(new QuoteSubItemInfo() {
|
|
|
|
+ ItemId = visaInsItemTypeId,
|
|
|
|
+ Index = visaInsIndex,
|
|
|
|
+ FeeName = $"签证",
|
|
|
|
+ UnitPrice = infoView.Visa,
|
|
|
|
+ Currency = $"CNY",
|
|
|
|
+ Quantity = 1,
|
|
|
|
+ PplNum = pplNum,
|
|
|
|
+ TotalAmt = infoView.Visa * pplNum,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+ visaInsIndex++;
|
|
|
|
+ }
|
|
|
|
+ if (infoView.Safe > 0)
|
|
|
|
+ {
|
|
|
|
+ views.Add(new QuoteSubItemInfo()
|
|
|
|
+ {
|
|
|
|
+ ItemId = visaInsItemTypeId,
|
|
|
|
+ Index = visaInsIndex,
|
|
|
|
+ FeeName = $"保险",
|
|
|
|
+ UnitPrice = infoView.Safe,
|
|
|
|
+ Currency = $"CNY",
|
|
|
|
+ Quantity = 1,
|
|
|
|
+ PplNum = pplNum,
|
|
|
|
+ TotalAmt = infoView.Safe * pplNum,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ #region 服务费 1363
|
|
|
|
+
|
|
|
|
+ int serviceFeeIndex = 1;
|
|
|
|
+ int serviceFeeItemTypeId = 1363;
|
|
|
|
+ if (infoView.Service > 0)
|
|
|
|
+ {
|
|
|
|
+ views.Add(new QuoteSubItemInfo()
|
|
|
|
+ {
|
|
|
|
+ ItemId = serviceFeeItemTypeId,
|
|
|
|
+ Index = serviceFeeIndex,
|
|
|
|
+ FeeName = $"服务费",
|
|
|
|
+ UnitPrice = infoView.Service,
|
|
|
|
+ Currency = $"CNY",
|
|
|
|
+ Quantity = 1,
|
|
|
|
+ PplNum = pplNum,
|
|
|
|
+ TotalAmt = infoView.Service * pplNum,
|
|
|
|
+ Remark = "",
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ var result = await _enterExitCostQuoteRep.InfoAsync(new EnterExitCostQuoteInfoDto() { });
|
|
|
|
+
|
|
|
|
+ result.Rates = eecRates.ToArray();
|
|
|
|
+ if (result.FeeItems.Any())
|
|
|
|
+ {
|
|
|
|
+ result.FeeItems.Select(x =>
|
|
|
|
+ {
|
|
|
|
+ var feeInfos = views.Where(y => y.ItemId == x.ItemId).OrderBy(y => y.Index).ToArray();
|
|
|
|
+ if (feeInfos.Any()) x.Infos = feeInfos;
|
|
|
|
+ return x;
|
|
|
|
+ }
|
|
|
|
+ )
|
|
|
|
+ .OrderBy(x => x.Index)
|
|
|
|
+ .ToList();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return Ok(JsonView(result));
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// 团组模块 - 出入境费用报价表 - 报价表名称列表
|
|
|
|
|
|
+ /// 团组模块 - 出入境费用报价表 - Info
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
[HttpPost]
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
- public async Task<IActionResult> EnterExitCostQuoteNameListDto(EnterExitCostQuoteNameListDto dto)
|
|
|
|
|
|
+ public async Task<IActionResult> EnterExitCostQuoteInfo(EnterExitCostQuoteInfoDto dto)
|
|
{
|
|
{
|
|
- return Ok(await _enterExitCostQuoteRep.QuoteNameListAsync(dto));
|
|
|
|
|
|
+ var info = await _enterExitCostQuoteRep.InfoAsync(dto);
|
|
|
|
+
|
|
|
|
+ if (!info.Rates.Any())
|
|
|
|
+ {
|
|
|
|
+ var rates = await GeneralMethod.EnterExitCostInitRate();
|
|
|
|
+ info.Rates = rates.ToArray();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return Ok(JsonView(info));
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// 团组模块 - 出入境费用报价表 - 团组名称列表
|
|
|
|
|
|
+ /// 团组模块 - 出入境费用报价表 - OP
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
[HttpPost]
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
- public async Task<IActionResult> EnterExitCostGroupNameListDto(EnterExitCostQuoteGroupNameListDto dto)
|
|
|
|
|
|
+ public async Task<IActionResult> EnterExitCostQuoteOp(EnterExitCostQuoteOpDto dto)
|
|
{
|
|
{
|
|
- return Ok(await _enterExitCostQuoteRep.GroupNameListAsync(dto));
|
|
|
|
|
|
+ return Ok(await _enterExitCostQuoteRep.OpAsync(dto));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组模块 - 出入境费用报价表 - 删除 项
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpPost]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> EnterExitCostQuoteItemDel(EnterExitCostQuoteItemDelDto dto)
|
|
|
|
+ {
|
|
|
|
+ if (dto.Id < 1) return Ok(JsonView(false,MsgTips.Id));
|
|
|
|
+ if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));
|
|
|
|
+
|
|
|
|
+ return Ok(await _enterExitCostQuoteRep.ItemDelAsync(dto));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组模块 - 出入境费用报价表 - 导出
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpPost]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> EnterExitCostQuoteExcelExport(EnterExitCostQuoteExcelExportDto dto)
|
|
|
|
+ {
|
|
|
|
+ if (dto.Id < 1) return Ok(JsonView(false, MsgTips.Id));
|
|
|
|
+ if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ var info = await _enterExitCostQuoteRep.InfoAsync(new EnterExitCostQuoteInfoDto() { Id= dto.Id });
|
|
|
|
+ if (info == null) return Ok(JsonView(false, "报价信息未填写!"));
|
|
|
|
+
|
|
|
|
+ var rates = info.Rates;
|
|
|
|
+ var intTravelCosts = info.FeeItems.FirstOrDefault(x => x.ItemId == 1354);//国际旅费
|
|
|
|
+ var accomCosts = info.FeeItems.FirstOrDefault(x => x.ItemId == 1355); //住宿费
|
|
|
|
+ var mealCosts = info.FeeItems.FirstOrDefault(x => x.ItemId == 1356); //餐饮费
|
|
|
|
+ var vehArranges = info.FeeItems.FirstOrDefault(x => x.ItemId == 1357); //车辆安排
|
|
|
|
+ var inviteTo = info.FeeItems.FirstOrDefault(x => x.ItemId == 1358); //邀请函发放对象
|
|
|
|
+ var inviteCosts = info.FeeItems.FirstOrDefault(x => x.ItemId == 1359); //邀请函费用
|
|
|
|
+ var inviteTime = info.FeeItems.FirstOrDefault(x => x.ItemId == 1560); //邀请函发放时间
|
|
|
|
+ var officialActs = info.FeeItems.FirstOrDefault(x => x.ItemId == 1561); //公务活动
|
|
|
|
+ var visaIns = info.FeeItems.FirstOrDefault(x => x.ItemId == 1562); //签证+保险
|
|
|
|
+ var serviceCosts = info.FeeItems.FirstOrDefault(x => x.ItemId == 1563); //服务费
|
|
|
|
+ var pubMiscs = info.FeeItems.FirstOrDefault(x => x.ItemId == 1564); //公杂费
|
|
|
|
+ var taxCosts = info.FeeItems.FirstOrDefault(x => x.ItemId == 1565); //税费
|
|
|
|
+
|
|
|
|
+ //获取模板
|
|
|
|
+ string tempPath = (AppSettingsHelper.Get("ExcelBasePath") + "Template/出入境费用明细报价表模板.xlsx");
|
|
|
|
+ var designer = new WorkbookDesigner();
|
|
|
|
+ designer.Workbook = new Workbook(tempPath);
|
|
|
|
+
|
|
|
|
+ designer.SetDataSource("QuoteName", info.Name);
|
|
|
|
+ designer.SetDataSource("CompanyTitle", "公司名称");
|
|
|
|
+ designer.SetDataSource("CompanyLabel", "");
|
|
|
|
+
|
|
|
|
+ #region 国际旅费
|
|
|
|
+ designer.SetDataSource("IntTravelTitle", intTravelCosts.ItemName);
|
|
|
|
+ if (intTravelCosts.Infos.Any())
|
|
|
|
+ {
|
|
|
|
+ var cabClassFilter = new string[] {"经济舱","公务舱","头等舱" };
|
|
|
|
+
|
|
|
|
+ string label = string.Empty;
|
|
|
|
+ var infos = intTravelCosts.Infos.Where(x => cabClassFilter.Contains(x.FeeName)).ToArray();
|
|
|
|
+ if (infos.Any())
|
|
|
|
+ {
|
|
|
|
+ label = $"{infos.Sum(x => x.PplNum)}人全程机票:{infos.Sum(x => x.TotalAmt).TruncDecimals(2)}元\r\n";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ foreach (var item in intTravelCosts.Infos)
|
|
|
|
+ {
|
|
|
|
+ label += $"{item.FeeName}:{item.UnitPrice.TruncDecimals(2)}元/人*{item.PplNum}人\r\n";
|
|
|
|
+ }
|
|
|
|
+ label += $"\r\n以上小计:{intTravelCosts.TotalAmt.TruncDecimals(2)}元";
|
|
|
|
+ designer.SetDataSource("IntTravelLabel", label);
|
|
|
|
+ }
|
|
|
|
+ #endregion
|
|
|
|
+ #region 住宿费
|
|
|
|
+ designer.SetDataSource("AccomTitle", accomCosts.ItemName);
|
|
|
|
+ if (accomCosts.Infos.Any())
|
|
|
|
+ {
|
|
|
|
+ string currencyName = string.Empty;
|
|
|
|
+ decimal rate = 1.0000M;
|
|
|
|
+ string label = "全程五星酒店,每人1间房\r\n";
|
|
|
|
+ foreach (var item in accomCosts.Infos)
|
|
|
|
+ {
|
|
|
|
+ string hotelName = string.Empty;
|
|
|
|
+ if (item.FeeName.Contains("-"))
|
|
|
|
+ {
|
|
|
|
+ var feeName = item.FeeName.Split('-');
|
|
|
|
+ hotelName = $"\r\n{feeName[0]}:\r\n{feeName[1]}:";
|
|
|
|
+ }
|
|
|
|
+ else hotelName = $"\r\n{item.FeeName}:";
|
|
|
|
+
|
|
|
|
+ var rateInfo = rates.FirstOrDefault(x => item.Currency.Equals(x.CurrencyCode));
|
|
|
|
+ currencyName = rateInfo?.CurrencyName ?? "UnKnow";
|
|
|
|
+ rate = rateInfo?.Rate ?? 1.0000M;
|
|
|
|
+
|
|
|
|
+ label += $"{hotelName}{item.UnitPrice.TruncDecimals(2)}{currencyName}/间/晚*{item.Quantity.ToString("#0")}*{item.PplNum}人\r\n";
|
|
|
|
+ }
|
|
|
|
+ label += $"\r\n以上小计:{accomCosts.TotalAmt.TruncDecimals(2)}元({currencyName}汇率:{rate.TruncDecimals(4)})";
|
|
|
|
+ designer.SetDataSource("AccomLabel", label);
|
|
|
|
+ }
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ designer.Process();
|
|
|
|
+
|
|
|
|
+ //文件名
|
|
|
|
+ string fileName = $"{info.Name}{DateTime.Now.ToString("yyyyMMddHHmmss")}.xls";
|
|
|
|
+ designer.Workbook.Save(AppSettingsHelper.Get("ExcelBasePath") + "EnterExitCostQuote/" + fileName);
|
|
|
|
+ string url = AppSettingsHelper.Get("ExcelBaseUrl") + "Office/Excel/EnterExitCostQuote/" + fileName;
|
|
|
|
+ return Ok(JsonView(true, "成功", url));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
#endregion
|
|
#endregion
|
|
|
|
|
|
#region 签证费用录入
|
|
#region 签证费用录入
|
|
@@ -12791,7 +13234,7 @@ WHERE
|
|
public IActionResult InitOpTravel(InitOpTravelDto dto)
|
|
public IActionResult InitOpTravel(InitOpTravelDto dto)
|
|
{
|
|
{
|
|
var jw = JsonView(false);
|
|
var jw = JsonView(false);
|
|
- var groupList = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.IsDel == 0).OrderByDescending(x => x.Id).ToList();
|
|
|
|
|
|
+ var groupList = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.IsDel == 0).OrderByDescending(x => x.VisitStartDate).ToList();
|
|
var group = groupList.First();
|
|
var group = groupList.First();
|
|
var diid = dto.Diid == -1 ? group?.Id : dto.Diid;
|
|
var diid = dto.Diid == -1 ? group?.Id : dto.Diid;
|
|
|
|
|
|
@@ -13489,7 +13932,7 @@ WHERE
|
|
Select a.Id,TeamName GroupName,b.isTrue From Grp_DelegationInfo a left join (select top 100 percent Diid, CASE
|
|
Select a.Id,TeamName GroupName,b.isTrue From Grp_DelegationInfo a left join (select top 100 percent Diid, CASE
|
|
WHEN COUNT(*) >= 0 THEN 'True'
|
|
WHEN COUNT(*) >= 0 THEN 'True'
|
|
ELSE 'False' END as isTrue from Grp_GroupCost where Isdel = 0 and date != '' group by Diid) b on a.Id = b.Diid
|
|
ELSE 'False' END as isTrue from Grp_GroupCost where Isdel = 0 and date != '' group by Diid) b on a.Id = b.Diid
|
|
- Where TeamName != '' And IsDel = 0 Order By a.Id Desc
|
|
|
|
|
|
+ Where TeamName != '' And IsDel = 0 Order By a.VisitStartDate Desc
|
|
").ToList(); //团组列表
|
|
").ToList(); //团组列表
|
|
int diid = dto.Diid == -1 ? groupList.First().Id : dto.Diid;
|
|
int diid = dto.Diid == -1 ? groupList.First().Id : dto.Diid;
|
|
var groupInfo = await _groupRepository.PostShareGroupInfo(new ShareGroupInfoDto { PortType = 1, Id = diid }); //团组信息
|
|
var groupInfo = await _groupRepository.PostShareGroupInfo(new ShareGroupInfoDto { PortType = 1, Id = diid }); //团组信息
|
|
@@ -18048,7 +18491,7 @@ ORDER by gctggrc.id DESC
|
|
TeamLevId,TeamLev,TeamName,ClientName,ClientUnit,
|
|
TeamLevId,TeamLev,TeamName,ClientName,ClientUnit,
|
|
VisitDate,VisitDays,VisitPNumber,JietuanOperator,IsSure,CreateTime
|
|
VisitDate,VisitDays,VisitPNumber,JietuanOperator,IsSure,CreateTime
|
|
From (
|
|
From (
|
|
- Select row_number() over(order by gdi.CreateTime Desc) as Row_Number,
|
|
|
|
|
|
+ Select row_number() over(order by gdi.VisitStartDate Desc) as Row_Number,
|
|
gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,
|
|
gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,
|
|
ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,
|
|
ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,
|
|
VisitDate,VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure,gdi.CreateTime
|
|
VisitDate,VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure,gdi.CreateTime
|
|
@@ -19644,7 +20087,7 @@ ORDER by gctggrc.id DESC
|
|
groupInfos = _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
groupInfos = _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
.Where(it => it.IsDel == 0)
|
|
.Where(it => it.IsDel == 0)
|
|
.WhereIF(isDepStatus, it => it.JietuanOperator == dto.CurrUserId)
|
|
.WhereIF(isDepStatus, it => it.JietuanOperator == dto.CurrUserId)
|
|
- .OrderByDescending(it => it.CreateUserId)
|
|
|
|
|
|
+ .OrderByDescending(it => it.VisitStartDate)
|
|
.ToList();
|
|
.ToList();
|
|
if (groupInfos.Count < 1) return Ok(JsonView(false, "暂无和你相关的团组信息!"));
|
|
if (groupInfos.Count < 1) return Ok(JsonView(false, "暂无和你相关的团组信息!"));
|
|
|
|
|
|
@@ -20444,7 +20887,7 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
|
|
const int chiNumber = 5;
|
|
const int chiNumber = 5;
|
|
var jw = JsonView(false);
|
|
var jw = JsonView(false);
|
|
|
|
|
|
- var groupList = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.IsDel == 0).OrderByDescending(x => x.Id).ToList();
|
|
|
|
|
|
+ var groupList = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.IsDel == 0).OrderByDescending(x => x.VisitStartDate).ToList();
|
|
var group = groupList.First();
|
|
var group = groupList.First();
|
|
var diid = dto.Diid == -1 ? group?.Id : dto.Diid;
|
|
var diid = dto.Diid == -1 ? group?.Id : dto.Diid;
|
|
group = groupList.First(x => x.Id == diid);
|
|
group = groupList.First(x => x.Id == diid);
|