Example #1
0
        public Task <PartialViewResult> LeftMenu()
        {
            var userName = string.Empty;

            if (HttpContext.User.Identity.IsAuthenticated)
            {
                userName = HttpContext.User.Identity.Name;
            } //if
            return
                (Task.Factory.StartNew(() =>
            {
                ProjectRole role = null;
                var token = GetToken(userName);
                if (token != null)
                {
                    role = ProjectRoleSet.GetKindByID(token.User.ProjectRoleID);
                }
                return role;
            }).ContinueWith(
                     t =>
            {
                return PartialView("LeftMenu", t.Result);
            }
                     ));
        }
        /// <summary>
        /// Сохраняет в базе модель редактирования заказа.
        /// </summary>
        /// <param name="token">Токен безопасности.</param>
        /// <param name="model">Модель редактирования.</param>
        /// <param name="result">Результат корректности модели.</param>
        /// <returns>Модель пункта грида.</returns>
        public static RepairOrderGridItemModel SaveEditRepairOrderGridItemModel(SecurityToken token, RepairOrderEditModel model, JGridSaveModelResult result)
        {
            var entity = RemontinkaServer.Instance.EntitiesFacade.GetOrder(token, model.Id);

            RiseExceptionIfNotFound(entity, model.Id, "Заказ");

            var oldEntity = new RepairOrder();

            entity.CopyTo(oldEntity);

            if (ProjectRoleSet.UserHasRole(token.User.ProjectRoleID, ProjectRoleSet.Engineer))//Если пользователь инженер, тогда даем ему право изменять только статус заказа
            {
                entity.OrderStatusID  = model.RepairOrderStatusID;
                entity.Recommendation = model.Recommendation;
            } //if
            else
            {
                //TODO Сделать трекинг изменений в OrderTimeline
                entity.BranchID         = model.BranchID;
                entity.CallEventDate    = model.CallEventDate;
                entity.ClientAddress    = model.ClientAddress;
                entity.ClientEmail      = model.ClientEmail;
                entity.ClientFullName   = model.ClientFullName;
                entity.ClientPhone      = model.ClientPhone;
                entity.DateOfBeReady    = model.DateOfBeReady;
                entity.Defect           = model.Defect;
                entity.DeviceAppearance = model.DeviceAppearance;
                entity.DeviceModel      = model.DeviceModel;
                entity.DeviceSN         = model.DeviceSN;
                entity.DeviceTitle      = model.DeviceTitle;
                entity.DeviceTrademark  = model.DeviceTrademark;
                entity.EngineerID       = model.EngineerID;
                entity.GuidePrice       = model.GuidePrice;
                entity.IsUrgent         = model.IsUrgent;
                entity.IssueDate        = model.IssueDate;
                if (entity.IssueDate != null && entity.IssuerID == null)
                {
                    entity.IssuerID = token.User.UserID;
                } //if
                //entity.IssuerID = model.is
                entity.ManagerID      = model.ManagerID;
                entity.Notes          = model.Notes;
                entity.Options        = model.Options;
                entity.OrderKindID    = model.OrderKindID;
                entity.OrderStatusID  = model.RepairOrderStatusID;
                entity.PrePayment     = model.PrePayment;
                entity.Recommendation = model.Recommendation;
                entity.WarrantyTo     = model.WarrantyTo;
            } //else

            RemontinkaServer.Instance.EntitiesFacade.SaveRepairOrder(token, entity);
            entity = RemontinkaServer.Instance.EntitiesFacade.GetOrder(token, entity.RepairOrderID);
            RiseExceptionIfNotFound(entity, model.Id, "Заказ");

            RemontinkaServer.Instance.OrderTimelineManager.TrackOrderChange(token, oldEntity, entity);

            return(CreateItemModel(entity));
        }
Example #3
0
 /// <summary>
 /// Создает модель строки грида по конкретной сущности.
 /// </summary>
 /// <param name="entity">Сущность.</param>
 /// <returns>Созданная модель.</returns>
 private UserGridItemModel CreateItemModel(Romontinka.Server.DataLayer.Entities.User entity)
 {
     return(new UserGridItemModel
     {
         Contacts = string.Format("{0} {1}", entity.Phone, entity.Email),
         FullName = string.Format("{0} {1} {2}", entity.LastName, entity.FirstName, entity.MiddleName),
         Id = entity.UserID,
         Login = entity.LoginName,
         ProjectRoleTitle = ProjectRoleSet.GetKindByID(entity.ProjectRoleID).Title,
     });
 }
        /// <summary>
        /// Сохраняет в базе модель создания элемента.
        /// </summary>
        /// <param name="token">Токен безопасности.</param>
        /// <param name="model">Модель редактирования сущности для сохранения.</param>
        /// <param name="result">Результат с ошибками.</param>
        public override void SaveEditModel(SecurityToken token, RepairOrderEditModel model, SaveModelResult result)
        {
            var entity = ClientCore.Instance.DataStore.GetRepairOrder(model.Id);

            RiseExceptionIfNotFound(entity, model.Id, "Заказ");

            var oldEntity = new RepairOrder();

            entity.CopyTo(oldEntity);

            if (ProjectRoleSet.UserHasRole(token.User.ProjectRoleID, ProjectRoleSet.Engineer))
            {
                entity.OrderStatusIDGuid = model.RepairOrderStatusID;
            } //if
            else
            {
                //TODO Сделать трекинг изменений в OrderTimeline
                entity.BranchIDGuid          = model.BranchID;
                entity.CallEventDateDateTime = model.CallEventDate;
                entity.ClientAddress         = model.ClientAddress;
                entity.ClientEmail           = model.ClientEmail;
                entity.ClientFullName        = model.ClientFullName;
                entity.ClientPhone           = model.ClientPhone;
                entity.DateOfBeReadyDateTime = model.DateOfBeReady;
                entity.Defect            = model.Defect;
                entity.DeviceAppearance  = model.DeviceAppearance;
                entity.DeviceModel       = model.DeviceModel;
                entity.DeviceSN          = model.DeviceSN;
                entity.DeviceTitle       = model.DeviceTitle;
                entity.DeviceTrademark   = model.DeviceTrademark;
                entity.EngineerIDGuid    = model.EngineerID;
                entity.GuidePrice        = (double?)WpfUtils.StringToDecimal(model.GuidePrice);
                entity.IsUrgentBoolean   = model.IsUrgent;
                entity.IssueDateDateTime = model.IssueDate;
                if (entity.IssueDate != null && entity.IssuerID == null)
                {
                    entity.IssuerID = token.User.UserID;
                } //if

                entity.ManagerIDGuid      = model.ManagerID;
                entity.Notes              = model.Notes;
                entity.Options            = model.Options;
                entity.OrderKindIDGuid    = model.OrderKindID;
                entity.OrderStatusIDGuid  = model.RepairOrderStatusID;
                entity.PrePayment         = (double?)WpfUtils.StringToDecimal(model.PrePayment);
                entity.Recommendation     = model.Recommendation;
                entity.WarrantyToDateTime = model.WarrantyTo;
            } //else

            ClientCore.Instance.DataStore.SaveRepairOrder(entity);


            ClientCore.Instance.OrderTimelineManager.TrackOrderChange(token, oldEntity, entity);
        }
Example #5
0
        public ActionResult LeftMenu()
        {
            ProjectRole role = null;

            if (HttpContext.User.Identity.IsAuthenticated)
            {
                var token = GetToken();
                if (token != null)
                {
                    role = ProjectRoleSet.GetKindByID(token.User.ProjectRoleID);
                }
            }
            return(View("LeftMenu", role));
        }
Example #6
0
        private void InternalUserRegistration(string login, string password, string notes)
        {
            try
            {
                RiseInfoStatusChanged("Регистрация пользователя");

                var user = ClientCore.Instance.DataStore.GetUser(login);
                if (user != null)
                {
                    if ((!string.IsNullOrWhiteSpace(user.PasswordHash)) && (!StringComparer.Ordinal.Equals(user.PasswordHash, BcryptHash(password))))
                    {
                        RiseAuthError("Пароль не совпадает с текущим на клиенте");
                        return;
                    }
                    var userKey = ClientCore.Instance.DataStore.GetCurrentUserKey(user.UserIDGuid);
                    if (userKey != null && userKey.IsActivatedBool)
                    {
                        _logger.InfoFormat("Пользователь с таким логином уже существует, отправка ключей невозможна {0}", login);
                        RiseAuthError("Такой пользователь уже есть");
                        return;
                    }
                }

                _logger.InfoFormat("Старт генерации ключей для пользователя {0}.", login);
                RiseInfoStatusChanged("Генерация ключей");

                var privateFilePath = Path.Combine(LocationUtils.GetFullPath(), PrivateKeyFileName);
                var publicFilePath  = Path.Combine(LocationUtils.GetFullPath(), PublicKeyFileName);
                ClientCore.Instance.CryptoService.CreateRsaKeyPair(publicFilePath, privateFilePath, password);

                if (!File.Exists(privateFilePath) || !File.Exists(publicFilePath))
                {
                    throw new Exception("Ключи не создались");
                } //if

                var publicKeyData  = File.ReadAllText(publicFilePath, _rsaKeyEncoding);
                var privateKeyData = File.ReadAllText(privateFilePath, _rsaKeyEncoding);

                RiseInfoStatusChanged("Отправка запроса на сервер");
                var domainId = ClientCore.Instance.DataStore.GetFirstUserDomainID();

                var request = new RegisterPublicKeyRequest();
                request.ClientUserDomainID = domainId;
                request.EventDate          = DateTime.Now;
                request.KeyNotes           = notes;
                request.PublicKeyData      = publicKeyData;
                request.UserLogin          = login;

                var response = ClientCore.Instance.WebClient.RegisterPublicKey(request);

                if (user == null)
                {
                    RiseInfoStatusChanged("Ответ получен, сохраняем локально пользователя");

                    user = new User();
                    user.DomainIDGuid = response.UserDomainID;
                    user.LoginName    = login;

                    user.FirstName     = string.Empty;
                    user.Email         = string.Empty;
                    user.LastName      = string.Empty;
                    user.Email         = string.Empty;
                    user.ProjectRoleID = ProjectRoleSet.GetMinimumRoleID();
                    user.Phone         = string.Empty;
                    user.PasswordHash  = BcryptHash(password);
                    ClientCore.Instance.DataStore.SaveUser(user);
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(user.PasswordHash))//при первой регистрации пользователя
                    {
                        user.PasswordHash = BcryptHash(password);
                        ClientCore.Instance.DataStore.SaveUser(user);
                    }
                }

                RiseInfoStatusChanged("Сохраняем пользовательский ключ");

                var key = new UserKey();
                key.EventDateDateTime = request.EventDate;
                key.UserIDGuid        = user.UserIDGuid;
                key.Number            = response.Number;
                key.PrivateKeyData    = privateKeyData;
                key.PublicKeyData     = publicKeyData;
                key.IsActivatedBool   = false;

                ClientCore.Instance.DataStore.SaveUserKey(key);//TODO удалить пользователя, если ключ не сохранился
                RiseInfoStatusChanged("Пользователь успешно зарегистрировался");
                RiseUserRegistredEventArgs(login);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex,
                                 string.Format("Во время регистрации ключей пользователя {0} произошла ошибка ", login));

                RiseAuthError(ex.Message, ex);
            } //try
        }
Example #7
0
        /// <summary>
        /// Создает модель данных для представления списка заказов.
        /// </summary>
        /// <returns>Модель данных.</returns>
        public static RepairOrderViewModel CreateRepairOrderViewModel(SecurityToken token)
        {
            var model = new RepairOrderViewModel();

            model.OrderGrid = new DataGridDescriptor();
            model.OrderGrid.BeforeGridUpdateJsFunctionName = "BeforeUpdateRepairOrderGrid";
            model.OrderGrid.Name       = ControllerName;
            model.OrderGrid.Controller = ControllerName;
            model.OrderGrid.SearchInputs.Add(new ComboBoxSearchInput
            {
                Name          = "Фильтр",
                ComboBoxModel =
                    new AjaxComboBoxModel
                {
                    Property    = "FilterID",
                    Controller  = "AjaxRepairOrderFilterComboBox",
                    FirstIsNull = true
                }
            });
            model.OrderGrid.SearchInputs.Add(new ComboBoxSearchInput
            {
                Name          = "Пользователь",
                ComboBoxModel =
                    new AjaxComboBoxModel
                {
                    Property    = "UserID",
                    Controller  = "AjaxUserComboBox",
                    FirstIsNull = true
                }
            });
            model.OrderGrid.SearchInputs.Add(new ComboBoxSearchInput
            {
                Name          = "Статус",
                ComboBoxModel = new AjaxComboBoxModel
                {
                    Property    = "OrderStatusID",
                    Controller  = "AjaxOrderStatus",
                    FirstIsNull = true
                }
            });

            model.OrderGrid.SearchInputs.Add(new TextSearchInput {
                Id = "Name", Value = string.Empty, Name = "Имя"
            });
            model.OrderGrid.SearchInputs.Add(new HiddenSearchInput {
                Id = "CopyFromRepairOrderID"
            });

            model.OrderGrid.Columns.Add(new TextGridColumn {
                Name = "Номер", Id = "Number"
            });
            model.OrderGrid.Columns.Add(new TextGridColumn {
                Name = "Статус", Id = "StatusTitle"
            });
            model.OrderGrid.Columns.Add(new TextGridColumn {
                Name = "Дата", Id = "EventDate"
            });
            model.OrderGrid.Columns.Add(new TextGridColumn {
                Name = "Дата готовности", Id = "EventDateOfBeReady"
            });
            model.OrderGrid.Columns.Add(new TextGridColumn {
                Name = "Менеджер", Id = "ManagerFullName"
            });
            model.OrderGrid.Columns.Add(new TextGridColumn {
                Name = "Инженер", Id = "EngineerFullName"
            });
            model.OrderGrid.Columns.Add(new TextGridColumn {
                Name = "Клиент", Id = "ClientFullName"
            });
            model.OrderGrid.Columns.Add(new TextGridColumn {
                Name = "Устройство", Id = "DeviceTitle"
            });

            if (ProjectRoleSet.UserHasRole(token.User.ProjectRoleID, ProjectRoleSet.Engineer))
            {
                model.OrderGrid.Columns.Add(new TextGridColumn {
                    Name = "Неисправности", Id = "Defect"
                });
            }
            else
            {
                model.OrderGrid.Columns.Add(new TextGridColumn {
                    Name = "Суммы", Id = "Totals"
                });
            }


            if (token.User.ProjectRoleID == ProjectRoleSet.Admin.ProjectRoleID)
            {
                model.OrderGrid.DeleteButtonGridColumn = new DeleteButtonGridColumn {
                    QuestionText = "Вы точно хотите удалить заказ ", DataId = "Number"
                };
            }

            if (ProjectRoleSet.UserHasRole(token.User.ProjectRoleID, ProjectRoleSet.Admin, ProjectRoleSet.Manager))
            {
                model.OrderGrid.CreateButtonGrid = new CreateButtonGrid
                {
                    Name = "Создание заказа", FullScreen = true, NoDialogTitle = true
                };
            } //if

            model.OrderGrid.EditButtonGridColumn = new EditButtonGridColumn
            {
                FullScreen = true, NoDialogTitle = true
            };

            model.OrderGrid.ShowDetailsButtonColumn = new ShowDetailsButtonColumn
            {
                ToolTip = "Показать работы и запчасти", CallFunctionName = "showDetails"
            };
            model.OrderGrid.AutoLoad = true;

            model.OrderGrid.HasTableBorderedClass = true;
            model.OrderGrid.HasTableStripedClass  = false;

            model.WorkItemsGrid            = new DataGridDescriptor();
            model.WorkItemsGrid.Name       = WorkItemController.ControllerName;
            model.WorkItemsGrid.Controller = WorkItemController.ControllerName;
            model.WorkItemsGrid.SearchInputs.Add(new HiddenSearchInput {
                Id = "WorkItemRepairOrderID"
            });
            model.WorkItemsGrid.SearchInputs.Add(new TextSearchInput
            {
                Id = "WorkItemName", Value = string.Empty, Name = "Название"
            });

            model.WorkItemsGrid.Columns.Add(new TextGridColumn {
                Name = "Дата", Id = "WorkItemEventDate"
            });
            model.WorkItemsGrid.Columns.Add(new TextGridColumn {
                Name = "Описание", Id = "WorkItemTitle"
            });
            model.WorkItemsGrid.Columns.Add(new TextGridColumn {
                Name = "Инженер", Id = "WorkItemEngineerFullName"
            });
            model.WorkItemsGrid.Columns.Add(new TextGridColumn {
                Name = "Стоимость", Id = "WorkItemPrice"
            });

            model.WorkItemsGrid.DeleteButtonGridColumn = new DeleteButtonGridColumn
            {
                QuestionText = "Вы точно хотите удалить работу ",
                DataId       = "WorkItemTitle"
            };

            model.WorkItemsGrid.EditButtonGridColumn = new EditButtonGridColumn {
                Height = 400, Width = 500
            };
            model.WorkItemsGrid.CreateButtonGrid = new CreateButtonGrid
            {
                Name = "Создание выполненной работы", Height = 400, Width = 500
            };

            model.WorkItemsGrid.AutoLoad = false;

            model.WorkItemsGrid.HasTableBorderedClass = true;
            model.WorkItemsGrid.HasTableStripedClass  = true;

            model.DeviceItemsGrid            = new DataGridDescriptor();
            model.DeviceItemsGrid.Name       = DeviceItemController.ControllerName;
            model.DeviceItemsGrid.Controller = DeviceItemController.ControllerName;
            model.DeviceItemsGrid.SearchInputs.Add(new HiddenSearchInput {
                Id = "DeviceItemRepairOrderID"
            });
            model.DeviceItemsGrid.SearchInputs.Add(new TextSearchInput
            {
                Id = "DeviceItemName", Value = string.Empty, Name = "Название"
            });

            model.DeviceItemsGrid.Columns.Add(new TextGridColumn {
                Name = "Описание", Id = "DeviceItemTitle"
            });
            model.DeviceItemsGrid.Columns.Add(new TextGridColumn {
                Name = "Количество", Id = "DeviceItemCount"
            });
            model.DeviceItemsGrid.Columns.Add(new TextGridColumn {
                Name = "Себестоимость", Id = "DeviceItemCostPrice"
            });
            model.DeviceItemsGrid.Columns.Add(new TextGridColumn {
                Name = "Стоимость", Id = "DeviceItemPrice"
            });

            model.DeviceItemsGrid.DeleteButtonGridColumn = new DeleteButtonGridColumn
            {
                QuestionText = "Вы точно хотите удалить запчасть ",
                DataId       = "DeviceItemTitle"
            };

            model.DeviceItemsGrid.EditButtonGridColumn = new EditButtonGridColumn {
                Height = 450, Width = 550
            };
            model.DeviceItemsGrid.CreateButtonGrid = new CreateButtonGrid
            {
                Name = "Создание запчасти", Height = 450, Width = 550
            };

            model.DeviceItemsGrid.AutoLoad = false;

            model.DeviceItemsGrid.HasTableBorderedClass = true;
            model.DeviceItemsGrid.HasTableStripedClass  = true;

            model.Documents =
                RemontinkaServer.Instance.EntitiesFacade.GetCustomReportItems(token,
                                                                              DocumentKindSet.OrderReportDocument.DocumentKindID).Select(i => new RepairOrderDocumentModel
            {
                CustomReportID = i.CustomReportID,
                Title          = i.Title
            });

            model.DeviceTrademarkAutocompleteItems =
                RemontinkaServer.Instance.EntitiesFacade.GetAutocompleteItems(token,
                                                                              AutocompleteKindSet.DeviceTrademark.
                                                                              AutocompleteKindID).Select(
                    i => i.Title);

            model.DeviceOptionsAutocompleteItems =
                RemontinkaServer.Instance.EntitiesFacade.GetAutocompleteItems(token,
                                                                              AutocompleteKindSet.DeviceOptions.
                                                                              AutocompleteKindID).Select(
                    i => i.Title);
            model.DeviceAppearanceAutocompleteItems =
                RemontinkaServer.Instance.EntitiesFacade.GetAutocompleteItems(token,
                                                                              AutocompleteKindSet.DeviceAppearance.
                                                                              AutocompleteKindID).Select(
                    i => i.Title);
            return(model);
        }