コード例 #1
0
        private TimeEntryUpdatedStatusDto SaveOrUpdateTimeEntry(TimeEntryDto timeEntryDto, User user)
        {
            var response = new TimeEntryUpdatedStatusDto();

            response.Guid = timeEntryDto.Guid;
            response.IsOK = true;

            var task          = _taskRepository.GetByGuid(timeEntryDto.TaskGuid);
            var timeEntryType = _timeEntryTypeRepository.GetById(timeEntryDto.TimeEntryTypeId);
            var pricePrHour   = _priceService.GetPrice(timeEntryDto.PricePrHour, user, task);

            if (_timeEntryRepository.Exists(timeEntryDto.Guid))
            {
                var changedTimeEntry = _timeEntryRepository.GetByGuid(timeEntryDto.Guid);

                if (changedTimeEntry.Invoice != null)
                {
                    //throw
                    response.IsOK       = false;
                    response.ReasonText = "Can not edit timeentry that has marked as invoiced!";
                    return(response);
                }

                changedTimeEntry.User          = user;
                changedTimeEntry.Task          = task;
                changedTimeEntry.TimeEntryType = timeEntryType;
                changedTimeEntry.StartTime     = timeEntryDto.StartTime;
                changedTimeEntry.EndTime       = timeEntryDto.EndTime;
                changedTimeEntry.Description   = timeEntryDto.Description;
                changedTimeEntry.TimeSpent     = timeEntryDto.TimeSpent;
                changedTimeEntry.BillableTime  = timeEntryDto.BillableTime;
                changedTimeEntry.Billable      = timeEntryDto.Billable;
                changedTimeEntry.Price         = pricePrHour;

                _timeEntryRepository.SaveOrUpdate(changedTimeEntry);
                return(response);
            }

            var newTimeEntry = _timeEntryFactory.Create(
                timeEntryDto.Guid,
                user,
                task,
                timeEntryType,
                timeEntryDto.StartTime,
                timeEntryDto.EndTime,
                timeEntryDto.Description,
                timeEntryDto.TimeSpent,
                0,
                timeEntryDto.BillableTime,
                timeEntryDto.Billable,
                pricePrHour,
                timeEntryDto.ClientSourceId
                );

            _timeEntryRepository.SaveOrUpdate(newTimeEntry);

            return(response);
        }
コード例 #2
0
 private List <TimeEntry> ConvertFromXMLToTimeEntry(IEnumerable <TimeTrackerDataSet.TimeEntriesRow> rows)
 {
     return(rows.Select(t =>
     {
         var task = _taskRepository.GetByGuid(t.TaskId);
         var timeEntryType = _timeEntryTypeRepository.GetById(t.TimeEntryTypeId);
         return TimeEntry.Create(t.Guid, task, timeEntryType, t.TimeSpent, t.BillableTime,
                                 t.Description, t.EntryStartDate, t.EntryStartDate, t.PricePrHour, t.Synced, t.SyncInfo, t.Billable,
                                 new TimeEntryHistory(), true, t.CreateDate, t.ClientSourceId, t.Invoiced);
     })
            .ToList());
 }
コード例 #3
0
        public TimeEntryDto SaveTimeEntry(TimeEntryDto timeEntryDto, int userId)
        {
            var user          = _userRepository.GetByUserID(userId);
            var task          = _taskRepository.GetByGuid(timeEntryDto.TaskGuid);
            var timeEntryType = _timeEntryTypeRepository.GetById(timeEntryDto.TimeEntryTypeId);
            var pricePrHour   = _priceService.GetPrice(timeEntryDto.PricePrHour, user, task);

            if (!_timeEntryRepository.Exists(timeEntryDto.Guid))
            {
                //TODO: Do logic that splits the timeentry in two, if a dateshift has occurred
                //    if(timeEntry.StartTime.Date != timeEntry.EndTime.Date)

                var newTimeEntry = _timeEntryFactory.Create(
                    timeEntryDto.Guid,
                    user,
                    task,
                    timeEntryType,
                    timeEntryDto.StartTime,
                    timeEntryDto.EndTime,
                    timeEntryDto.Description,
                    timeEntryDto.TimeSpent,
                    0,
                    timeEntryDto.BillableTime,
                    timeEntryDto.Billable,
                    pricePrHour,
                    timeEntryDto.ClientSourceId
                    );

                _timeEntryRepository.SaveOrUpdate(newTimeEntry);
                timeEntryDto.Id = newTimeEntry.Id;
            }
            else
            {
                var changedTimeEntry = _timeEntryRepository.GetByGuid(timeEntryDto.Guid);
                changedTimeEntry.User          = user;
                changedTimeEntry.Task          = task;
                changedTimeEntry.TimeEntryType = timeEntryType;
                changedTimeEntry.StartTime     = timeEntryDto.StartTime;
                changedTimeEntry.EndTime       = timeEntryDto.EndTime;
                changedTimeEntry.Description   = timeEntryDto.Description;
                changedTimeEntry.TimeSpent     = timeEntryDto.TimeSpent;
                changedTimeEntry.BillableTime  = timeEntryDto.BillableTime;
                changedTimeEntry.Billable      = timeEntryDto.Billable;
                changedTimeEntry.Price         = pricePrHour;

                _timeEntryRepository.SaveOrUpdate(changedTimeEntry);
            }

            return(timeEntryDto);
        }
コード例 #4
0
        private async Task <List <TimeEntry> > ConvertTimeEntriesFromServiceToModel(List <Common.DataTransferObjects.TimeEntryDto> timeentriesDtos,
                                                                                    ITaskRepository taskRepository, ITimeEntryTypeRepository timeEntryTypeRepository)
        {
            var timeEntries = new List <TimeEntry>();

            var inactiveTasksWithTimeEntriesInPeriod = await _serviceStackClient.PostAsync(new GetTasksByIdRequest
            {
                TaskIds = timeentriesDtos.Where(x => x.TaskIsInactive).Select(x => x.TaskId).ToList()
            });

            foreach (var timeEntryDtos in timeentriesDtos.GroupBy(x => x.TaskGuid))
            {
                Core.Model.Task localTask;

                var taskIsInactive = timeEntryDtos.Select(x => x.TaskIsInactive).First();
                if (taskIsInactive)
                {
                    var fullTaskDto = inactiveTasksWithTimeEntriesInPeriod.Tasks.Single(x => x.Guid == timeEntryDtos.Key);
                    localTask = CreateLocalTask(fullTaskDto);
                }
                else
                {
                    localTask = taskRepository.GetByGuid(timeEntryDtos.Key);
                }

                foreach (var timeEntryDto in timeEntryDtos)
                {
                    var timeEntryType = timeEntryTypeRepository.GetById(timeEntryDto.TimeEntryTypeId);
                    if (localTask != null)
                    {
                        timeEntries.Add(Create(timeEntryDto, localTask, timeEntryType));
                    }
                    else
                    {
                        throw new MissingHieracleDataException(string.Format("Could not find task {0} for timeEntry '{1} ({2})'",
                                                                             timeEntryDto.TaskGuid, timeEntryDto.TaskName, timeEntryDto.Id));
                    }
                }
            }
            return(timeEntries);
        }