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); }
/// <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)); }