Example #1
0
        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);
        }
Example #4
0
        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);
        }