public async Task<DTO.AdditionalService> EditAdditionalService(DTO.AdditionalService source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.AdditionalServices);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    AdditionalService additionalService;

                    if (!source.Empty())
                    {
                        var additionalServiceId = source.Id;
                        additionalService = session.Get<AdditionalService>(additionalServiceId);
                        if (additionalService == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(additionalServiceId), string.Format("Дополнительная услуга [{0}] не найдена", additionalServiceId));
                        }
                    }
                    else
                    {
                        additionalService = new AdditionalService();
                    }

                    additionalService.Name = source.Name;
                    additionalService.Price = source.Price;
                    additionalService.Measure = source.Measure;

                    var errors = additionalService.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(additionalService);
                    transaction.Commit();

                    return Mapper.Map<AdditionalService, DTO.AdditionalService>(additionalService);
                }
            });
        }
Exemple #2
0
        public async Task<DTO.Office> EditOffice(DTO.Office source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Offices);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    Office office;

                    if (!source.Empty())
                    {
                        var officeId = source.Id;
                        office = session.Get<Office>(officeId);
                        if (office == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(officeId), string.Format("Филиал [{0}] не найден", officeId));
                        }
                    }
                    else
                    {
                        office = new Office();
                    }

                    office.Name = source.Name;
                    office.Endpoint = source.Endpoint;
                    office.SessionId = source.SessionId;

                    var errors = office.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(office);
                    transaction.Commit();

                    return Mapper.Map<Office, DTO.Office>(office);
                }
            });
        }
        public async Task<DTO.LifeSituation> EditLifeSituation(DTO.LifeSituation source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.LifeSituations);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    LifeSituation lifeSituation;

                    if (!source.Empty())
                    {
                        var lifeSituationId = source.Id;
                        lifeSituation = session.Get<LifeSituation>(lifeSituationId);
                        if (lifeSituation == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(lifeSituationId),
                                string.Format("Жизненная ситуация [{0}] не найдена", lifeSituationId));
                        }
                    }
                    else
                    {
                        lifeSituation = new LifeSituation();
                    }

                    lifeSituation.IsActive = source.IsActive;
                    lifeSituation.Code = source.Code;
                    lifeSituation.Name = source.Name;
                    lifeSituation.Comment = source.Comment;
                    lifeSituation.Description = source.Description;
                    lifeSituation.Color = source.Color;
                    lifeSituation.FontSize = source.FontSize;

                    if (source.LifeSituationGroup != null)
                    {
                        Guid groupId = source.LifeSituationGroup.Id;

                        var group = session.Get<LifeSituationGroup>(groupId);
                        if (group == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(groupId),
                                string.Format("Группа жизненной ситуации [{0}] не найдена", groupId));
                        }

                        lifeSituation.LifeSituationGroup = group;
                    }
                    else
                    {
                        lifeSituation.LifeSituationGroup = null;
                    }

                    if (source.Service != null)
                    {
                        Guid serviceId = source.Service.Id;

                        var service = session.Get<Service>(serviceId);
                        if (service == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(serviceId),
                                string.Format("Услуга [{0}] не найдена", serviceId));
                        }

                        lifeSituation.Service = service;
                    }
                    else
                    {
                        lifeSituation.Service = null;
                    }

                    var errors = lifeSituation.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(lifeSituation);

                    var todayQueuePlan = QueueInstance.TodayQueuePlan;
                    using (var locker = todayQueuePlan.WriteLock())
                    {
                        transaction.Commit();

                        todayQueuePlan.Put(lifeSituation);
                    }

                    return Mapper.Map<LifeSituation, DTO.LifeSituation>(lifeSituation);
                }
            });
        }
Exemple #4
0
        public async Task<DTO.ServiceGroup> EditServiceGroup(DTO.ServiceGroup source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Services);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    ServiceGroup serviceGroup;

                    if (!source.Empty())
                    {
                        var serviceGroupId = source.Id;
                        serviceGroup = session.Get<ServiceGroup>(serviceGroupId);
                        if (serviceGroup == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(serviceGroupId),
                                string.Format("Группа услуг [{0}] не найдена", serviceGroupId));
                        }
                    }
                    else
                    {
                        serviceGroup = new ServiceGroup();
                    }

                    serviceGroup.IsActive = source.IsActive;
                    serviceGroup.Code = source.Code;
                    serviceGroup.Name = source.Name;
                    serviceGroup.Comment = source.Comment;
                    serviceGroup.Description = source.Description;
                    serviceGroup.Columns = source.Columns;
                    serviceGroup.Rows = source.Rows;
                    serviceGroup.Color = source.Color;
                    serviceGroup.FontSize = source.FontSize;

                    if (source.ParentGroup != null)
                    {
                        Guid parentGroupId = source.ParentGroup.Id;

                        ServiceGroup parentGroup = session.Get<ServiceGroup>(parentGroupId);
                        if (parentGroup == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(parentGroupId),
                                string.Format("Группа услуг [{0}] не найдена", parentGroupId));
                        }

                        serviceGroup.ParentGroup = parentGroup;
                    }
                    else
                    {
                        serviceGroup.ParentGroup = null;
                    }

                    var errors = serviceGroup.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(serviceGroup);

                    var todayQueuePlan = QueueInstance.TodayQueuePlan;
                    using (var locker = todayQueuePlan.WriteLock())
                    {
                        transaction.Commit();

                        todayQueuePlan.Put(serviceGroup);
                    }

                    return Mapper.Map<ServiceGroup, DTO.ServiceGroup>(serviceGroup);
                }
            });
        }
        public async Task<DTO.ServiceParameterNumber> EditServiceParameterNumber(DTO.ServiceParameterNumber source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Services);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    var parameterId = source.Id;

                    ServiceParameterNumber parameter;

                    if (!source.Empty())
                    {
                        parameter = session.Get<ServiceParameterNumber>(parameterId);
                        if (parameter == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(parameterId),
                                string.Format("Параметр услуги [{0}] не найден", parameterId));
                        }
                    }
                    else
                    {
                        parameter = new ServiceParameterNumber();
                    }

                    parameter.Name = source.Name;
                    parameter.ToolTip = source.ToolTip;
                    parameter.IsRequire = source.IsRequire;

                    if (source.Service != null)
                    {
                        Guid serviceId = source.Service.Id;

                        Service service = session.Get<Service>(serviceId);
                        if (service == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(serviceId),
                                string.Format("Услуга [{0}] не найдена", serviceId));
                        }
                        parameter.Service = service;
                    }
                    else
                    {
                        parameter.Service = null;
                    }

                    var errors = parameter.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(parameter);
                    transaction.Commit();

                    return Mapper.Map<ServiceParameterNumber, DTO.ServiceParameterNumber>(parameter);
                }
            });
        }
Exemple #6
0
        public async Task<DTO.Service> EditService(DTO.Service source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Services);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    Service service;

                    if (!source.Empty())
                    {
                        var serviceId = source.Id;
                        service = session.Get<Service>(serviceId);
                        if (service == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(serviceId), string.Format("Услуга [{0}] не найдена", serviceId));
                        }
                    }
                    else
                    {
                        service = new Service();
                    }

                    service.IsActive = source.IsActive;
                    service.Code = source.Code;
                    service.Priority = source.Priority;
                    service.Name = source.Name;
                    service.Comment = source.Comment;
                    service.Tags = source.Tags;
                    service.Description = source.Description;
                    service.Link = source.Link;
                    service.MaxSubjects = source.MaxSubjects;
                    service.MaxEarlyDays = source.MaxEarlyDays;
                    service.MaxClientRecalls = source.MaxClientRecalls;
                    service.IsPlanSubjects = source.IsPlanSubjects;
                    service.ClientRequire = source.ClientRequire;
                    service.ClientCallDelay = source.ClientCallDelay;
                    service.TimeIntervalRounding = source.TimeIntervalRounding;
                    service.IsUseType = source.IsUseType;
                    service.LiveRegistrator = source.LiveRegistrator;
                    service.EarlyRegistrator = source.EarlyRegistrator;
                    service.Color = source.Color;
                    service.FontSize = source.FontSize;

                    if (source.ServiceGroup != null)
                    {
                        Guid serviceGroupId = source.ServiceGroup.Id;

                        ServiceGroup serviceGroup = session.Get<ServiceGroup>(serviceGroupId);
                        if (serviceGroup == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(serviceGroupId),
                                string.Format("Группа услуг [{0}] не найдена", serviceGroupId));
                        }

                        service.ServiceGroup = serviceGroup;
                    }
                    else
                    {
                        service.ServiceGroup = null;
                    }

                    var errors = service.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(service);

                    var todayQueuePlan = QueueInstance.TodayQueuePlan;
                    using (var locker = todayQueuePlan.WriteLock())
                    {
                        transaction.Commit();

                        todayQueuePlan.Put(service);
                    }

                    return Mapper.Map<Service, DTO.Service>(service);
                }
            });
        }
Exemple #7
0
        public async Task<DTO.Administrator> EditAdministrator(DTO.Administrator source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Users);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    Administrator administrator;

                    if (!source.Empty())
                    {
                        var administratorId = source.Id;
                        administrator = session.Get<Administrator>(administratorId);
                        if (administrator == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(administratorId),
                                string.Format("Администратор [{0}] не найден", administratorId));
                        }
                    }
                    else
                    {
                        administrator = new Administrator()
                        {
                            SessionId = Guid.NewGuid()
                        };
                    }

                    administrator.Surname = source.Surname;
                    administrator.Name = source.Name;
                    administrator.Patronymic = source.Patronymic;
                    administrator.Email = source.Email;
                    administrator.Mobile = source.Mobile;
                    administrator.IsActive = source.IsActive;
                    administrator.Permissions = source.Permissions;
                    administrator.IsMultisession = source.IsMultisession;

                    var errors = administrator.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(administrator);

                    var todayQueuePlan = QueueInstance.TodayQueuePlan;
                    using (var locker = todayQueuePlan.WriteLock())
                    {
                        transaction.Commit();

                        todayQueuePlan.Put(administrator);
                    }

                    return Mapper.Map<Administrator, DTO.Administrator>(administrator);
                }
            });
        }
Exemple #8
0
        public async Task<DTO.Operator> EditOperator(DTO.Operator source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Users);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    Operator queueOperator;

                    if (!source.Empty())
                    {
                        var operatorId = source.Id;
                        queueOperator = session.Get<Operator>(operatorId);
                        if (queueOperator == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(operatorId),
                                string.Format("Оператор [{0}] не найден", operatorId));
                        }
                    }
                    else
                    {
                        queueOperator = new Operator()
                        {
                            SessionId = Guid.NewGuid()
                        };
                    }

                    queueOperator.Surname = source.Surname;
                    queueOperator.Name = source.Name;
                    queueOperator.Patronymic = source.Patronymic;
                    queueOperator.Email = source.Email;
                    queueOperator.Mobile = source.Mobile;
                    queueOperator.IsActive = source.IsActive;
                    queueOperator.Identity = source.Identity;
                    queueOperator.IsMultisession = source.IsMultisession;

                    if (source.Workplace != null)
                    {
                        Guid workplaceId = source.Workplace.Id;

                        Workplace workplace = session.Get<Workplace>(workplaceId);
                        if (workplace == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(workplaceId),
                                string.Format("Рабочее место [{0}] не найдено", workplaceId));
                        }

                        queueOperator.Workplace = workplace;
                    }
                    else
                    {
                        queueOperator.Workplace = null;
                    }

                    var errors = queueOperator.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(queueOperator);

                    var todayQueuePlan = QueueInstance.TodayQueuePlan;
                    using (var locker = todayQueuePlan.WriteLock())
                    {
                        transaction.Commit();

                        todayQueuePlan.Put(queueOperator);
                    }

                    return Mapper.Map<Operator, DTO.Operator>(queueOperator);
                }
            });
        }
Exemple #9
0
        public async Task<DTO.ServiceRendering> EditServiceRendering(DTO.ServiceRendering source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Services);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    ServiceRendering serviceRendering;

                    if (!source.Empty())
                    {
                        Guid serviceRenderingId = source.Id;
                        serviceRendering = session.Get<ServiceRendering>(serviceRenderingId);
                        if (serviceRendering == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(serviceRenderingId),
                                string.Format("Обслуживание услуги [{0}] не найдено", serviceRenderingId));
                        }
                    }
                    else
                    {
                        serviceRendering = new ServiceRendering();
                    }

                    if (source.Schedule != null)
                    {
                        var scheduleId = source.Schedule.Id;

                        var schedule = session.Get<Schedule>(scheduleId);
                        if (schedule == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(scheduleId),
                                string.Format("Расписание [{0}] не найдено", scheduleId));
                        }
                        serviceRendering.Schedule = schedule;
                    }
                    else
                    {
                        serviceRendering.Schedule = null;
                    }

                    if (source.Operator != null)
                    {
                        var operatorId = source.Operator.Id;

                        var queueOperator = session.Get<Operator>(operatorId);
                        if (queueOperator == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(operatorId),
                                string.Format("Оператор [{0}] не найден", operatorId));
                        }
                        serviceRendering.Operator = queueOperator;
                    }
                    else
                    {
                        serviceRendering.Operator = null;
                    }

                    if (source.ServiceStep != null)
                    {
                        var serviceStepId = source.ServiceStep.Id;

                        var serviceStep = session.Get<ServiceStep>(serviceStepId);
                        if (serviceStep == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(serviceStepId),
                                string.Format("Этап услуги [{0}] не найден", serviceStepId));
                        }
                        serviceRendering.ServiceStep = serviceStep;
                    }
                    else
                    {
                        serviceRendering.ServiceStep = null;
                    }

                    serviceRendering.Mode = source.Mode;
                    serviceRendering.Priority = source.Priority;

                    var errors = serviceRendering.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(serviceRendering);

                    var todayQueuePlan = QueueInstance.TodayQueuePlan;
                    using (var locker = todayQueuePlan.WriteLock())
                    {
                        transaction.Commit();

                        todayQueuePlan.Flush(QueuePlanFlushMode.ServiceRenderings);
                        todayQueuePlan.Build(DateTime.Now.TimeOfDay);
                    }

                    return Mapper.Map<ServiceRendering, DTO.ServiceRendering>(serviceRendering);
                }
            });
        }
Exemple #10
0
        public async Task<DTO.Client> EditClient(DTO.Client source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Clients);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    string surname = source.Surname;
                    string name = source.Name;
                    string patronymic = source.Patronymic;
                    string email = source.Email;
                    string mobile = source.Mobile;
                    string identity = source.Identity;

                    Client client = null;

                    if (!source.Empty())
                    {
                        var clientId = source.Id;
                        client = session.Get<Client>(clientId);
                        if (client == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(clientId), string.Format("Клиент [{0}] не найден", clientId));
                        }
                    }
                    else
                    {
                        bool hasEmail = !string.IsNullOrWhiteSpace(email);

                        if (hasEmail)
                        {
                            int count = session.CreateCriteria<Client>()
                                .Add(Expression.Eq("Email", email))
                                .SetProjection(Projections.RowCount())
                                .UniqueResult<int>();

                            if (count > 0)
                            {
                                throw new FaultException("Клиент с таким электронным адресом уже существует");
                            }
                        }

                        bool hasIdentity = !string.IsNullOrWhiteSpace(identity);

                        if (hasIdentity)
                        {
                            int count = session.CreateCriteria<Client>()
                                .Add(Expression.Eq("Identity", identity))
                                .SetProjection(Projections.RowCount())
                                .UniqueResult<int>();

                            if (count > 0)
                            {
                                throw new FaultException("Клиент с данной идентификацией уже существует");
                            }
                        }

                        if (!hasEmail && !hasIdentity)
                        {
                            client = session.CreateCriteria<Client>()
                                .Add(new Conjunction()
                                    .Add(Expression.Eq("Surname", surname))
                                    .Add(Expression.Eq("Name", name))
                                    .Add(Expression.Eq("Patronymic", patronymic)))
                                .SetMaxResults(1)
                                .UniqueResult<Client>();
                        }

                        if (client == null)
                        {
                            client = new Client()
                            {
                                SessionId = Guid.NewGuid()
                            };
                        }
                    }

                    client.Surname = surname;
                    client.Name = name;
                    client.Patronymic = patronymic;
                    client.Email = email;
                    client.Mobile = mobile;
                    client.Identity = identity;

                    var errors = client.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    string password = source.Password;

                    if (!string.IsNullOrWhiteSpace(password))
                    {
                        try
                        {
                            client.SetPassword(password);
                        }
                        catch (Exception exception)
                        {
                            throw new FaultException(exception.Message);
                        }
                    }

                    session.Save(client);

                    if (source.Empty() && !string.IsNullOrWhiteSpace(email))
                    {
                        var сonfig = session.Get<SMTPConfig>(ConfigType.SMTP);
                        if (сonfig == null)
                        {
                            throw new SystemException();
                        }

                        string template = @"Вы успешно зарегистрированы, Ваш пароль {Password}";

                        string text = template
                            .Replace("{Password}", password);

                        using (var smtpClient = new SmtpClient(сonfig.Server, сonfig.Port))
                        {
                            try
                            {
                                smtpClient.EnableSsl = сonfig.EnableSsl;
                                smtpClient.UseDefaultCredentials = false;
                                smtpClient.Credentials = new NetworkCredential(сonfig.User, сonfig.Password);

                                var message = new MailMessage(сonfig.From, email)
                                {
                                    Subject = "Вы зарегистрированы",
                                    Body = text
                                };
                                smtpClient.Send(message);
                            }
                            catch (Exception exception)
                            {
                                logger.Error(exception);
                            }
                        }
                    }

                    var queuePlan = QueueInstance.TodayQueuePlan;
                    using (var locker = queuePlan.WriteLock())
                    {
                        transaction.Commit();

                        queuePlan.Put(client);
                    }

                    return Mapper.Map<Client, DTO.Client>(client);
                }
            });
        }
Exemple #11
0
        public async Task<DTO.ServiceStep> EditServiceStep(DTO.ServiceStep source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Services);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    ServiceStep serviceStep;

                    if (!source.Empty())
                    {
                        var serviceStepId = source.Id;
                        serviceStep = session.Get<ServiceStep>(serviceStepId);
                        if (serviceStep == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(serviceStepId),
                                string.Format("Этап услуги [{0}] не найден", serviceStepId));
                        }
                    }
                    else
                    {
                        serviceStep = new ServiceStep();
                    }

                    if (source.Service != null)
                    {
                        var serviceId = source.Service.Id;

                        var service = session.Get<Service>(serviceId);
                        if (service == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(serviceId),
                                string.Format("Услуга [{0}] не найдена", serviceId));
                        }
                        serviceStep.Service = service;
                    }
                    else
                    {
                        serviceStep.Service = null;
                    }

                    serviceStep.Name = source.Name;

                    var errors = serviceStep.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(serviceStep);
                    transaction.Commit();

                    return Mapper.Map<ServiceStep, DTO.ServiceStep>(serviceStep);
                }
            });
        }
Exemple #12
0
        public async Task<DTO.Workplace> EditWorkplace(DTO.Workplace source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Workplaces);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    Workplace workplace;

                    if (!source.Empty())
                    {
                        var workplaceId = source.Id;
                        workplace = session.Get<Workplace>(workplaceId);
                        if (workplace == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(workplaceId), string.Format("Рабочее место [{0}] не найдено", workplaceId));
                        }
                    }
                    else
                    {
                        workplace = new Workplace();
                    }

                    workplace.Type = source.Type;
                    workplace.Number = source.Number;
                    workplace.Modificator = source.Modificator;
                    workplace.Comment = source.Comment;
                    workplace.DisplayDeviceId = source.DisplayDeviceId;
                    workplace.QualityPanelDeviceId = source.QualityPanelDeviceId;

                    var errors = workplace.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(workplace);

                    var todayQueuePlan = QueueInstance.TodayQueuePlan;
                    using (var locker = todayQueuePlan.WriteLock())
                    {
                        transaction.Commit();

                        todayQueuePlan.Put(workplace);
                    }

                    return Mapper.Map<Workplace, DTO.Workplace>(workplace);
                }
            });
        }
        public async Task<DTO.ClientRequestAdditionalService> EditClientRequestAdditionalService(DTO.ClientRequestAdditionalService source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Operator);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    ClientRequestAdditionalService clientRequestAdditionalService;

                    if (!source.Empty())
                    {
                        var clientRequestAdditionalServiceId = source.Id;
                        clientRequestAdditionalService = session.Get<ClientRequestAdditionalService>(clientRequestAdditionalServiceId);
                        if (clientRequestAdditionalService == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(clientRequestAdditionalServiceId),
                                string.Format("Дополнительная услуга запроса клиента [{0}] не найдена", clientRequestAdditionalServiceId));
                        }
                    }
                    else
                    {
                        clientRequestAdditionalService = new ClientRequestAdditionalService();
                    }

                    if (source.ClientRequest != null)
                    {
                        Guid clientRequestId = source.ClientRequest.Id;

                        ClientRequest clientRequest = session.Get<ClientRequest>(clientRequestId);
                        if (clientRequest == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(clientRequestId),
                                string.Format("Запрос клиента [{0}] не найден", clientRequestId));
                        }

                        clientRequestAdditionalService.ClientRequest = clientRequest;
                    }
                    else
                    {
                        clientRequestAdditionalService.ClientRequest = null;
                    }

                    if (source.AdditionalService != null)
                    {
                        Guid additionalServiceId = source.AdditionalService.Id;

                        AdditionalService additionalService = session.Get<AdditionalService>(additionalServiceId);
                        if (additionalService == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(additionalServiceId),
                                string.Format("Дополнительная услуга [{0}] не найдена", additionalServiceId));
                        }

                        clientRequestAdditionalService.AdditionalService = additionalService;
                    }
                    else
                    {
                        clientRequestAdditionalService.AdditionalService = null;
                    }

                    clientRequestAdditionalService.Operator = currentUser as Operator;
                    clientRequestAdditionalService.Quantity = source.Quantity;

                    var errors = clientRequestAdditionalService.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(clientRequestAdditionalService);
                    transaction.Commit();

                    return Mapper.Map<ClientRequestAdditionalService, DTO.ClientRequestAdditionalService>(clientRequestAdditionalService);
                }
            });
        }
Exemple #14
0
        public async Task<DTO.MediaConfigFile> EditMediaConfigFile(DTO.MediaConfigFile source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Config);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    MediaConfigFile mediaConfigFile;

                    if (!source.Empty())
                    {
                        var mediaConfigFileId = source.Id;
                        mediaConfigFile = session.Get<MediaConfigFile>(mediaConfigFileId);
                        if (mediaConfigFile == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(mediaConfigFileId), string.Format("Медиафайл [{0}] не найден", mediaConfigFileId));
                        }
                    }
                    else
                    {
                        mediaConfigFile = new MediaConfigFile();
                    }

                    mediaConfigFile.Name = source.Name;

                    var errors = mediaConfigFile.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(mediaConfigFile);
                    transaction.Commit();

                    return Mapper.Map<MediaConfigFile, DTO.MediaConfigFile>(mediaConfigFile);
                }
            });
        }
        public async Task<DTO.OperatorInterruption> EditOperatorInterruption(DTO.OperatorInterruption source)
        {
            return await Task.Run(() =>
            {
                CheckPermission(UserRole.Administrator, AdministratorPermissions.Users);

                using (var session = SessionProvider.OpenSession())
                using (var transaction = session.BeginTransaction())
                {
                    OperatorInterruption interruption;

                    if (!source.Empty())
                    {
                        var operatorInterruptionId = source.Id;
                        interruption = session.Get<OperatorInterruption>(operatorInterruptionId);
                        if (interruption == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(operatorInterruptionId),
                                string.Format("Перерыв оператора [{0}] не найден", operatorInterruptionId));
                        }
                    }
                    else
                    {
                        interruption = new OperatorInterruption();
                    }

                    interruption.Type = source.Type;
                    interruption.TargetDate = source.TargetDate.Date;
                    interruption.DayOfWeek = source.DayOfWeek;
                    interruption.StartTime = source.StartTime;
                    interruption.FinishTime = source.FinishTime;
                    interruption.ServiceRenderingMode = source.ServiceRenderingMode;
                    interruption.WeekFold = source.WeekFold;

                    if (source.Operator != null)
                    {
                        Guid operatorId = source.Operator.Id;

                        Operator queueOperator = session.Get<Operator>(operatorId);
                        if (queueOperator == null)
                        {
                            throw new FaultException<ObjectNotFoundFault>(new ObjectNotFoundFault(operatorId),
                                string.Format("Оператор [{0}] не найден", operatorId));
                        }

                        interruption.Operator = queueOperator;
                    }
                    else
                    {
                        interruption.Operator = null;
                    }

                    var errors = interruption.Validate();
                    if (errors.Length > 0)
                    {
                        throw new FaultException(errors.First().Message);
                    }

                    session.Save(interruption);

                    var todayQueuePlan = QueueInstance.TodayQueuePlan;
                    using (var locker = todayQueuePlan.WriteLock())
                    {
                        transaction.Commit();

                        todayQueuePlan.Flush(QueuePlanFlushMode.OperatorInterruptions);
                        todayQueuePlan.Build(DateTime.Now.TimeOfDay);
                    }

                    return Mapper.Map<OperatorInterruption, DTO.OperatorInterruption>(interruption);
                }
            });
        }