Exemplo n.º 1
0
        public async Task <ActionResult> Allocate(BonusViewModel bonusAllocation)
        {
            try
            {
                var employees = await GetEmployees();

                List <Employee> recipients = new List <Employee>();

                for (int i = 0; i < employees.Count; i++)
                {
                    if (i % bonusAllocation.OneInXEmployees == 0)
                    {
                        var recipient = employees[i];
                        recipients.Add(recipient);
                        employees.Remove(recipient);
                    }
                }

                return(RedirectToAction("Index", "Home"));
            }
            catch
            {
                return(View("View"));
            }
        }
Exemplo n.º 2
0
        // GET: Bonus
        public ActionResult Index()
        {
            BonusViewModel model = new BonusViewModel();

            model.Employees = db.HrEmployees.ToList <HrEmployee>();
            return(View(model));
        }
Exemplo n.º 3
0
        public async Task <ActionResult> Allocate(BonusViewModel bonusAllocation)
        {
            try
            {
                var employees = await GetEmployees();

                List <Employee> recipients = new List <Employee>();

                for (int i = 0; i < employees.Count; i++)
                {
                    if (i % bonusAllocation.OneInXEmployees == 0)
                    {
                        var recipient = employees[i];
                        recipients.Add(recipient);
                        // Defect. The list of employees should not be changing.
                        //employees.Remove(recipient);
                    }
                }

                var bonusAdded = await AddBonus(new BonusRecipients { BonusAmount = bonusAllocation.Amount, Recipients = recipients });

                ViewBag.BonusAdded = bonusAdded;

                return(View("View"));
                //return RedirectToAction("Index", "Home");
            }
            catch
            {
                return(View("View"));
            }
        }
Exemplo n.º 4
0
        public ActionResult Calculate(BonusViewModel model, int totalBonusPool)
        {
            var selectedEmployeeId = model.ID;

            model.TotalBonusPool = totalBonusPool;


            var employeeSalary = model.Salary;

            //get the total salary budget for the company
            var totalSalary = (int)db.HrEmployees.Sum(item => item.Salary);

            var myBonus = bonus.CalculateBonusPercentage(employeeSalary, totalSalary);

            var result = bonus.CalculateBonusAllocation(myBonus, totalBonusPool);

            model.BonusPoolAllocationPerc = result;

            return(View("CalculateBonus", model));
        }
Exemplo n.º 5
0
        public async Task <ActionResult> Allocate(BonusViewModel bonusAllocation)
        {
            try
            {
                //commonet by pmalik: ConfigureAwait(false) is used so that next line after async call should go to next
                //available thread from threadpool instead of waiting for the original thread to become free
                var employees = await GetEmployees().ConfigureAwait(false);

                List <Employee> recipients = new List <Employee>();

                for (int i = 0; i < employees.Count; i++)
                {
                    if (i % bonusAllocation.OneInXEmployees == 0)
                    {
                        var recipient = employees[i];
                        recipients.Add(recipient);

                        /*comment by pmalik:
                         * Removing recipient from employees list was reducing its employees count
                         * and hence the money assigned to pay out for bonuses was not all being paid out
                         */
                        //employees.Remove(recipient);
                    }
                }

                var bonusRecipients = new BonusRecipients()
                {
                    BonusAmount = bonusAllocation.Amount,
                    Recipients  = recipients
                };

                AllocateBonus(bonusRecipients);
                return(RedirectToAction("Index", "Home"));
            }
            catch
            {
                return(View("View"));
            }
        }
Exemplo n.º 6
0
        public async Task <IActionResult> Create([Bind("Id,Year,Month,CreatedDate,CreatedBy,EmployeeInfoId,BonusTypeId")] BonusViewModel bonus)
        {
            if (ModelState.IsValid)
            {
                Bonus bb = new Bonus()
                {
                    Year           = bonus.Year,
                    Month          = bonus.Month,
                    CreatedBy      = bonus.CreatedBy,
                    CreatedDate    = bonus.CreatedDate,
                    EmployeeInfoId = bonus.EmployeeInfoId,
                    BonusTypeId    = bonus.BonusTypeId
                };
                await bonusRepository.Save(bb);

                //_context.Add(bonus);
                //await _context.SaveChangesAsync();
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["BonusTypeId"]    = new SelectList(bonusTypeRepository.GetBonusTypeList(), "Id", "Id", bonus.BonusTypeId);
            ViewData["EmployeeInfoId"] = new SelectList(employeeInfoRepository.GetEmployeeInfoList(), "Id", "Id", bonus.EmployeeInfoId);
            return(View(bonus));
        }
        public async Task <IActionResult> Create([Bind("Id,Year,Month,CreatedDate,CreatedBy,EmployeeInfoId,BonusTypeId")] BonusViewModel bonus)
        {
            if (ModelState.IsValid)
            {
                var   userId = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
                Bonus bb     = new Bonus()
                {
                    Year           = bonus.Year,
                    Month          = bonus.Month,
                    CreatedBy      = userId,
                    CreatedDate    = DateTime.Now,
                    EmployeeInfoId = bonus.EmployeeInfoId,
                    BonusTypeId    = bonus.BonusTypeId
                };
                await bonusRepository.Save(bb);

                //_context.Add(bonus);
                //await _context.SaveChangesAsync();
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["BonusTypeId"]    = new SelectList(bonusTypeRepository.GetBonusTypeList(), "Id", "Id", bonus.BonusTypeId);
            ViewData["EmployeeInfoId"] = new SelectList(employeeInfoRepository.GetEmployeeInfoList(), "Id", "Id", bonus.EmployeeInfoId);
            return(View(bonus));
        }
Exemplo n.º 8
0
        private OrderViewModel PayGoRespond(PayGoRespond model, PayResult result)
        {
            string   PaymentType = result.PaymentType;
            DateTime?PayTime     = string.IsNullOrEmpty(result.PayTime) ? (DateTime?)null : Convert.ToDateTime(result.PayTime);

            var Order = _db.OrderMaster.Where(o => o.MerchantOrderNo == result.MerchantOrderNo).FirstOrDefault();

            if (Order != null)
            {
                var PayGo = _db.PayGo.Where(o => o.MerchantOrderNo == Order.MerchantOrderNo).FirstOrDefault();

                if (PayGo == null)
                {
                    #region ## 新增 ##

                    var p = new PayGo
                    {
                        PaymentType     = PaymentType,
                        Amt             = result.Amt,
                        Auth            = result.Auth == null ? string.Empty : result.Auth,
                        Barcode_1       = result.Barcode_1 == null ? string.Empty : result.Barcode_1,
                        Barcode_2       = result.Barcode_2 == null ? string.Empty : result.Barcode_2,
                        Barcode_3       = result.Barcode_3 == null ? string.Empty : result.Barcode_3,
                        Card4No         = result.Card4No == null ? string.Empty : result.Card4No,
                        Card6No         = result.Card6No == null ? string.Empty : result.Card6No,
                        CodeNo          = result.CodeNo == null ? string.Empty : result.CodeNo,
                        EscrowBank      = result.EscrowBank == null ? string.Empty : result.EscrowBank,
                        Inst            = result.Inst,
                        InstEach        = result.InstEach,
                        InstFirst       = result.InstFirst,
                        IP              = string.IsNullOrEmpty(result.IP) ? "192.168.0.1" : result.IP,
                        MerchantID      = result.MerchantID,
                        MerchantOrderNo = result.MerchantOrderNo,
                        Message         = model.Message,
                        PayAccount5Code = result.PayerAccount5Code == null ? string.Empty : result.PayerAccount5Code,
                        PayBankCode     = result.PayBankCode == null ? string.Empty : result.PayBankCode,
                        BankCode        = result.BankCode == null ? string.Empty : result.BankCode,
                        PayTime         = PayTime,
                        RedAmt          = result.RedAmt,
                        RespondCode     = result.RespondCode == null ? string.Empty : result.RespondCode,
                        Status          = model.Status == null ? string.Empty : model.Status,
                        RespondType     = result.RespondType == null ? string.Empty : result.RespondType,
                        TokenUseStatus  = result.TokenUseStatus,
                        TradeNo         = result.TradeNo == null ? string.Empty : result.TradeNo
                    };

                    _db.PayGo.Add(p);

                    _db.SaveChanges();
                    #endregion
                }
                else
                {
                    #region ## 更新 ##
                    PayGo.Amt             = result.Amt;
                    PayGo.Auth            = result.Auth == null ? string.Empty : result.Auth;
                    PayGo.Barcode_1       = result.Barcode_1 == null ? string.Empty : result.Barcode_1;
                    PayGo.Barcode_2       = result.Barcode_2 == null ? string.Empty : result.Barcode_2;
                    PayGo.Barcode_3       = result.Barcode_3 == null ? string.Empty : result.Barcode_3;
                    PayGo.Card4No         = result.Card4No == null ? string.Empty : result.Card4No;
                    PayGo.Card6No         = result.Card6No == null ? string.Empty : result.Card6No;
                    PayGo.CodeNo          = result.CodeNo == null ? string.Empty : result.CodeNo;
                    PayGo.EscrowBank      = result.EscrowBank == null ? string.Empty : result.EscrowBank;
                    PayGo.Inst            = result.Inst;
                    PayGo.InstEach        = result.InstEach;
                    PayGo.InstFirst       = result.InstFirst;
                    PayGo.IP              = result.IP;
                    PayGo.MerchantID      = result.MerchantID;
                    PayGo.MerchantOrderNo = result.MerchantOrderNo;
                    PayGo.Message         = model.Message;
                    PayGo.PayAccount5Code = result.PayerAccount5Code == null ? string.Empty : result.PayerAccount5Code;
                    PayGo.PayBankCode     = result.PayBankCode == null ? string.Empty : result.PayBankCode;
                    PayGo.BankCode        = result.BankCode == null ? string.Empty : result.BankCode;
                    PayGo.PayTime         = PayTime;
                    PayGo.RedAmt          = result.RedAmt;
                    PayGo.RespondCode     = result.RespondCode == null ? string.Empty : result.RespondCode;
                    PayGo.Status          = model.Status == null ? string.Empty : model.Status;
                    PayGo.RespondType     = result.RespondType == null ? string.Empty : result.RespondType;
                    PayGo.TokenUseStatus  = result.TokenUseStatus;
                    PayGo.TradeNo         = result.TradeNo == null ? string.Empty : result.TradeNo;
                    PayGo.PaymentType     = PaymentType;
                    PayGo.IP              = string.IsNullOrEmpty(result.IP) ? "192.168.0.1" : result.IP;

                    _db.SaveChanges();
                    #endregion
                }

                if (model.Status.ToUpper().Equals("SUCCESS") &&
                    !string.IsNullOrEmpty(result.PayTime) &&
                    PayTime > DateTime.MinValue &&
                    !_db.MyBonus.Any(o => o.MerchantOrderNo == Order.MerchantOrderNo))
                {
                    var Bonus = new BonusViewModel();
                    Bonus.MerchantOrderNo = Order.MerchantOrderNo;
                    Bonus.OrderID         = Order.ID;
                    Bonus.PayTime         = PayTime;
                    Bonus.Status          = model.Status;
                    Bonus.OrderAmt        = Order.Amount;
                    Bonus.UseMonth        = DateTime.Now.Month + 1;
                    Bonus.UserID          = Order.UserId;
                    Bonus.Create();
                }
            }


            var PayModel = (from order in _db.OrderMaster
                            //join h in _db.Hotel
                            // on order.ProductId equals RoomId
                            join pay in _db.PayGo
                            on order.MerchantOrderNo equals pay.MerchantOrderNo
                            select new OrderViewModel
            {
                Address = order.Address,
                Amount = order.Amount,
                CheckIn = order.CheckIn,
                CheckOut = order.CheckOut,
                //HotelName = h.Name,
                MerchantTradeNo = order.MerchantOrderNo,
                Phone = order.Tel,
                RoomId = order.ProductId,
                RoomName = order.ProductName,
                PayGo = pay,
                UserId = order.UserId.Value,
                Email = order.Email,
                Quantity = order.Quantity,
                Remark = order.Remark,
                Name = order.Name,
                PaymentType = PaymentType,
                CodeNo = result.CodeNo,
                Barcode_1 = result.Barcode_1,
                Barcode_2 = result.Barcode_2,
                Barcode_3 = result.Barcode_3,
                PayerAccount5Code = result.PayerAccount5Code,
                PayBankCode = result.PayBankCode,
                BankCode = result.BankCode
            }).FirstOrDefault();


            PayModel.HotelName = _db.Room.Find(PayModel.RoomId).Hotel.Name;
            return(PayModel);
        }