/// <summary>
        /// Deletes the room.
        /// </summary>
        /// <param name="id">The room identifier.</param>
        /// <param name="accountId">The account identifier.</param>
        /// <returns>The result.</returns>
        public ResultDto DeleteRoom(Guid id, Guid accountId)
        {
            ResultDto result = new ResultDto();
            using (BzsEntityContainer ctx = this.CreateContainer())
            {
                RoomEntity entity = ctx.RoomSet.FirstOrDefault(f => f.Id == id);
                if (entity == null)
                {
                    result.Error = "ERR-ROOM-NOT-EXISTS";
                    return result;
                }

                if (entity.AccountId == null)
                {
                    result.Error = "ERR-ROOM-ACCOUNT-INDEPENDENT";
                    return result;
                }

                if (entity.AccountId != accountId)
                {
                    result.Error = "ERR-ROOM-ACCOUNT-INVALID";
                    return result;
                }

                if (entity.LessonNavProp.Any())
                {
                    result.Error = "ERR-ROOM-USED";
                    return result;
                }

                ctx.RoomSet.Remove(entity);
                ctx.SaveChanges();
                result.Success = true;
                return result;
            }
        }
        /// <summary>
        /// Deletes a lesson.
        /// </summary>
        /// <param name="id">The lesson identifier.</param>
        /// <param name="accountId">The account identifier.</param>
        /// <returns>The result.</returns>
        public ResultDto DeleteLesson(Guid id, Guid accountId)
        {
            ResultDto result = new ResultDto();
            using (BzsEntityContainer ctx = this.CreateContainer())
            {
                LessonEntity entity = ctx.LessonSet.FirstOrDefault(f => f.Id == id);
                if (entity == null)
                {
                    result.Error = "ERR-LESSON-NOT-EXISTS";
                    return result;
                }

                if (entity.AccountId != accountId)
                {
                    result.Error = "ERR-LESSON-ACCOUNT-INVALID";
                    return result;
                }

                ctx.LessonSet.Remove(entity);
                ctx.SaveChanges();
                result.Success = true;
                return result;
            }
        }
        /// <summary>
        /// Inserts a room.
        /// </summary>
        /// <param name="itemToSave">The item to save.</param>
        /// <param name="accountId">The account identifier.</param>
        /// <returns>The result.</returns>
        public ResultDto InsertRoom(RoomEditDto itemToSave, Guid? accountId)
        {
            ResultDto result = new ResultDto();
            using (BzsEntityContainer ctx = this.CreateContainer())
            {
                RoomEntity entity = ctx.RoomSet.FirstOrDefault(f => f.Id == itemToSave.Id);
                if (entity != null)
                {
                    result.Error = "ERR-ROOM-ALREADY-EXISTS";
                    return result;
                }

                entity = new RoomEntity();
                entity.Id = itemToSave.Id;
                entity.AccountId = accountId;
                entity.Code = itemToSave.Code.Length > 10 ? itemToSave.Code.Substring(0, 9) : itemToSave.Code;
                entity.Caption = itemToSave.Caption.Length > 50 ? itemToSave.Caption.Substring(0, 49) : itemToSave.Caption;
                entity.ModDate = DateTime.Now;
                entity.ModUser = Environment.UserName;
                ctx.RoomSet.Add(entity);

                ctx.SaveChanges();
                result.Success = true;
            }

            return result;
        }
        /// <summary>
        /// Updates a lesson.
        /// </summary>
        /// <param name="itemToSave">The item to save.</param>
        /// <param name="accountId">The account identifier.</param>
        /// <returns>The result.</returns>
        public ResultDto UpdateLesson(LessonEditDto itemToSave, Guid accountId)
        {
            ResultDto result = new ResultDto();
            using (BzsEntityContainer ctx = this.CreateContainer())
            {
                LessonEntity entity = ctx.LessonSet.FirstOrDefault(f => f.Id == itemToSave.Id);
                if (entity == null)
                {
                    result.Error = "ERR-LESSON-NOT-EXISTS";
                    return result;
                }

                if (entity.AccountId != accountId)
                {
                    result.Error = "ERR-LESSON-ACCOUNT-INVALID";
                    return result;
                }

                entity.DayId = itemToSave.DayId;
                entity.FromDate = DateTimeHelper.StringToDateTime(itemToSave.FromDate);
                entity.ToDate = DateTimeHelper.StringToDateTime(itemToSave.ToDate);
                entity.SubjectId = itemToSave.SubjectId;
                entity.TeacherId = itemToSave.TeacherId;
                entity.RoomId = itemToSave.RoomId;
                entity.Remark = itemToSave.Remark;
                entity.ModDate = DateTime.Now;
                entity.ModUser = Environment.UserName;

                ctx.SaveChanges();
                result.Success = true;
                return result;
            }
        }
        /// <summary>
        /// Inserts or updates a lesson.
        /// </summary>
        /// <param name="itemToSave">The item to save.</param>
        /// <param name="accountId">The account identifier.</param>
        /// <returns>The result.</returns>
        public ResultDto InsertUpdateLesson(LessonEditDto itemToSave, Guid accountId)
        {
            ResultDto result = new ResultDto();
            using (BzsEntityContainer ctx = this.CreateContainer())
            {
                LessonEntity entity = ctx.LessonSet.FirstOrDefault(f => f.Id == itemToSave.Id);
                if (entity != null)
                {
                    result.Error = "ERR-LESSON-ALREADY-EXISTS";
                    return result;
                }

                if (!new DayServerService().DayExists(itemToSave.DayId, ctx))
                {
                    result.Error = "ERR-LESSON-DAY-NOT-EXISTS";
                    return result;
                }

                if (!new SubjectServerService().SubjectExists(itemToSave.SubjectId, ctx))
                {
                    result.Error = "ERR-LESSON-SUBJECT-NOT-EXISTS";
                    return result;
                }

                if (itemToSave.TeacherId.HasValue && !new TeacherServerService().TeacherExists(itemToSave.TeacherId.Value, ctx))
                {
                    result.Error = "ERR-LESSON-TEACHER-NOT-EXISTS";
                    return result;
                }

                if (itemToSave.RoomId.HasValue && !new RoomServerService().RoomExists(itemToSave.RoomId.Value, ctx))
                {
                    result.Error = "ERR-LESSON-ROOM-NOT-EXISTS";
                    return result;
                }

                entity = new LessonEntity();
                entity.Id = itemToSave.Id;
                entity.AccountId = accountId;
                entity.DayId = itemToSave.DayId;
                entity.FromDate = DateTimeHelper.StringToDateTime(itemToSave.FromDate);
                entity.ToDate = DateTimeHelper.StringToDateTime(itemToSave.ToDate);
                entity.SubjectId = itemToSave.SubjectId;
                entity.TeacherId = itemToSave.TeacherId;
                entity.RoomId = itemToSave.RoomId;
                entity.Remark = itemToSave.Remark;
                entity.ModDate = DateTime.Now;
                entity.ModUser = Environment.UserName;
                ctx.LessonSet.Add(entity);

                ctx.SaveChanges();
                result.Success = true;
                return result;
            }
        }
        /// <summary>
        /// Updates a teacher.
        /// </summary>
        /// <param name="itemToSave">The item to save.</param>
        /// <param name="accountId">The account identifier.</param>
        /// <returns>The result.</returns>
        public ResultDto UpdateTeacher(TeacherEditDto itemToSave, Guid? accountId)
        {
            ResultDto result = new ResultDto();
            using (BzsEntityContainer ctx = this.CreateContainer())
            {
                TeacherEntity entity = ctx.TeacherSet.FirstOrDefault(f => f.Id == itemToSave.Id);
                if (entity == null)
                {
                    result.Error = "ERR-TEACHER-NOT-EXISTS";
                    return result;
                }

                if (entity.AccountId == null || entity.AccountId != accountId)
                {
                    result.Error = "ERR-TEACHER-ACCOUNT-INVALID";
                    return result;
                }

                entity.Code = itemToSave.Code.Length > 10 ? itemToSave.Code.Substring(0, 9) : itemToSave.Code;
                entity.Caption = itemToSave.Caption.Length > 50 ? itemToSave.Caption.Substring(0, 49) : itemToSave.Caption;
                entity.ModDate = DateTime.Now;
                entity.ModUser = Environment.UserName;

                ctx.SaveChanges();
                result.Success = true;
            }

            return result;
        }