using cylsg.Model.ECTEModel;
using cylsg.Model.utilityViewModel;
using cylsg.utility.Extend;
using ECTESTOA;
using Furion.LinqBuilder;
using Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace cylsg.Application.CyOS
{
///
/// 川印报销经理API
///
[Authorize]
public class CyOSBaoXiaoJingLiController: IDynamicApiController
{
private readonly IOAServices _OAServices;
private readonly ISqlSugarClient _SugarClient;
private ECTESTOAPermissions Permissions;
public CyOSBaoXiaoJingLiController(IOAServices oaservices, ISqlSugarClient sugarClient)
{
_OAServices = oaservices;
_SugarClient = sugarClient.AsTenant().GetConnection("ECTESTOADB");
}
///
/// 查询
///
[HttpPost]
public async Task getplanelist(SearchOaWorekPlan param)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
Expression> SearchList = (x) => true;
//川印工作单
SearchList = SearchList.And(x => x.ApprovalStatus != PlanStatusType.Uncommitted);
SearchList = SearchList.And(x => x.MemberId == _OAServices.firmId);
SearchList = SearchList.And(x => x.PlanType == 3);
SearchList = SearchList.And(x => x.PlanDataType == 17);
//必须有两个人审批过了
SearchList = SearchList.And(x => x.OaWorkPlanShenpis.Count(y=>y.Buzhou==1)>1||(x.ApprovalStatus!= PlanStatusType.unApproval));
if (!string.IsNullOrEmpty(param.StaffName))
{
SearchList = SearchList.And(x => x.SentStaff.Name.Contains(param.StaffName));
}
if (param.StaffMemberIdId != null)
{
SearchList = SearchList.And(x => x.MemberId == param.StaffMemberIdId);
}
if (param.PlanDataType > 0)
{
SearchList = SearchList.And(x => x.PlanDataType == param.PlanDataType);
}
if (param.PlanStartTimeStart != null)
{
SearchList = SearchList.And(x => x.PlanStartTime >param.PlanStartTimeStart);
}
if (param.PlanStartTimeEnd != null)
{
SearchList = SearchList.And(x => x.PlanStartTime <= param.PlanStartTimeEnd.Value.AddDays(1));
}
//审批状态
if (param.ApprovalStatus != null)
{
SearchList = SearchList.And(x => x.ApprovalStatus == param.ApprovalStatus);
}
//报销状态
if (param.EvaluationStatus != null)
{
SearchList = SearchList.And(x => x.EvaluationStatus == param.EvaluationStatus);
}
//强制增加员工过滤
RefAsync totle = 0;
var data = await _SugarClient.Queryable().Includes(x => x.OaWorkPlanShenpis.Where(y=>y.Buzhou==1).ToList()).Includes(x => x.Depart)
.Where(SearchList).OrderByDescending(x => x.PlanStartTime).ToPageListAsync(param.page.PageIndex, param.page.PageSize, totle);
var sum = await _SugarClient.Queryable()
.Where(SearchList).SumAsync(x=>x.PlanMoney);
param.page.TotalCount = totle;
return new WorekPlandto
{
list = data,
page = param.page,
TotalMoney = sum ?? 0
};
}
///
/// 获取报销单详情
///
///
///
[HttpGet]
public async Task GetPlanInfo(int id)
{
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
return await _SugarClient.Queryable().Includes(x=>x.OaWorkPlanShenpis,y=>y.ApprovalStaff).Includes(x=>x.SentStaff).Includes(x=>x.Depart).Includes(x=>x.WorkPlanAttachments).Where(x => x.Keyid == id).FirstAsync();
}
///
/// 审批权限
///
///
[HttpPost]
public async Task BaoxiaoPlan(OaWorkPlanShenpi param)
{
if (param.ApprovalStatus == PlanStatusType.unApproval)
throw Oops.Oh("不可设置为未审批状态");
if (!await CheckRols())
{
throw Oops.Oh("没有权限");
}
var data = await _SugarClient.Queryable().Includes(x => x.OaWorkPlanShenpis).Where(x => x.Keyid == param.OA_WorkPlanId).FirstAsync();
if (data == null)
throw Oops.Oh("没有找到报销单");
if ( data.ApprovalStatus != PlanStatusType.unApproval)
throw Oops.Oh("报销单已经批复完毕");
if (data.ApprovalStatus == PlanStatusType.Uncommitted)
{
throw Oops.Oh("报销单未提交不可审批");
}
OaWorkPlanShenpi shenpi = data.OaWorkPlanShenpis.Where(x => x.ApprovalStaffId == Permissions.MemberId&&x.Buzhou==2).FirstOrDefault();
await _SugarClient.AsTenant().BeginTranAsync();
try
{
if (shenpi != null)
{
//已经批复
throw Oops.Oh("报销单已经批复完毕 不可更改");
//shenpi.ApprovalStatus = param.ApprovalStatus;
//shenpi.Buzhou = 2;
//shenpi.ApprovalTime = DateTime.Now;
//shenpi.ApprovalContent = param.ApprovalContent;
//await _SugarClient.Updateable(shenpi).ExecuteCommandAsync();
}
else
{
shenpi = new OaWorkPlanShenpi()
{
ApprovalStaffId = Permissions.MemberId,
ApprovalContent = param.ApprovalContent,
ApprovalStatus = param.ApprovalStatus,
ApprovalTime = DateTime.Now,
///总经理审批为2
Buzhou = 2,
CreateTime = DateTime.Now,
Operator = Permissions.Name,
OA_WorkPlanId = param.OA_WorkPlanId,
};
await _SugarClient.Insertable(shenpi).ExecuteCommandAsync();
}
if(!(param.RewardResult?.isPureNum()==true))
{
throw Oops.Oh("科目选择错误");
}
//审批时可修改内容
data.RewardResult = param.RewardResult;
data.PlanContent = param.PlanContent;
if(param.PlanMoney>0&¶m.PlanMoney<=data.PlanMoney)
data.PlanMoney = param.PlanMoney;
data.ApprovalTime = DateTime.Now;
data.ApprovalStatus = param.ApprovalStatus;
data.ApprovalContent = param.ApprovalContent;
data.LastUpdateTime = DateTime.Now;
await _SugarClient.Updateable(data).ExecuteCommandAsync();
await _SugarClient.AsTenant().CommitTranAsync();
return true;
}
catch (Exception e)
{
await _SugarClient.AsTenant().RollbackTranAsync();
throw;
}
}
///
/// 判断是否具有权限
///
///
private async Task CheckRols()
{
var pr = await _OAServices.GetOAPermissions();
Permissions = pr;
if (pr != null && pr.MemberId != null)
{
if (pr.BF_Isbaoxiaojingli)
return true;
else return false;
}
else
return false;
}
}
}