Ejemplo n.º 1
0
 public string Check(PunchRequest model)
 {
     if (!ModelState.IsValid)
     {
         throw new MsgEx(103, "参数不能为空");
     }
     punchService.Check(model);
     return JsonHelper.Success();
 }
        public PunchResponse Post(PunchRequest request)
        {
            PunchCruncher cruncher = null;

            try
            {
                cruncher = new PunchCruncher(
                    DateTime.Parse(request.PunchIn),
                    DateTime.Parse(request.LunchOut),
                    DateTime.Parse(request.LunchIn),
                    Convert.ToInt32(request.TargetTotalMinutes),
                    Convert.ToBoolean(request.IsLunchOverrideEnabled));

                return(new PunchResponse {
                    Result = cruncher.GetPunchOut().ToString(), IsSuccessful = true
                });
            }
            catch (ArgumentException exception)
            {
                return(new PunchResponse {
                    Result = exception.Message, IsSuccessful = false
                });
            }
        }
Ejemplo n.º 3
0
        public HttpResponseMessage <PunchResponse> Punch(PunchRequest request)
        {
            Employee emp = db.Employees.FirstOrDefault(e => e.EmployeeID.Equals(request.ID));

            if (!emp.Pin.Equals(request.pin)) // the pin didn't match don't do anything
            {
                PunchResponse response = new PunchResponse()
                {
                    isSuccess    = false,
                    pinError     = "Pin and user did not match.",
                    lines        = null,
                    generalError = null
                };

                return(new HttpResponseMessage <PunchResponse>(response));
            }
            else
            {
                var payPeriod   = PayPeriodTools.LookupPayPeriod(db, emp.DepartmentID);
                var curTimeCard = emp.Timecards.SingleOrDefault(tc => tc.PayPeriod == payPeriod.Start);

                PunchResponse retVal = new PunchResponse()
                {
                    isSuccess    = true,
                    pinError     = "",
                    generalError = null
                };

                if (request.closesPunch == -1)  // Create a new punch in the DB
                {
                    Punch temp = new Punch()
                    {
                        EmployeeID   = emp.EmployeeID,
                        InTime       = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0),
                        OutTime      = null,
                        DepartmentID = emp.DepartmentID,
                        PunchTypeID  = Constants.DEFAULT_PUNCH_TYPE // Make this equal to the Regular punch type.
                    };

                    db.Punches.Add(temp);
                    db.SaveChanges();

                    var timeCardData = TimeCardView.LinesToTimeCardView(db.Lines.Where(l => l.TimecardID == curTimeCard.TimecardID).OrderBy(l => l.SplitStart));
                    // We add the last line to just display the information, letting the user know that we register the punch in
                    timeCardData.Add(new TimeCardView()
                    {
                        DateText       = DateTime.Now.ToString(@"MM\/dd\/yy"),
                        InText         = temp.InTime.ToString(@"hh\:mm"),
                        OutText        = "",
                        RegularText    = "",
                        OvertimeText   = "",
                        DoubletimeText = ""
                    });

                    retVal.lines = timeCardData;
                }
                else // We need to close the last punch and make lines -- Make it split the lines over the payperiod seed
                {
                    // Set the ending time of the punch
                    Punch currentPunch = db.Punches.First(p => p.PunchID == request.closesPunch);
                    currentPunch.OutTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0);

                    var timeCardData = db.Lines.Where(l => l.TimecardID == curTimeCard.TimecardID).OrderBy(l => l.SplitStart).ToList();

                    retVal.lines = TimeCardView.LinesToTimeCardView(timeCardData);

                    if (currentPunch.OutTime.Value.Subtract(currentPunch.InTime).TotalMinutes < 1) // punch was shorter than a minut.
                    {
                        db.Punches.Remove(currentPunch);
                        retVal.lines.Add(new TimeCardView() // Make the last line show, but mark is as rapid since it won't get put in the DB
                        {
                            DateText       = currentPunch.InTime.ToString(@"MM\/dd\/yy"),
                            InText         = currentPunch.InTime.ToString(@"hh\:mm"),
                            OutText        = currentPunch.OutTime.Value.ToString(@"hh\:mm"),
                            RegularText    = "00:00",
                            OvertimeText   = "00:00",
                            DoubletimeText = "00:00",
                            isRapid        = true
                        });
                    }
                    else // Punch was longer than a minut, we add it to the DB.
                    {
                        Calculations.addLines(db, currentPunch);
                    }

                    db.SaveChanges();
                }

                return(new HttpResponseMessage <PunchResponse>(retVal));
            }
        }
Ejemplo n.º 4
0
        public HttpResponseMessage <PunchResponse> Punch(PunchRequest request)
        {
            using (var db = new TimeClockContext())
            {
                /******************************************************************************    TODO ITEM    *********************************/
                //This is where we need to insert the new punch for the employee
                //If it is an out punch, we should recalculate their timecard lines.
                Employee emp = db.Employees.FirstOrDefault(e => e.EmployeeID.Equals(request.ID));

                if (!emp.Pin.Equals(request.pin))
                {
                    PunchResponse response = new PunchResponse()
                    {
                        isSuccess    = false,
                        pinError     = "Pin and user did not match.",
                        lines        = null,
                        generalError = null
                    };

                    return(new HttpResponseMessage <PunchResponse>(response));
                }
                else
                {
                    var payPeriod   = PayPeriodTools.LookupPayPeriod(db, emp.DepartmentID);
                    var curTimeCard = emp.Timecards.SingleOrDefault(tc => tc.PayPeriod == payPeriod.Start);

                    PunchResponse retVal = new PunchResponse()
                    {
                        isSuccess    = true,
                        pinError     = "",
                        generalError = null
                    };


                    if (request.closesPunch == -1)  // Create a new punch in the DB
                    {
                        Punch temp = new Punch()
                        {
                            EmployeeID   = emp.EmployeeID,
                            InTime       = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0),
                            OutTime      = null,
                            DepartmentID = emp.DepartmentID,
                            PunchTypeID  = Constants.DEFAULT_PUNCH_TYPE // Make this equal to the Regular punch type.
                                                                        //OutTime = null;
                        };

                        db.Punches.Add(temp);
                        db.SaveChanges();

                        var timeCardData = new List <TimeCardView>();
                        timeCardData.Add(new TimeCardView()
                        {
                            DateText       = DateTime.Now.ToString(@"MM\/dd\/yy"),
                            InText         = temp.InTime.ToString(@"hh\:mm"),
                            OutText        = "",
                            RegularText    = "",
                            OvertimeText   = "",
                            DoubletimeText = ""
                        });

                        retVal.lines = timeCardData;
                    }
                    else // We need to close the last punch and make lines -- Make it split the lines over the payperiod seed
                    {
                        // Set the ending time of the punch
                        Punch currentPunch = db.Punches.First(p => p.PunchID == request.closesPunch);
                        currentPunch.OutTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0);

                        if (currentPunch.OutTime.Value.Subtract(currentPunch.InTime).TotalMinutes < 1)
                        {
                            db.Punches.Remove(currentPunch);
                        }

                        db.SaveChanges();


                        Calculations.addLines(db, currentPunch);

                        var timeCardData = db.Lines.Where(l => l.TimecardID == curTimeCard.TimecardID).OrderBy(l => l.SplitStart).ToList();

                        retVal.lines = TimeCardView.LinesToTimeCardView(timeCardData);
                    }

                    /*
                     * PunchResponse retVal = new PunchResponse()
                     * {
                     *  isSuccess = true,
                     *  pinError = "",
                     *  lines = TimeCardView.LinesToTimeCardView(timeCardData),
                     *  generalError = null
                     * };
                     */
                    return(new HttpResponseMessage <PunchResponse>(retVal));
                }
            }
        }