Ejemplo n.º 1
0
        private IBaseRecord ParsePiecesAndTimeRecord(XElement recordElement)
        {
            IBaseRecord rec = null;

            Enum.TryParse(recordElement.Attribute("Type")?.Value, out ERecordType recType);
            XElement dataElement = recordElement.Element("Data");

            if (dataElement != null)
            {
                DateTime date        = ParseDate(dataElement.Attribute("Date")?.Value);
                string   description = dataElement.Attribute("Description")?.Value;
                var(price, bonus) = ParseIRecord(recType, dataElement.Attribute("Price")?.Value, dataElement.Attribute("Bonus")?.Value);
                switch (recType)
                {
                case ERecordType.Hours:
                    TimeSpan workTimeFrom = ParseTimeRecord(dataElement.Attribute("WorkTimeFrom")?.Value.Split(':')).ToTimeSpan();
                    TimeSpan workTimeTo   = ParseTimeRecord(dataElement.Attribute("WorkTimeTo")?.Value.Split(':')).ToTimeSpan();
                    TimeSpan breakTime    = ParseTimeRecord(dataElement.Attribute("BreakTime")?.Value.Split(':'))
                                            .ToTimeSpan();
                    WorkTime overTime = ParseTimeRecord(dataElement.Attribute("OverTime")?.Value.Split(':'));
                    rec = new HoursRecord(date, workTimeFrom, workTimeTo, price, bonus, description, overTime, new WorkTime(breakTime.Hours, breakTime.Minutes));
                    break;

                case ERecordType.Pieces:
                    uint.TryParse(dataElement.Attribute("Variable")?.Value, out uint pieces);
                    rec = new PiecesRecord(date, pieces, price, bonus, description);
                    break;

                case ERecordType.Vacation:
                    rec = new VacationRecord(date, description);
                    break;
                }
            }
            return(rec);
        }
Ejemplo n.º 2
0
        public ActionResult Details(int?id, int?version)
        {
            if (id == null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest));
            }
            VacationRecord vacationRecord = _vacationRecordService.GetById((int)id);

            if (vacationRecord == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound));
            }
            if (version != null && version.HasValue)
            {
                var recordVersion = _vacationRecordService.GetVersion(id.Value, version.Value);
                if (recordVersion == null)
                {
                    return(StatusCode(StatusCodes.Status404NotFound));
                }
                recordVersion.Versions = new List <VacationRecord>().AsEnumerable();
                return(View(recordVersion));
            }

            return(View(vacationRecord));
        }
Ejemplo n.º 3
0
        public ActionResult Edit(VacationRecord vacationRecord)
        {
            var currentUser                 = _userService.GetUserDataForVersion();
            var currentUserEmployee         = _userService.GetEmployeeForCurrentUser();
            var tsHoursRecordByVacationList = _tsHoursRecordService.Get(x => x.Where(t => t.ParentVacationRecordID == vacationRecord.ID).ToList());
            var originalItem                = _vacationRecordService.Get(records => records.Where(x => x.ID == vacationRecord.ID).AsNoTracking().ToList()).FirstOrDefault();

            if (vacationRecord.VacationBeginDate > vacationRecord.VacationEndDate)
            {
                ModelState.AddModelError("VacationBeginDate", "Дата начала не может быть больше даты конца.");
            }
            var reportingPeriodForBeginDate = _reportingPeriodService.GetAll(x => x.Month == vacationRecord.VacationBeginDate.Month && x.Year == vacationRecord.VacationBeginDate.Year).FirstOrDefault();
            var reportingPeriodForEndDate   = _reportingPeriodService.GetAll(x => x.Month == vacationRecord.VacationEndDate.Month &&
                                                                             x.Year == vacationRecord.VacationEndDate.Year).FirstOrDefault();

            //дату начала отпуска в закрытый перод менить нельзя
            if (reportingPeriodForBeginDate != null && reportingPeriodForBeginDate.NewTSRecordsAllowedUntilDate < DateTime.Now &&
                originalItem.VacationBeginDate != vacationRecord.VacationBeginDate)
            {
                ModelState.AddModelError("VacationBeginDate", "Дату начала отпуска нельзя изменить, так как отчетный период закрыт.");
            }

            //дату окончания отпуска в закрытый перод менить нельзя
            if (reportingPeriodForEndDate != null && reportingPeriodForEndDate.NewTSRecordsAllowedUntilDate < DateTime.Now &&
                originalItem.VacationEndDate != vacationRecord.VacationEndDate)
            {
                ModelState.AddModelError("VacationEndDate", "Дату окончания отпуска нельзя изменить, так как отчетный период закрыт.");
            }

            //невозможно изменить вид отпуска если запись в таймшите уже есть
            if (tsHoursRecordByVacationList != null &&
                tsHoursRecordByVacationList.Count() != 0 &&
                originalItem.VacationType != vacationRecord.VacationType)
            {
                ModelState.AddModelError("VacationType", "Невозможно изменить вид отпуска, так как созданы связанные записи ТШ.");
            }

            if (ModelState.IsValid)
            {
                _vacationRecordService.Update(vacationRecord);

                //TODO добавить
                //_taskTimesheetProcessing.ProcessVacationRecords(currentEmployee, vacationRecord);
                return(RedirectToAction("Index"));
            }

            SetViewBag(vacationRecord);
            ViewBag.EmployeeID = new SelectList(_employeeService.Get(x => x.Where(e => e.ID == originalItem.EmployeeID).ToList()), "ID", "FullName", originalItem?.EmployeeID ?? 1);

            return(View(vacationRecord));
        }
Ejemplo n.º 4
0
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest));
            }
            VacationRecord vacationRecord = _vacationRecordService.GetById((int)id);

            if (vacationRecord == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound));
            }
            return(View(vacationRecord));
        }
Ejemplo n.º 5
0
        public ActionResult Create(VacationRecord vacationRecord)
        {
            var currentUser = _userService.GetUserDataForVersion();

            if (vacationRecord.VacationBeginDate > vacationRecord.VacationEndDate)
            {
                ModelState.AddModelError("VacationBeginDate", "Дата начала не может быть больше даты конца.");
            }
            else if (CheckDateCrossing(vacationRecord))
            {
                ModelState.AddModelError("VacationBeginDate", "Выберите другой день.");
            }
            else
            {
                //SKIPR-563 - временное отключение ограничения, согласно которому нельзя создать запись отпуска, если недостаточно накопленных дней отпуска

                /*EmployeeVacationDto employeeVacationDto = GetAvailableVacationDays(_employeeService.GetById(vacationRecord.EmployeeID));
                 *
                 * if ((employeeVacationDto.AvailableVacationDays < vacationRecord.VacationDays) || (employeeVacationDto.AvailableVacationDays == 0))
                 * {
                 *  ModelState.AddModelError("VacationDays", "Доступных дней отпуска: " + employeeVacationDto.AvailableVacationDays);
                 * }*/
            }

            var reportingPeriodForBeginDate = _reportingPeriodService.GetAll(x => x.Month == vacationRecord.VacationBeginDate.Month && x.Year == vacationRecord.VacationBeginDate.Year).FirstOrDefault();
            var reportingPeriodForEndDate   = _reportingPeriodService.GetAll(x => x.Month == vacationRecord.VacationEndDate.Month && x.Year == vacationRecord.VacationEndDate.Year).FirstOrDefault();

            if (reportingPeriodForBeginDate != null && reportingPeriodForBeginDate.NewTSRecordsAllowedUntilDate < DateTime.Now)
            {
                ModelState.AddModelError("VacationBeginDate", "Отчетный период закрыт");
            }
            if (reportingPeriodForEndDate != null && reportingPeriodForEndDate.NewTSRecordsAllowedUntilDate < DateTime.Now)
            {
                ModelState.AddModelError("VacationEndDate", "Отчетный период закрыт");
            }

            if (ModelState.IsValid)
            {
                vacationRecord.RecordSource = VacationRecordSource.UserInput;
                _vacationRecordService.Add(vacationRecord);
                //TODO добавить
                //_taskTimesheetProcessing.ProcessVacationRecords(currentEmployee, vacationRecord);
                return(RedirectToAction("Index"));
            }

            SetViewBag(vacationRecord);

            return(View(vacationRecord));
        }
Ejemplo n.º 6
0
        private void SetViewBag(VacationRecord vacationRecord)
        {
            var arrayStatus = new SelectList(Enum.GetValues(typeof(VacationRecordType)).Cast <VacationRecordType>()
                                             .Where(n => n != VacationRecordType.All)
                                             .Select(x =>
            {
                return(new SelectListItem
                {
                    Text = x.GetAttributeOfType <DisplayAttribute>().Name,
                    Value = x.ToString()
                });
            }), "Value", "Text");

            ViewBag.NewVacationType = arrayStatus;
            ViewBag.EmployeeID      = new SelectList(_employeeService.GetCurrentEmployees(new DateTimeRange(DateTime.Today, DateTime.Today)), "ID", "FullName", vacationRecord?.EmployeeID ?? 1);
        }
Ejemplo n.º 7
0
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest));
            }
            VacationRecord vacationRecord = _vacationRecordService.GetById((int)id);

            if (vacationRecord == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound));
            }

            SetViewBag(vacationRecord);
            ViewBag.EmployeeID = new SelectList(_employeeService.Get(x => x.Where(e => e.ID == vacationRecord.EmployeeID).ToList()), "ID", "FullName", vacationRecord?.EmployeeID ?? 1);
            return(View(vacationRecord));
        }
Ejemplo n.º 8
0
 private bool CheckDateCrossing(VacationRecord vacationRecord)
 {
     return(_vacationRecordService.Get(records => records.Where(x => x.EmployeeID == vacationRecord.EmployeeID &&
                                                                vacationRecord.VacationBeginDate <= x.VacationEndDate &&
                                                                vacationRecord.VacationEndDate >= x.VacationBeginDate).ToList()).Count() > 0);
 }