Ejemplo n.º 1
0
        public void SaveRepairOrderResponseTest()
        {
            var message = new SaveRepairOrderResponse();

            Assert.AreEqual(message.Kind, MessageKind.SaveRepairOrderResponse);

            message.Success = true;

            var serializer = new ProtocolSerializer(ProtocolVersion.Version10);
            var data       = serializer.Serialize(message);

            Assert.IsNotNull(data);
            Assert.AreEqual(serializer.GetMessageInfoOrNull(data).Kind, MessageKind.SaveRepairOrderResponse);

            var savedMessage = serializer.DeserializeSaveRepairOrderResponse(data);

            Assert.IsNotNull(savedMessage);

            Assert.AreEqual(message.Kind, savedMessage.Kind);
            Assert.AreEqual(message.Success, savedMessage.Success);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Обработчик запроса на сохранение заказа.
        /// </summary>
        /// <param name="serializer">Сериализатор протокола.</param>
        /// <param name="postData">Данные запроса.</param>
        /// <param name="hostAddress">Адрес клиента.</param>
        /// <returns>Результат.</returns>
        private string ProcessSaveRepairOrderRequest(ProtocolSerializer serializer, string postData, string hostAddress)
        {
            var request = serializer.DeserializeSaveRepairOrderRequest(postData);

            _logger.InfoFormat(
                "Получен запрос сохранение заказа от пользователя {0} с клиента {1}",
                request.UserID, hostAddress);

            var userDomainID = CheckSignedMessage(request);

            var response = new SaveRepairOrderResponse();

            Guid?orderId = null;

            if (request.RepairOrder != null)
            {
                orderId = request.RepairOrder.RepairOrderID;
            }  //if

            var savedOrder = RemontinkaServer.Instance.DataStore.GetRepairOrderLight(orderId, userDomainID);

            var user = RemontinkaServer.Instance.DataStore.GetUser(request.UserID, userDomainID);

            if (savedOrder != null)
            {
                if (!RemontinkaServer.Instance.EntitiesFacade.UserHasAccessToRepairOrder(user.UserID, savedOrder,
                                                                                         user.ProjectRoleID))
                {
                    _logger.InfoFormat("Пользователь {0} не имеет доступа к заказу {1} отменяем синхронизацию", user.LoginName, savedOrder.RepairOrderID);
                    response.Success = false;
                    orderId          = null;
                }
            }  //if

            if (orderId != null)
            {
                Guid?managerID  = null;
                Guid?engineerID = null;

                if (request.RepairOrder.ManagerID != null)
                {
                    managerID = request.RepairOrder.ManagerID;
                    if (RemontinkaServer.Instance.DataStore.GetUser(managerID, userDomainID) == null)
                    {
                        managerID = user.UserID;
                    }
                }

                if (request.RepairOrder.EngineerID != null)
                {
                    engineerID = request.RepairOrder.EngineerID;
                    if (RemontinkaServer.Instance.DataStore.GetUser(engineerID, userDomainID) == null)
                    {
                        engineerID = user.UserID;
                    }
                }

                RemontinkaServer.Instance.DataStore.SaveRepairOrder(new RepairOrder
                {
                    BranchID         = request.RepairOrder.BranchID,
                    CallEventDate    = request.RepairOrder.CallEventDate,
                    ClientAddress    = request.RepairOrder.ClientAddress,
                    ClientEmail      = request.RepairOrder.ClientEmail,
                    EventDate        = request.RepairOrder.EventDate,
                    Number           = request.RepairOrder.Number,
                    RepairOrderID    = request.RepairOrder.RepairOrderID,
                    OrderKindID      = request.RepairOrder.OrderKindID,
                    OrderStatusID    = request.RepairOrder.OrderStatusID,
                    DeviceSN         = request.RepairOrder.DeviceSN,
                    DeviceTitle      = request.RepairOrder.DeviceTitle,
                    ClientFullName   = request.RepairOrder.ClientFullName,
                    ClientPhone      = request.RepairOrder.ClientPhone,
                    DateOfBeReady    = request.RepairOrder.DateOfBeReady,
                    Defect           = request.RepairOrder.Defect,
                    DeviceAppearance = request.RepairOrder.DeviceAppearance,
                    DeviceModel      = request.RepairOrder.DeviceModel,
                    DeviceTrademark  = request.RepairOrder.DeviceTrademark,
                    EngineerID       = engineerID,
                    GuidePrice       = request.RepairOrder.GuidePrice,
                    IsUrgent         = request.RepairOrder.IsUrgent,
                    IssueDate        = request.RepairOrder.IssueDate,
                    IssuerID         = request.RepairOrder.IssuerID,
                    ManagerID        = managerID,
                    Notes            = request.RepairOrder.Notes,
                    Options          = request.RepairOrder.Options,
                    PrePayment       = request.RepairOrder.PrePayment,
                    Recommendation   = request.RepairOrder.Recommendation,
                    WarrantyTo       = request.RepairOrder.WarrantyTo,
                    UserDomainID     = userDomainID
                });

                foreach (var workItemDTO in request.RepairOrder.WorkItems)
                {
                    //TODO сохраняем заметки, т.к. на клиенте пока не реализованы.
                    var storedItem = RemontinkaServer.Instance.DataStore.GetWorkItem(workItemDTO.WorkItemID);
                    var notes      = string.Empty;

                    if (storedItem != null && (!string.IsNullOrWhiteSpace(storedItem.Notes)))
                    {
                        notes = storedItem.Notes;
                    }

                    RemontinkaServer.Instance.DataStore.SaveWorkItem(new WorkItem
                    {
                        EventDate     = workItemDTO.EventDate,
                        Price         = workItemDTO.Price,
                        RepairOrderID = request.RepairOrder.RepairOrderID,
                        Title         = workItemDTO.Title,
                        UserID        = workItemDTO.UserID,
                        WorkItemID    = workItemDTO.WorkItemID,
                        Notes         = notes
                    });
                }  //foreach

                foreach (var deviceItemDTO in request.RepairOrder.DeviceItems)
                {
                    RemontinkaServer.Instance.DataStore.SaveDeviceItem(new DeviceItem
                    {
                        EventDate       = deviceItemDTO.EventDate,
                        Price           = deviceItemDTO.Price,
                        RepairOrderID   = request.RepairOrder.RepairOrderID,
                        Title           = deviceItemDTO.Title,
                        UserID          = deviceItemDTO.UserID,
                        CostPrice       = deviceItemDTO.CostPrice,
                        Count           = deviceItemDTO.Count,
                        DeviceItemID    = deviceItemDTO.DeviceItemID,
                        WarehouseItemID = deviceItemDTO.WarehouseItemID
                    });
                }  //foreach

                foreach (var orderTimelineDTO in request.RepairOrder.OrderTimelines)
                {
                    if (!RemontinkaServer.Instance.DataStore.OrderTimeLineExists(orderTimelineDTO.OrderTimelineID))
                    {
                        RemontinkaServer.Instance.DataStore.SaveOrderTimeline(new OrderTimeline
                        {
                            EventDateTime   = orderTimelineDTO.EventDateTime,
                            OrderTimelineID = orderTimelineDTO.OrderTimelineID,
                            RepairOrderID   = request.RepairOrder.RepairOrderID,
                            TimelineKindID  = orderTimelineDTO.TimelineKindID,
                            Title           = orderTimelineDTO.Title
                        });
                    } //if
                }     //foreach

                response.Success = true;
            }  //if
            else
            {
                _logger.InfoFormat("Заказ для синхронизации не найден {0}", request.UserID);
                response.Success = false;
            }  //else

            return(serializer.Serialize(response));
        }