示例#1
0
        // GET: CompanyPayType
        public ActionResult Index()
        {
            var payTypes      = CompanyPayTypeHelper.PayTypeList();
            var salaryPayType = payTypes.FirstOrDefault(i => i.Id == SalaryPayType);

            if (salaryPayType == null)
            {
                //初次加载,初始化薪资支出与进水支出类别,且不允许删除
                List <CompanyPayType> payTypeMods = new List <CompanyPayType>
                {
                    new CompanyPayType
                    {
                        Id      = SalaryPayType,
                        PayType = "员工薪资支出"
                    },
                    new CompanyPayType
                    {
                        Id      = BucketPayType,
                        PayType = "进水支出"
                    }
                };
                MongoBase.Insert(payTypeMods);
            }
            ViewBag.flag = "payTypes";
            return(View(payTypes));
        }
        /// <summary>
        /// 工资发放
        /// </summary>
        /// <param name="staffSalary"></param>
        /// <returns></returns>
        public ActionResult PaySalary(StaffSalary staffSalary)
        {
            //检查该月份该员工是否已经发过工资
            var staffSal = SalaryHelper.CheckIfPaid(staffSalary.StaffId, staffSalary.SalaryMonth);

            if (staffSal != null)
            {
                TempData["CheckErr"] = "该员工" + staffSalary.SalaryMonth.Year + "-" + staffSalary.SalaryMonth.Month + "的薪资已经发放,请核查";
                return(RedirectToAction("SalaryList"));
            }

            //获取该员工该薪资月的送水记录,统计提成用
            var dailyRecords = DailyRecordHelper.DailyRecordList()
                               .Where(item => item.VisitDate.Year == staffSalary.SalaryMonth.Year &&
                                      item.VisitDate.Month == staffSalary.SalaryMonth.Month &&
                                      item.StaffId == staffSalary.StaffId);
            //判断是否需要薪资发放类型
            var salaryType = CompanyPayTypeHelper.GetById(SalaryPayType);

            if (salaryType == null)
            {
                MongoBase.Insert(new CompanyPayType
                {
                    Id      = SalaryPayType,
                    PayType = "员工薪资支出"
                });
            }

            staffSalary.Id         = ObjectId.NewObjectId().ToString();
            staffSalary.Commission = dailyRecords.Sum(i => i.SendBucketAmount) * Commission(); //提成

            MongoBase.Insert(staffSalary);
            //公司当月支出增多相应金额
            CompanyPayRecord companyRecord = new CompanyPayRecord()
            {
                Id        = ObjectId.NewObjectId().ToString(),
                IsPayType = true,
                PayTypeId = SalaryPayType,
                StaffId   = staffSalary.StaffId,
                TransSum  = staffSalary.Salary,
                TransTime = Convert.ToDateTime(staffSalary.SalaryMonth + "-28")
            };

            MongoBase.Insert(companyRecord);
            return(RedirectToAction("SalaryList"));
        }
示例#3
0
        public ActionResult CompanyPay()
        {
            var companyPayType = CompanyPayTypeHelper.PayTypeList();
            var salaryPay      = companyPayType.FirstOrDefault(i => i.Id == SalaryPayType);
            //某些支出类型需关联水厂(押金支出与退回、进水..)
            var factories = FactoryHelper.FactoryList();

            factories.Insert(0, new Factory {
                Id = "", FactoryName = ""
            });
            if (salaryPay != null)
            {
                companyPayType.Remove(salaryPay);//公司交易中隐藏工资发放,工资发放在收支汇总中单独完成
            }
            var staffInfo = StaffHelper.StaffList();

            ViewBag.Staffs    = staffInfo;
            ViewBag.Factories = factories;

            ViewBag.flag = "CompanyPay";
            return(View(companyPayType));
        }
示例#4
0
 public ActionResult Delete(string id)
 {
     CompanyPayTypeHelper.Delete(id);
     return(RedirectToAction("Index"));
 }
        /// <summary>
        /// 1. 水厂库存明细,统计字段:交易年月 产品名称 库存 空桶库存
        /// 2. 水厂交易明细 支付总押金 退还总押金 进水总支出
        /// </summary>
        /// <returns></returns>
        public ActionResult TransRecord(string yearMonth, string factoryId)
        {
            int year;
            int month;
            if (string.IsNullOrEmpty(yearMonth))
            {
                //默认显示上一个月的月底结算情况
                year = DateTime.Now.AddMonths(-1).Year;
                month = DateTime.Now.AddMonths(-1).Month;
                yearMonth = year + "-" + month;
            }
            else
            {
                year = int.Parse(yearMonth.Split('-')[0]);
                month = int.Parse(yearMonth.Split('-')[1]);
            }
            var factories = FactoryHelper.FactoryList();
            var products = ProductHelper.ProductList();
            var payTypes = CompanyPayTypeHelper.PayTypeList();
            //选定年月下的日常、公司交易记录
            var companyRecords = CompanyRecordHelper.CompanyList();
            var dailyRecords = DailyRecordHelper.DailyRecordList();
            //1.库存明细
            var factoryStocks = (from r in dailyRecords
                                 join p in products
                                 on r.SendProductId equals p.Id
                                 where r.VisitDate.Year == year && r.VisitDate.Month == month
                                 join f in factories
                                 on p.FactoryId equals f.Id
                                 where f.Id == (string.IsNullOrEmpty(factoryId) ? f.Id : factoryId)
                                 group
                                 new { p.FactoryId, p.Id, r.SendBucketAmount, r.ReceiveEmptyBucketAmount, p.ProductName, f.FactoryName } by
                                 new { p.FactoryId, p.Id }
                into t
                                 select new FactoryStock
                                 {
                                     FactoryName = t.First().FactoryName,
                                     TransMonth = yearMonth,
                                     ProductName = t.First().ProductName,
                                     BucketStock = t.Sum(i => i.SendBucketAmount),
                                     EmptyBucketStock = t.Sum(i => i.ReceiveEmptyBucketAmount)
                                 }).OrderByDescending(item => item.FactoryName);

            //2.交易明细
            var factoryTrans = (from c in companyRecords
                                join f in factories
                                on c.FactoryId equals f.Id
                                where c.TransTime.Year == year && c.TransTime.Month == month && f.Id == (string.IsNullOrEmpty(factoryId) ? f.Id : factoryId)
                                join p in payTypes
                                on c.PayTypeId equals p.Id
                                group new { c.IsPayType, c.TransSum, f.FactoryName, p.PayType } by
                                new { c.FactoryId, c.PayTypeId }
                into t
                                select new FactoryTrans
                                {
                                    FactoryName = t.First().FactoryName,
                                    TransType = t.First().PayType,
                                    IsPayType = t.First().IsPayType,
                                    TransSum = t.Sum(i => i.TransSum),
                                    TransMonth = yearMonth
                                }).OrderByDescending(item => item.FactoryName);

            FactorySumaryViewModel factorySumary = new FactorySumaryViewModel
            {
                FactoryStock = factoryStocks.ToList(),
                FactoryTrans = factoryTrans.ToList()
            };

            ViewBag.queryPam = JsonConvert.SerializeObject(new { YearMonth = yearMonth, FactoryId = factoryId });
            factories.Insert(0, new Factory { Id = "", FactoryName = "" });
            ViewBag.factories = factories;
            ViewBag.flag = "FactoryTransRecord";
            ViewBag.YearMonth = yearMonth;
            return View(factorySumary);
        }
示例#6
0
        public ActionResult CompanyRecord()
        {
            //获取页条数
            int pageSize          = PageSize();
            var companyRecords    = CompanyRecordHelper.CompanyList();
            var companyPayRecords = TempData["queryRecords"] == null
                ? companyRecords.OrderByDescending(item => item.TransTime).Skip(0).Take(pageSize)
                : TempData["queryRecords"] as List <CompanyPayRecord>;

            //用于导出的所有纪录
            var allRecords = TempData["allRecords"] == null
                ? companyRecords.OrderByDescending(item => item.TransTime).ToList()
                : TempData["allRecords"] as List <CompanyPayRecord>;

            var staffs   = StaffHelper.StaffList();
            var paytypes = CompanyPayTypeHelper.PayTypeList();

            var payRecordInfo = (from r in companyPayRecords
                                 join p in paytypes
                                 on r.PayTypeId equals p.Id
                                 join s in staffs
                                 on r.StaffId equals s.Id
                                 select new CompanyPayRecordDesc()
            {
                StaffName = s.StaffName,
                PayTypeDesc = p.PayType,
                IsPayType = r.IsPayType,
                TransSum = r.TransSum,
                TransTime = r.TransTime,
                Describe = r.Describe
            }).ToList();

            var allRecordsToExport = (from r in allRecords
                                      join p in paytypes
                                      on r.PayTypeId equals p.Id
                                      join s in staffs
                                      on r.StaffId equals s.Id
                                      select new CompanyPayRecordDesc()
            {
                StaffName = s.StaffName,
                PayTypeDesc = p.PayType,
                IsPayType = r.IsPayType,
                TransSum = r.TransSum,
                TransTime = r.TransTime,
                Describe = r.Describe
            }).ToList();

            ViewBag.AllRecords = allRecordsToExport;
            ViewBag.Staffs     = staffs;
            ViewBag.Paytypes   = paytypes;

            ViewBag.queryPam = TempData["queryMod"] == null ? "{}" : JsonConvert.SerializeObject(TempData["queryMod"]);

            ViewBag.totalPage = TempData["totalPage"] == null
                ? (companyRecords.Count() % pageSize == 0
                    ? companyRecords.Count() / pageSize
                    : Math.Ceiling(Convert.ToDouble(companyRecords.Count()) / pageSize))
                : int.Parse(TempData["totalPage"].ToString());

            ViewBag.totalSize = TempData["totalSize"] == null
                ? companyRecords.Count
                : int.Parse(TempData["totalSize"].ToString());
            ViewBag.currentPage = TempData["currentPage"] == null
                 ? 1
                 : int.Parse(TempData["currentPage"].ToString());

            ViewBag.flag = "CompanyRecord";
            return(View(payRecordInfo));
        }
示例#7
0
        /// <summary>
        /// 公司结算汇总
        /// </summary>
        /// <returns></returns>
        public ActionResult CompanyEnd(string payTypeId, string yearMonth)
        {
            var companyRecords = TempData["companyRecords"] != null
                ? TempData["companyRecords"] as List <CompanyPayRecord>
                : CompanyRecordHelper.CompanyList();

            var payType = CompanyPayTypeHelper.PayTypeList();
            //日常记录信息,用于统计提成
            var dailyRecords = DailyRecordHelper.DailyRecordList();

            //按年月分组
            var comRecordsMonth = companyRecords
                                  .OrderByDescending(item => item.TransTime)
                                  .GroupBy(item => new { item.TransTime.Year, item.TransTime.Month })
                                  .Select(g => new CompanyPayRecord
            {
                TransTime = g.First().TransTime,
                TransSum  = g.Sum(i => i.IsPayType ? -i.TransSum : i.TransSum)
            }).ToList();

            //按年月、消费类型分组
            var comRecordsMonType = companyRecords
                                    .OrderByDescending(item => item.TransTime)
                                    .GroupBy(item => new { item.TransTime.Year, item.TransTime.Month, item.PayTypeId })
                                    .Select(g => new CompanyPayRecord
            {
                TransTime = g.First().TransTime,
                TransSum  = g.Sum(i => i.IsPayType ? -i.TransSum : i.TransSum),
                PayTypeId = g.First().PayTypeId
            }).Join(payType, x => x.PayTypeId, y => y.Id, (x, y) => new { x, y })
                                    .Select(p => new CompanyPayRecordDesc
            {
                TransTime   = p.x.TransTime,
                TransSum    = p.x.TransSum,
                PayTypeDesc = p.y.PayType
            }).ToList();

            //公司月底结算,动态加入员工提成
            double commission = Commission();

            foreach (var item in comRecordsMonth)
            {
                int sumBucket =
                    dailyRecords.Where(i => i.VisitDate.Year == item.TransTime.Year && i.VisitDate.Month == item.TransTime.Month)
                    .Sum(i => i.SendBucketAmount);
                //当月总支出减去员工提成
                item.TransSum -= sumBucket * commission;

                //年月消费类型集合中添加该月员工统计提成条目
                int index =
                    comRecordsMonType.FindLastIndex(t => t.TransTime.Year == item.TransTime.Year && t.TransTime.Month == item.TransTime.Month);
                comRecordsMonType.Insert(index + 1, new CompanyPayRecordDesc
                {
                    PayTypeDesc = "员工提成(" + commission + "元/桶)",
                    TransTime   = item.TransTime,
                    TransSum    = -sumBucket * commission
                });
            }

            CompanyPayRecordViewModel viewModel = new CompanyPayRecordViewModel()
            {
                CompanyPayRecord     = comRecordsMonth,
                CompanyPayRecordDesc = comRecordsMonType
            };

            //记录查询条件
            ViewBag.queryPam = JsonConvert.SerializeObject(new { YearMonth = yearMonth, PayTypeId = payTypeId });
            ViewBag.flag     = "CompanyEnd";
            ViewBag.PayType  = payType;
            return(View(viewModel));
        }