public HttpResponseMessage UpdateOrder([FromBody] ModifyOrderRequest request)
        {
            _logInfo.Info("更新订单请求" + request.ToJson());
            var viewModel = new CreateOrderViewMode();

            if (!ModelState.IsValid)
            {
                viewModel.BusinessStatus = -10000;
                viewModel.StatusMessage  = "输入参数错误,请检查您输入的参数是否有空或者长度不符合要求等";
                return(viewModel.ResponseToJson());
            }

            var response = _orderService.UpdateOrder(request);

            _logInfo.Info("更新订单返回值" + response.ToJson());
            if (response.Status == HttpStatusCode.BadRequest || response.Status == HttpStatusCode.Forbidden)
            {
                viewModel.BusinessStatus = -10001;
                viewModel.StatusMessage  = "参数校验错误,请检查您的校验码";
                return(viewModel.ResponseToJson());
            }

            if (response.Count > 0)
            {
                viewModel.OrderId        = response.Count;
                viewModel.BusinessStatus = 1;
            }
            else
            {
                viewModel.BusinessStatus = -10002;
                viewModel.StatusMessage  = "更新订单失败";
            }

            return(viewModel.ResponseToJson());
        }
        public ModifyOrderResponse ModifyOrder(ModifyOrderRequest request)
        {
            ModifyOrderResponse response = new ModifyOrderResponse();

            Order order = _orderRepository
                          .FindBy(request.OrderID);

            order.Id             = request.OrderID;
            order.OrderDate      = request.OrderDate;
            order.RequiredDate   = request.RequiredDate;
            order.ShippedDate    = request.ShippedDate;
            order.Freight        = request.Freight;
            order.ShipName       = request.ShipName;
            order.ShipAddress    = request.ShipAddress;
            order.ShipCity       = request.ShipCity;
            order.ShipRegion     = request.ShipRegion;
            order.ShipPostalCode = request.ShipPostalCode;
            order.ShipCountry    = request.ShipCountry;
            order.Products       = request.Products.ConvertToProducts();
            order.Employee       = request.Employee.ConvertToEmployee();
            order.Customer       = request.Customer.ConvertToCustomer();
            order.Shipper        = request.Shipper.ConvertToShipper();


            if (order.GetBrokenRules().Count() > 0)
            {
                response.Errors = order.GetBrokenRules().ToList();
            }
            else
            {
                try {
                    _orderRepository.Save(order);
                    _uow.Commit();
                    response.Errors = new List <BusinessRule>();
                } catch (Exception ex)
                {
                    response.Errors = new List <BusinessRule>();
                    response.Errors.Add(new BusinessRule("DAL", "DAL_ERROR: " + ex.Message));
                }
            }


            return(response);
        }
Exemple #3
0
        public ModifyOrderResponse ModifyOrder(ModifyOrderRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.Requisition, "Requisition");
            Platform.CheckMemberIsSet(request.Requisition.OrderRef, "OrderRef");

            var order = this.PersistenceContext.Load <Order>(request.Requisition.OrderRef);

            var assembler = new OrderEntryAssembler();

            assembler.UpdateOrderFromRequisition(order, request.Requisition, this.CurrentUserStaff, this.PersistenceContext);

            UpdateProceduresHelper(order, request.Requisition.Procedures, request);
            ValidateVisitsExist(order);

            this.PersistenceContext.SynchState();

            var orderAssembler = new OrderAssembler();

            return(new ModifyOrderResponse(orderAssembler.CreateOrderSummary(order, this.PersistenceContext)));
        }
Exemple #4
0
        public JsonResult Update(OrderDetailView vm)
        {
            GetOrderRequest request = new GetOrderRequest();

            request.OrderID = vm.OrderID;

            ModifyOrderRequest updateRequest = _orderService.GetOrder(request).Order.ConvertToModifyOrderRequest();

            updateRequest.OrderID = vm.OrderID;
            GetCustomerRequest customerRequest = new GetCustomerRequest();

            customerRequest.CustomerID = vm.CustomerCustomerID;
            updateRequest.Customer     = _customerService.GetCustomer(customerRequest).Customer;
            GetEmployeeRequest employeeRequest = new GetEmployeeRequest();

            employeeRequest.EmployeeID = vm.EmployeeEmployeeID;
            updateRequest.Employee     = _employeeService.GetEmployee(employeeRequest).Employee;
            updateRequest.OrderDate    = vm.OrderDate;
            updateRequest.RequiredDate = vm.RequiredDate;
            updateRequest.ShippedDate  = vm.ShippedDate;
            GetShipperRequest shipperRequest = new GetShipperRequest();

            shipperRequest.ShipperID     = vm.ShipperShipperID;
            updateRequest.Shipper        = _shipperService.GetShipper(shipperRequest).Shipper;
            updateRequest.Freight        = vm.Freight;
            updateRequest.ShipName       = vm.ShipName;
            updateRequest.ShipAddress    = vm.ShipAddress;
            updateRequest.ShipCity       = vm.ShipCity;
            updateRequest.ShipRegion     = vm.ShipRegion;
            updateRequest.ShipPostalCode = vm.ShipPostalCode;
            updateRequest.ShipCountry    = vm.ShipCountry;

            ModifyOrderResponse response = _orderService.ModifyOrder(updateRequest);

            return(Json(response));
        }
Exemple #5
0
        private void UpdateProceduresHelper(Order order, IEnumerable <ProcedureRequisition> procedureReqs, ModifyOrderRequest request)
        {
            // do not update the procedures if the order is completed
            if (order.IsTerminated)
            {
                return;
            }

            var assembler = new OrderEntryAssembler();

            // if any procedure is in downtime recovery mode, assume the entire order is a "downtime order"
            var isDowntime = CollectionUtils.Contains(order.Procedures, p => p.DowntimeRecoveryMode);

            // separate the list into additions and updates
            var existingReqs = new List <ProcedureRequisition>();
            var addedReqs    = new List <ProcedureRequisition>();

            foreach (var req in procedureReqs)
            {
                if (CollectionUtils.Contains(order.Procedures, x => req.ProcedureNumber == x.Number))
                {
                    existingReqs.Add(req);
                }
                else
                {
                    addedReqs.Add(req);
                }
            }

            // process the additions first, so that we don't accidentally cancel an order (if all its procedures are cancelled momentarily)
            var procedureNumberBroker = PersistenceContext.GetBroker <IProcedureNumberBroker>();
            var dicomUidBroker        = PersistenceContext.GetBroker <IDicomUidBroker>();

            foreach (var req in addedReqs)
            {
                var requestedType = this.PersistenceContext.Load <ProcedureType>(req.ProcedureType.ProcedureTypeRef);

                // create a new procedure for this requisition
                var procedure = new Procedure(requestedType, procedureNumberBroker.GetNext(), dicomUidBroker.GetNewUid())
                {
                    DowntimeRecoveryMode = isDowntime
                };
                order.AddProcedure(procedure);

                // note: need to lock the new procedure now, prior to creating the procedure steps
                // otherwise may get exceptions saying the Procedure is a transient object
                this.PersistenceContext.Lock(procedure, DirtyState.New);

                // create the procedure steps
                procedure.CreateProcedureSteps();

                // apply the requisition information to the actual procedure
                assembler.UpdateProcedureFromRequisition(procedure, req, this.CurrentUserStaff, this.PersistenceContext);

                LogicalHL7Event.ProcedureCreated.EnqueueEvents(procedure);
            }

            // process updates
            foreach (var req in existingReqs)
            {
                var requestedType = this.PersistenceContext.Load <ProcedureType>(req.ProcedureType.ProcedureTypeRef);
                var procedure     = CollectionUtils.SelectFirst(order.Procedures, x => req.ProcedureNumber == x.Number);

                // validate that the type has not changed
                if (!procedure.Type.Equals(requestedType))
                {
                    throw new RequestValidationException("Order modification must not modify the type of a requested procedure.");
                }

                // If the procedure is already terminated, just move on to the next one since procedures cannot be "un-terminated".
                if (procedure.IsTerminated)
                {
                    continue;
                }

                // apply the requisition information to the actual procedure
                assembler.UpdateProcedureFromRequisition(procedure, req, this.CurrentUserStaff, this.PersistenceContext);

                (req.Cancelled ? LogicalHL7Event.ProcedureCancelled : LogicalHL7Event.ProcedureModified).EnqueueEvents(procedure);
            }
        }