private LeaveAvailable SetData(LeaveAvailable leave)
        {
            LeaveAvailable lAvail = new LeaveAvailable();

            lAvail.ComId        = session.GetString("ComId");
            lAvail.EmpId        = leave.EmpId;
            lAvail.DateInput    = leave.DateInput;
            lAvail.DateFrom     = leave.DateFrom;
            lAvail.DateTo       = leave.DateTo;
            lAvail.TotalDays    = leave.TotalDays;
            lAvail.LeaveType    = leave.LeaveType;
            lAvail.LeaveApprove = leave.LeaveApprove;
            lAvail.Remarks      = leave.Remarks;
            lAvail.Pcname       = System.Environment.MachineName;
            return(lAvail);
        }
 public IActionResult Index(LeaveAvailable leave)
 {
     if (ModelState.IsValid)
     {
         LeaveInputManager leaveInputManager = new LeaveInputManager();
         LeaveAvailable    l = new LeaveAvailable();
         var message         = leaveInputManager.LeaveAproval(leave);
         ViewBag.Message   = message;
         ViewData["EmpId"] = new SelectList(db.EmployeeInfo, "Id", "Name");
         return(View());
     }
     else
     {
         return(NotFound());
     }
 }
 public IActionResult Index(LeaveAvailable leave)
 {
     if (ModelState.IsValid)
     {
         LeaveInputManager leaveInputManager = new LeaveInputManager(db, httpContextAccessor);
         //LeaveAvailable l = new LeaveAvailable();
         var message = leaveInputManager.LeaveAproval(leave);
         ViewBag.Message   = message;
         ViewData["EmpId"] = new SelectList(db.EmployeeInfo.Where(e => e.ComId == session.GetString("ComSessionId")), "Id", "Name");
         return(View());
     }
     else
     {
         return(NotFound());
     }
 }
        public string LeaveAproval(LeaveAvailable leave)
        {
            string         comId          = session.GetString("ComId");
            LeaveAvailable leaveAvailable = new LeaveAvailable();
            LeaveBalance   leaveBalance   = db.LeaveBalance.FirstOrDefault(l => l.ComId == comId && l.EmpId == leave.EmpId);

            if (leaveBalance != null)
            {
                LeaveAvailable lAvail = new LeaveAvailable();
                int            count  = 0;
                switch (leave.LeaveType)
                {
                case "CL":
                    count = Convert.ToInt32(leaveBalance.Bcl);
                    if (count >= leave.LeaveApprove)
                    {
                        leaveBalance.Acl += leave.LeaveApprove;
                        leaveBalance.Bcl -= leave.LeaveApprove;
                        db.Update(leaveBalance);
                        lAvail = SetData(leave);
                        db.LeaveAvailable.Add(lAvail);
                        db.SaveChanges();
                        message = "Leave entry succeed";
                    }
                    else
                    {
                        message = "The employee has leave available" + count + "Day";
                    }
                    break;

                case "SL":
                    count = Convert.ToInt32(leaveBalance.Bsl);
                    if (count >= leave.LeaveApprove)
                    {
                        leaveBalance.Asl += leave.LeaveApprove;
                        leaveBalance.Bsl -= leave.LeaveApprove;
                        lAvail            = SetData(leave);
                        db.LeaveAvailable.Add(lAvail);
                        db.SaveChanges();
                        message = "Leave entry succeed";
                    }
                    else
                    {
                        message = "The employee has leave available" + count + "Day";
                    }
                    break;

                case "EL":
                    count = Convert.ToInt32(leaveBalance.Bel);
                    if (count >= leave.LeaveApprove)
                    {
                        leaveBalance.Ael += leave.LeaveApprove;
                        leaveBalance.Bel -= leave.LeaveApprove;
                        lAvail            = SetData(leave);
                        db.LeaveAvailable.Add(lAvail);
                        db.SaveChanges();
                        message = "Leave entry succeed";
                    }
                    else
                    {
                        message = "The employee has leave available" + count + "Day";
                    }
                    break;

                case "ML":
                    count = Convert.ToInt32(leaveBalance.Bml);
                    if (count >= leave.LeaveApprove)
                    {
                        leaveBalance.Aml += leave.LeaveApprove;
                        leaveBalance.Bml -= leave.LeaveApprove;
                        lAvail            = SetData(leave);
                        db.LeaveAvailable.Add(lAvail);
                        db.SaveChanges();
                        message = "Leave entry succeed";
                    }
                    else
                    {
                        message = "The employee has leave available" + count + "Day";
                    }
                    break;

                default:
                    message = "Leave type is not valid";
                    break;
                }
                //db.LeaveAvailable.Add(lAvail);
                //db.SaveChanges();
            }
            else
            {
                message = "No leave balnce of this employee";
            }

            return(message);
        }
        public string AttPross(ProcessData process)
        {
            // shift time
            TimeSpan startTime = new TimeSpan(0, 0, 0, 0);
            TimeSpan r         = new TimeSpan(0, 8, 0, 0);
            TimeSpan sStart    = new TimeSpan(0, 9, 0, 0);
            TimeSpan sEnd      = new TimeSpan(0, 18, 0, 0);

            DateTime shiftStart  = process.PunchDate.Value.Date.Add(sStart);
            DateTime shiftEnd    = process.PunchDate.Value.Date.Add(sEnd);
            DateTime rHour       = Convert.ToDateTime(process.PunchDate.Value.Date.Add(startTime));
            DateTime regularHour = process.PunchDate.Value.Date.Add(r);

            List <ProcessData> listOfProcess = new List <ProcessData>();

            List <ProcessData> listOfData = db.ProcessData.Where(e => e.PunchDate.Value.Date == process.PunchDate.Value.Date && e.ComId == "comId").ToList();

            List <EmployeeInfo> employees = db.EmployeeInfo.Where(e => e.ComId == comId).ToList();
            List <RawData>      rawDatas  = db.RawData.Where(e => e.PunchDate == process.PunchDate.Value.Date && e.ComId == comId).ToList();

            if (rawDatas.Count != 0)
            {
                foreach (EmployeeInfo row in employees)
                {
                    ProcessData processData = new ProcessData();

                    IEnumerable <RawData> datas = rawDatas.Where(e => e.EmpId == row.Id).ToList();

                    RawData minPunchTime = (from i in datas
                                            let minTime = datas.Min(m => m.PunchTime)
                                                          where i.PunchTime == minTime
                                                          select i).FirstOrDefault();

                    RawData maxPunchTime = (from i in datas
                                            let maxTime = datas.Max(m => m.PunchTime)
                                                          where i.PunchTime == maxTime
                                                          select i).FirstOrDefault();

                    LeaveAvailable leave = db.LeaveAvailable.FirstOrDefault(l => l.ComId == comId && l.EmpId == row.Id && l.DateFrom >= DateTime.Today.Date && l.DateTo <= DateTime.Today.Date);

                    //DateTime totalWorked = minPunchTime!=null ? Convert.ToDateTime(Convert.ToString(maxPunchTime.PunchTime - minPunchTime.PunchTime)):rHour;

                    DateTime totalWorked = rHour;
                    if (minPunchTime != null)
                    {
                        DateTime date1 = maxPunchTime.PunchTime;
                        DateTime date2 = minPunchTime.PunchTime;
                        TimeSpan diff  = date1.Subtract(date2);
                        totalWorked = process.PunchDate.Value.Date.Add(diff);
                    }

                    // --- Set process Data
                    processData.EmpId         = row.Id;
                    processData.ComId         = row.ComId;
                    processData.EmpCode       = row.Code;
                    processData.PunchDate     = rHour;
                    processData.SectionId     = row.SectionId;
                    processData.DesignationId = row.DesignationId;
                    processData.TimeIn        = minPunchTime != null ? minPunchTime.PunchTime : rHour;
                    processData.TimeOut       = maxPunchTime != null ? maxPunchTime.PunchTime : rHour;
                    //processData.Status = "P";
                    processData.Late        = rHour;
                    processData.RegularHour = regularHour;

                    if (totalWorked > regularHour)
                    {
                        TimeSpan test = totalWorked - regularHour;
                        DateTime ttt  = process.PunchDate.Value.Date.Add(test);
                        processData.OtHour = ttt;
                    }
                    else
                    {
                        processData.OtHour = rHour;
                    }
                    //processData.OtHour = totalWorked > regularHour ? Convert.ToDateTime(Convert.ToString(totalWorked - regularHour)) : rHour;

                    //    ---- Check Status ----
                    if (leave != null)
                    {
                        processData.Status = leave.LeaveType;
                        processData.TimeIn = processData.TimeOut = rHour;
                    }
                    else if (minPunchTime != null && (minPunchTime.PunchTime == maxPunchTime.PunchTime))
                    {
                        processData.Status = "A";
                    }
                    else if (minPunchTime != null && (minPunchTime.PunchTime <= shiftStart))
                    {
                        processData.Status = "P";
                    }
                    else if (minPunchTime != null && (minPunchTime.PunchTime > shiftStart))
                    {
                        processData.Status = "L";
                        processData.Late   = Convert.ToDateTime(Convert.ToString(minPunchTime.PunchTime - sStart));
                    }
                    else
                    {
                        processData.Status = "A";
                    }

                    db.ProcessData.Add(processData);
                }

                List <ProcessData> processes = db.ProcessData.Where(p => p.PunchDate == rHour && p.ComId == comId).ToList();

                if (processes != null)
                {
                    foreach (ProcessData item in processes)
                    {
                        db.ProcessData.Remove(item);
                    }
                }
                rowEffect = db.SaveChanges();

                return(rowEffect > 0 ? "Data process successfully of the day " + process.PunchDate : "Sorry, something wrong");
            }
            else
            {
                return("No Punch Data of the day " + process.PunchDate);
            }
        }