private void UpdateCustomerOrder(long eventId, long customerId, IEnumerable <long> testIds, long orgUserId) { var order = _orderRepository.GetOrder(customerId, eventId); if (order != null && !order.OrderDetails.IsEmpty()) { var orderDetail = _orderController.GetActiveOrderDetail(order); var eventTestOrderDetails = order.OrderDetails.Where(od => od.OrderItem.OrderItemType == OrderItemType.EventTestItem).Select(od => od).ToArray(); var packageId = 0L; if (orderDetail.OrderItem.OrderItemType == OrderItemType.EventPackageItem) { var eventPackage = _eventPackageRepository.GetById(orderDetail.OrderItem.ItemId); packageId = eventPackage.PackageId; } var orderables = new List <IOrderable>(); var selectedTestIds = testIds.ToList(); if (packageId > 0) { IEventPackageRepository eventPackageRepository = new EventPackageRepository(); var eventPackage = eventPackageRepository.GetByEventAndPackageIds(eventId, packageId); orderables.Add(eventPackage); RemoveTestsAlreadyInPackage(eventId, packageId, selectedTestIds); } if (!eventTestOrderDetails.IsNullOrEmpty()) { var eventTestIds = eventTestOrderDetails.Select(od => od.OrderItem.ItemId).ToArray(); var eventTestInOrder = _eventTestRepository.GetbyIds(eventTestIds); var testAlreadyInOrders = eventTestInOrder.Select(et => et.TestId).ToArray(); selectedTestIds = selectedTestIds.Where(x => !testAlreadyInOrders.Contains(x)).ToList(); if (testAlreadyInOrders.Any(x => AbiGroup.Contains(x))) { selectedTestIds.RemoveAll(AbiGroup.Contains); } if (testAlreadyInOrders.Any(x => DpnMonofilamentGroup.Contains(x))) { selectedTestIds.RemoveAll(DpnMonofilamentGroup.Contains); } var activeEventTestOrderDetails = order.OrderDetails.Where(od => od.OrderItem.OrderItemType == OrderItemType.EventTestItem && od.IsCompleted).Select(od => od).ToArray(); if (!activeEventTestOrderDetails.IsNullOrEmpty()) { var activEventTestIds = activeEventTestOrderDetails.Select(od => od.OrderItem.ItemId).ToArray(); var activeTestAlreadyInOrders = eventTestInOrder.Where(x => activEventTestIds.Contains(x.Id)).Select(et => et.TestId).ToArray(); selectedTestIds.AddRange(activeTestAlreadyInOrders); } } if (!selectedTestIds.IsNullOrEmpty()) { var eventTests = _eventTestRepository.GetByEventAndTestIds(eventId, selectedTestIds); if (AddMissingTestToEvent(eventId, selectedTestIds, eventTests)) { eventTests = _eventTestRepository.GetByEventAndTestIds(eventId, selectedTestIds); } if (packageId > 0) { foreach (var eventTest in eventTests) { eventTest.Price = eventTest.WithPackagePrice; } } orderables.AddRange(eventTests); bool indentedLineItemsAdded = false; foreach (var orderable in orderables) { if (!indentedLineItemsAdded && (orderable.OrderItemType == OrderItemType.EventPackageItem || orderable.OrderItemType == OrderItemType.EventTestItem)) { _orderController.AddItem(orderable, 1, customerId, orgUserId, null, null, null, OrderStatusState.FinalSuccess, (long)OrderSource.Medicare); indentedLineItemsAdded = true; } else { _orderController.AddItem(orderable, 1, customerId, orgUserId, OrderStatusState.FinalSuccess, (long)OrderSource.Medicare); } } _orderController.PlaceOrder(order); } } }
public bool ChangePackage(long eventId, long customerId, IEnumerable <long> testIds) { var patientOrder = GetOrder(customerId, eventId); if (patientOrder != null && !patientOrder.OrderDetails.IsEmpty()) { var creatorOrganizationRoleUser = GetCreatorOrganizationRoleUser(); var forOrganizationRoleUser = GetForOrganizationRoleUser(customerId); var orderDetail = _orderController.GetActiveOrderDetail(patientOrder); var eventTestOrderDetails = patientOrder.OrderDetails.Where(od => od.OrderItem.OrderItemType == OrderItemType.EventTestItem && od.IsCompleted && (od.SourceId.HasValue && od.SourceId.Value != (long)OrderSource.Medicare)).Select(od => od).ToArray(); var packageId = 0L; if (orderDetail.OrderItem.OrderItemType == OrderItemType.EventPackageItem) { var eventPackage = _eventPackageRepository.GetById(orderDetail.OrderItem.ItemId); packageId = eventPackage.PackageId; } var orderables = new List <IOrderable>(); var selectedTestIds = testIds.ToList(); if (packageId > 0) { IEventPackageRepository eventPackageRepository = new EventPackageRepository(); var eventPackage = eventPackageRepository.GetByEventAndPackageIds(eventId, packageId); orderables.Add(eventPackage); RemoveTestsAlreadyInPackage(eventId, packageId, selectedTestIds); } IEventTestRepository eventTestRepository = new EventTestRepository(); if (!eventTestOrderDetails.IsNullOrEmpty()) { var eventTestIds = eventTestOrderDetails.Select(od => od.OrderItem.ItemId).ToArray(); var nonMedicareEventTests = eventTestRepository.GetbyIds(eventTestIds); orderables.AddRange(nonMedicareEventTests); var nonMedicareEventTestIds = nonMedicareEventTests.Select(et => et.TestId).ToArray(); selectedTestIds = selectedTestIds.Where(x => !nonMedicareEventTestIds.Contains(x)).ToList(); } if (!selectedTestIds.IsNullOrEmpty()) { var eventTests = eventTestRepository.GetByEventAndTestIds(eventId, selectedTestIds); if (packageId > 0) { foreach (var eventTest in eventTests) { eventTest.Price = eventTest.WithPackagePrice; } } orderables.AddRange(eventTests); } var eventCustomer = UpdateEventCustomer(orderDetail, false); if (eventCustomer == null) { return(false); } bool indentedLineItemsAdded = false; foreach (var orderable in orderables) { if (!indentedLineItemsAdded && (orderable.OrderItemType == OrderItemType.EventPackageItem || orderable.OrderItemType == OrderItemType.EventTestItem)) { _orderController.AddItem(orderable, 1, forOrganizationRoleUser.Id, creatorOrganizationRoleUser.Id, null, null, null, OrderStatusState.FinalSuccess, (long)OrderSource.Medicare); indentedLineItemsAdded = true; } else { _orderController.AddItem(orderable, 1, forOrganizationRoleUser.Id, creatorOrganizationRoleUser.Id, OrderStatusState.FinalSuccess, (long)OrderSource.Medicare); } } _orderController.PlaceOrder(patientOrder); } return(true); }