示例#1
0
        public TimeRegistration GetTimeRegistrationByIdForEmployee(string employeeId, Guid registrationId)
        {
            var search = new TimeRegistrationByEmployeeEntity {
                EmployeeId = employeeId, Id = registrationId
            };
            var table = GetTable(RegistrationsEmployeeTable);
            var key   = table
                        .CreateQuery <TimeRegistrationByEmployeeEntity>()
                        .Where(x => x.PartitionKey == search.PartitionKey && x.RowKey == search.RowKey)
                        .SingleOrDefault();

            if (key == null)
            {
                return(null);
            }

            var regKey = new TimeRegistrationEntity {
                TaskId = key.TaskId, Id = registrationId
            };
            var regTable = GetTable(RegistrationsTable);

            return(regTable
                   .CreateQuery <TimeRegistrationEntity>()
                   .Where(x => x.PartitionKey == regKey.PartitionKey && x.RowKey == regKey.RowKey)
                   .Single()
                   .ToDomain());
        }
示例#2
0
        public TimeRegistration CreateTimeRegistration(Guid taskId, string employeeId, DateTimeOffset start, DateTimeOffset end, string remarks)
        {
            var task = new TimeRegistrationEntity
            {
                TaskId     = taskId,
                EmployeeId = employeeId,
                Id         = Guid.NewGuid(),
                TimeStart  = start,
                TimeEnd    = end,
                Time       = (end - start).Ticks,
                Remarks    = remarks
            };

            var taskPerEmployee = new TimeRegistrationByEmployeeEntity
            {
                EmployeeId = employeeId,
                TaskId     = taskId,
                Id         = task.Id
            };

            var table  = GetTable(RegistrationsTable);
            var table2 = GetTable(RegistrationsEmployeeTable);

            var tableOp  = TableOperation.Insert(task);
            var tableOp2 = TableOperation.Insert(taskPerEmployee);

            table.Execute(tableOp);
            table2.Execute(tableOp2);

            // Note: a transaction is only possible when the two operations share the same partition key

            return(task.ToDomain());
        }
示例#3
0
        public IEnumerable <TimeRegistration> GetTimeRegistrationsForEmployee(string employeeId)
        {
            var search = new TimeRegistrationByEmployeeEntity {
                EmployeeId = employeeId
            };
            var table = GetTable(RegistrationsEmployeeTable);
            var query = table.CreateQuery <TimeRegistrationByEmployeeEntity>()
                        .Where(x => x.PartitionKey == search.PartitionKey)
                        .ToList();

            var tasks = query.OrderBy(x => x.TaskId).Select(x => x.TaskId).Distinct();

            var results      = new List <TimeRegistrationEntity>();
            var tableResults = GetTable(RegistrationsTable);

            foreach (var task in tasks)
            {
                results.AddRange(tableResults.CreateQuery <TimeRegistrationEntity>()
                                 .Where(x => x.PartitionKey == task.ToString("D")));
            }

            return(results.Select(x => x.ToDomain()));
        }