public async Task <ResponseMessage <ChargeInfoResponse> > Save(UserInfo User, [FromBody] ChargeInfoRequest request) { var r = new ResponseMessage <ChargeInfoResponse>(); try { r = await _chargeManager.Save(User, request); } catch (Exception e) { r.Code = ResponseCodeDefines.ServiceError; r.Message = "服务器错误:" + e.Message; Logger.Error("保存报销单失败:\r\n{0}", e.ToString()); } return(r); }
public async Task <ResponseMessage <ChargeInfoResponse> > Backup(UserInfo user, ChargeInfoRequest request) { ResponseMessage <ChargeInfoResponse> r = new ResponseMessage <ChargeInfoResponse>(); var cit = await _Store.Get(request.ID); if (cit == null) { r.Code = "404"; r.Message = "报销单不存在"; return(r); } bool hp = false; if (cit.CreateUser == user.Id) { hp = true; } else { hp = await _permissionExpansion.HavePermission(user.Id, PERMISSION_FYGL, cit.ReimburseDepartment); } if (!hp) { r.Code = "403"; r.Message = "没有该报销单的操作权限"; return(r); } var ci = _mapper.Map <ChargeInfo>(request); ci.BillList.ForEach(item => { item.ChargeId = request.ID; if (item.FileScopes == null) { item.FileScopes = new List <FileScopeInfo>(); } item.FileScopes.ForEach(f => { f.ReceiptId = item.Id; }); }); ci.BillCount = ci.BillList.Count; ci.BillAmount = ci.BillList.Sum(x => x.ReceiptMoney); ci.Backuped = true; ci = await _Store.BackupBill(_mapper.Map <SimpleUser>(user), ci); r.Extension = _mapper.Map <ChargeInfoResponse>(ci); return(r); }
public async Task <ResponseMessage <ChargeInfoResponse> > Save(UserInfo user, ChargeInfoRequest request) { ResponseMessage <ChargeInfoResponse> r = new ResponseMessage <ChargeInfoResponse>(); var hasPermission = await _permissionExpansion.HavePermission(user.Id, "FY_BXMD", request.ReimburseDepartment); if (!hasPermission) { r.Code = "403"; r.Message = "没有权限"; return(r); } if (request.FeeList == null) { request.FeeList = new List <CostInfoRequest>(); } if (request.BillList == null) { request.BillList = new List <ReceiptInfoRequest>(); } request.FeeList.ForEach(item => item.ChargeId = request.ID); request.BillList.ForEach(item => item.ChargeId = request.ID); request.BillList.ForEach(item => { if (item.FileScopes == null) { item.FileScopes = new List <FileScopeRequest>(); } item.FileScopes.ForEach(fs => { fs.ReceiptId = item.Id; if (fs.FileList == null) { fs.FileList = new List <FileInfoRequest>(); } fs.FileList.ForEach(f => { if (String.IsNullOrEmpty(f.FileExt)) { f.FileExt = System.IO.Path.GetExtension(f.Name ?? ""); } }); }); }); request.ChargeAmount = request.FeeList.Sum(x => x.Amount); request.BillAmount = request.BillList.Sum(x => x.ReceiptMoney); request.BillCount = request.BillList.Count; if (request.Status == (int)ChargeStatus.Submit) { DateTime dt = DateTime.Now; DateTime start = new DateTime(dt.Year, dt.Month, 1); DateTime end = start.AddMonths(1); LimitTipInfo ti = await _Store.GetLimitTip(request.ReimburseUser, start, end, request.ID); if (ti.LimitAmount > 0) { //费用限制 var dl = await _Store.GetDictionaryDefine("CHARGE_COST_TYPE"); decimal totalLimit = request.FeeList.Where(x => dl.Any(d => d.Value == x.Type.ToString() && d.Ext1 == "1")).Sum(x => x.Amount); decimal ybx = ti.TotalAmount - ti.UnSubmitAmount + totalLimit; if (ybx > ti.LimitAmount) { r.Code = "410"; r.Message = $"费用超出限额:可报销费用总额 {ti.LimitAmount}元,已报销:{ybx}元,超出:{ybx - ti.LimitAmount}元"; return(r); } } } using (var t = await _transaction.BeginTransaction()) { try { if (String.IsNullOrWhiteSpace(request.BranchId)) { var org = await _orgUtils.GetNearParent(request.ReimburseDepartment, orgTypes); if (org != null) { request.BranchId = org.Id; } else { request.BranchId = request.ReimburseDepartment; } } if (String.IsNullOrEmpty(request.Department)) { request.Department = user.OrganizationId; } if (String.IsNullOrWhiteSpace(request.ChargeNo)) { string prefix = await _orgUtils.GetBranchPrefix(request.BranchId, "XYH"); request.BranchPrefix = prefix; int seq = await _Store.GetChargeNo(request.BranchId, prefix, DateTime.Now, request.Type); request.Seq = seq; request.ChargeNo = String.Format("FY{0}{1}{2:D5}", prefix, DateTime.Now.ToString("yyyyMMdd"), seq); } var ci = _mapper.Map <ChargeInfo>(request); //预借款冲减 if (request.Status == (int)ChargeStatus.Submit) { if (!String.IsNullOrEmpty(request.ChargeId)) { var li = await _borrowingStore.UpdateReimbursedAmount(_mapper.Map <SimpleUser>(user), ci); decimal total = li.TotalAmount - li.UnSubmitAmount + (ci.ReimbursedAmount ?? 0); if (li.LimitAmount < total) { r.Code = "410"; r.Message = $"预借款冲减超额:预借款总金额 {li.LimitAmount}元,已报销:{total}元,超出:{total - li.LimitAmount}元"; t.Rollback(); return(r); } } } await _Store.Save(_mapper.Map <SimpleUser>(user), ci); r.Extension = _mapper.Map <ChargeInfoResponse>(ci); t.Commit(); } catch (Exception e) { t.Rollback(); throw; } } return(r); }
public async Task <ResponseMessage <ChargeInfoResponse> > Save(UserInfo user, ChargeInfoRequest request) { ResponseMessage <ChargeInfoResponse> r = new ResponseMessage <ChargeInfoResponse>(); await checkInputPermission(r, user, request.ReimburseDepartment, request.ReimburseUser); if (!r.IsSuccess()) { return(r); } using (var t = await _transaction.BeginTransaction()) { try { if (String.IsNullOrWhiteSpace(request.BranchId)) { var org = await _orgUtils.GetNearParent(request.ReimburseDepartment, orgTypes); if (org != null) { request.BranchId = org.Id; } else { request.BranchId = request.ReimburseDepartment; } } if (String.IsNullOrEmpty(request.Department)) { request.Department = user.OrganizationId; } if (String.IsNullOrWhiteSpace(request.ChargeNo)) { string prefix = await _orgUtils.GetBranchPrefix(request.BranchId, "XYH"); request.BranchPrefix = prefix; int seq = await _Store.GetChargeNo(request.BranchId, prefix, DateTime.Now, request.Type); request.Seq = seq; string bt = "JK"; if (request.Type == 3) { bt = "HK"; } request.ChargeNo = String.Format("{0}{1}{2}{3:D5}", bt, prefix, DateTime.Now.ToString("yyyyMMdd"), seq); } var ci = _mapper.Map <ChargeInfo>(request); //预借款冲减 if (request.Status == (int)ChargeStatus.Submit) { if (!String.IsNullOrEmpty(request.ChargeId) && request.Type == 3) { var li = await _Store.UpdateReimbursedAmount(_mapper.Map <SimpleUser>(user), ci); decimal total = li.TotalAmount - li.UnSubmitAmount + (ci.ReimbursedAmount ?? 0); if (li.LimitAmount < total) { r.Code = "410"; r.Message = $"预借款冲减超额:预借款总金额 {li.LimitAmount}元,已报销:{total}元,超出:{total - li.LimitAmount}元"; t.Rollback(); return(r); } } } await _Store.Save(_mapper.Map <SimpleUser>(user), ci); r.Extension = _mapper.Map <ChargeInfoResponse>(ci); t.Commit(); } catch (Exception e) { t.Rollback(); throw; } } return(r); }