Esempio n. 1
0
        private void SaveProductShipping(OrderDetail productDetail, OrderDetail activeOrderDetail, bool isExclusivelyRequested)
        {
            if (productDetail == null || activeOrderDetail == null)
            {
                return;
            }
            var shippingOption = _shippingOptionRepository.GetShippingOptionByProductId(productDetail.OrderItem.ItemId);

            if (shippingOption != null)
            {
                var resultShippingDetails = _shippingDetailRepository.GetShippingDetailsForCancellation(activeOrderDetail.Id);
                var cdShippingDetails     = _shippingDetailRepository.GetProductShippingDetailsForCancellation(activeOrderDetail.Id);

                if (!resultShippingDetails.IsNullOrEmpty() && (cdShippingDetails == null || (cdShippingDetails.Count() < resultShippingDetails.Count())))
                {
                    var address = _addressRepository.GetAddress(resultShippingDetails.First().ShippingAddress.Id);
                    address.Id = 0;
                    var productShippingDetail = new ShippingDetail
                    {
                        ShippingAddress = address,
                        Status          = ShipmentStatus.Processing,
                        ActualPrice     = shippingOption.Price,
                        ShippingOption  = new ShippingOption {
                            Id = shippingOption.Id
                        },
                        IsExclusivelyRequested = isExclusivelyRequested,
                        DataRecorderMetaData   = new DataRecorderMetaData
                        {
                            DataRecorderCreator = _organizationRoleUserRepository.GetOrganizationRoleUser(_sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId),
                            DateCreated         = DateTime.Now,
                            DateModified        = DateTime.Now
                        }
                    };
                    IShippingController shippingController = new ShippingController();
                    productShippingDetail = shippingController.OrderShipping(productShippingDetail);

                    IRepository <ShippingDetailOrderDetail> shippingDetailOrderDetailRepository = new ShippingDetailOrderDetailRepository();

                    var shippingDetailOrderDetail = new ShippingDetailOrderDetail
                    {
                        Amount           = productShippingDetail.ActualPrice,
                        IsActive         = true,
                        OrderDetailId    = activeOrderDetail.Id,
                        ShippingDetailId = productShippingDetail.Id
                    };

                    shippingDetailOrderDetailRepository.Save(shippingDetailOrderDetail);
                }
            }
        }
Esempio n. 2
0
        public void PollforResultNotification()
        {
            _logger.Info("Starting the Polling Agent for Result Notification.");

            var eventCustomerResults = _eventCustomerResultRepository.GetEventCustomerResultsForResultReadyNotification((int)TestResultStateNumber.PostAudit, (int)NewTestResultStateNumber.PdfGenerated, false);

            if (eventCustomerResults != null && eventCustomerResults.Any())
            {
                _logger.Info("Get the event customer result list.");

                eventCustomerResults = eventCustomerResults.Where(ec => ec.DataRecorderMetaData != null && ec.DataRecorderMetaData.DateModified != null && ec.DataRecorderMetaData.DateModified.Value < DateTime.Now.AddMinutes(-1 * _buffer)).ToArray();
                bool sendNotification = Convert.ToBoolean(_configurationSettingRepository.GetConfigurationValue(ConfigurationSettingName.EnableResultDeliveryNotification));

                foreach (var eventCustomerResult in eventCustomerResults)
                {
                    try
                    {
                        //Check, if is unpaid. if yes, continue
                        var isPaperCopyPurchased = false;
                        var order = _orderRepository.GetOrderByEventCustomerId(eventCustomerResult.Id);
                        if (order != null)
                        {
                            var orderDetail = order.OrderDetails.SingleOrDefault(od => (od.DetailType == OrderItemType.EventPackageItem || od.DetailType == OrderItemType.EventTestItem) &&
                                                                                 od.EventCustomerOrderDetail != null && od.EventCustomerOrderDetail.IsActive && od.IsCompleted);

                            if (orderDetail != null)
                            {
                                var resultShippingDetails = _shippingDetailRepository.GetShippingDetailsForCancellation(orderDetail.Id);
                                isPaperCopyPurchased = resultShippingDetails != null && resultShippingDetails.Count() > 0 ? true : false;
                                //resultShippingDetails = resultShippingDetails.Where(sd => sd.Status == ShipmentStatus.Processing).Select(sd => sd).ToArray();
                            }
                            if (order.DiscountedTotal > order.TotalAmountPaid)
                            {
                                _logger.Info("\n Customer [Id: " + eventCustomerResult.CustomerId + "] has not paid for event [Id:" + eventCustomerResult.EventId + "]");
                                continue;
                            }
                        }
                        _logger.Info(string.Format("\n Customer Id [{0}] & Event Id [{1}] being taken to delivery state. ----------------------------", eventCustomerResult.CustomerId, eventCustomerResult.EventId));

                        var eventData = _eventRepository.GetById(eventCustomerResult.EventId);

                        var isNewResultFlow = eventData.EventDate >= _settings.ResultFlowChangeDate;

                        //if (isNewResultFlow)
                        //{
                        //    if (!eventCustomerResult.AcesApprovedOn.HasValue || eventCustomerResult.AcesApprovedOn.Value > DateTime.Now.Date)
                        //        continue;
                        //}
                        var customerEventScreeningTestIds = _testResultRepository.GetCustomerEventScreeningTestIds(eventCustomerResult.EventId, eventCustomerResult.CustomerId);
                        var customerTests = _eventCustomerResultRepository.GetCustomerTests(eventCustomerResult.Id);

                        using (var scope = new TransactionScope())
                        {
                            if (isNewResultFlow)
                            {
                                _testResultRepository.SetResultstoState((int)NewTestResultStateNumber.ResultDelivered, false, eventCustomerResult.DataRecorderMetaData.DataRecorderModifier.Id, customerEventScreeningTestIds);
                            }
                            else
                            {
                                _testResultRepository.UpdateStateforCustomerNotification(eventCustomerResult.Id);
                            }

                            _eventCustomerResultRepository.SetEventCustomerResultState(eventCustomerResult.Id, customerTests);

                            var account = _corporateAccountRepository.GetbyEventId(eventCustomerResult.EventId);
                            if (account == null || (account.SendResultReadyMail && account.ResultReadyMailTemplateId > 0))
                            {
                                if (sendNotification && eventData.NotifyResultReady)
                                {
                                    string emailTemplateAlias = EmailTemplateAlias.ResultsReady;

                                    if (account != null && account.ResultReadyMailTemplateId > 0)
                                    {
                                        var emailTemplate = ((IUniqueItemRepository <EmailTemplate>)_emailTemplateRepository).GetById(account.ResultReadyMailTemplateId);
                                        emailTemplateAlias = emailTemplate.Alias;
                                    }

                                    var customer = _customerRepository.GetCustomer(eventCustomerResult.CustomerId);

                                    _logger.Info("\n Sending Notification at " + (customer.Email != null ? customer.Email.ToString() : ""));

                                    if (emailTemplateAlias == EmailTemplateAlias.ResultsReady)
                                    {
                                        var resultReadyViewModel = _emailNotificationModelsFactory.GetResultReadyModel(customer.Name.FullName, customer.UserLogin.UserName, isPaperCopyPurchased, eventCustomerResult.EventId);
                                        _notifier.NotifySubscribersViaEmail(NotificationTypeAlias.ResultsReady, emailTemplateAlias, resultReadyViewModel, customer.Id, customer.CustomerId, "Result Notification");
                                    }
                                    else
                                    {
                                        var primaryCarePhysician = _primaryCarePhysicianRepository.Get(customer.CustomerId);

                                        if (primaryCarePhysician == null)
                                        {
                                            _logger.Error(string.Format("No primary Care Physician found for Customer Id: {0} \n", customer.CustomerId));
                                            continue;
                                        }

                                        var resultReadyViewModel = _emailNotificationModelsFactory.GetPpCustomerResultNotificationModel(customer, primaryCarePhysician);
                                        _notifier.NotifySubscribersViaEmail(NotificationTypeAlias.ResultsReady, emailTemplateAlias, resultReadyViewModel, customer.Id, customer.CustomerId, "Result Notification");
                                    }

                                    // Commented when implemented one way password hashing
                                    //if (customer.UserLogin != null && !customer.UserLogin.UserVerified && (account == null || account.SendWelcomeEmail))
                                    //{
                                    //    var passwordNotificationModel = _emailNotificationModelsFactory.GetWelcomeWithPasswordNotificationModel(customer.Name.ToString(), customer.UserLogin.Password);
                                    //    _notifier.NotifySubscribersViaEmail(NotificationTypeAlias.CustomerWelcomeEmailWithPassword, EmailTemplateAlias.CustomerWelcomeEmailWithPassword, passwordNotificationModel, customer.Id, customer.CustomerId, "Result Notification");
                                    //}
                                }
                            }
                            scope.Complete();
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Info(
                            String.Format("\n System failure: For EventId:{0} and CustomerId:{1} \n Message{2}", eventCustomerResult.EventId, eventCustomerResult.CustomerId, ex.Message));
                    }
                }
            }
            else
            {
                _logger.Info("No event customer result found.");
            }
        }
        protected void SaveButton_Click(object sender, EventArgs e)
        {
            if (BillingAddressSameRadio.Checked)
            {
                ListItem itemAlreadySelectedState = StateDropDown.Items.FindByValue(StateIdHidden.Value);
                if (itemAlreadySelectedState != null)
                {
                    itemAlreadySelectedState.Selected = true;
                }
                CityText.Text     = CityHidden.Value;
                ZipText.Text      = ZipHidden.Value;
                Address1Text.Text = Address1Hidden.Value;
            }

            bool isStatusUpdated = false;

            TotalAmountPayable = 0.0m;
            var selectedRows = GetSelectedRows();

            try
            {
                using (var transaction = new TransactionScope())
                {
                    if (PaymentMode.SelectedValue != PaymentType.CreditCard.PersistenceLayerId.ToString() ||
                        AddressValidation())
                    {
                        foreach (var row in selectedRows)
                        {
                            if (row == null)
                            {
                                continue;
                            }

                            var orderDetailIdLiteral    = row.FindControl("OrderDetailIdLiteral") as Literal;
                            var shippingDetailIdLiteral = row.FindControl("ShippingDetailIdLiteral") as Literal;
                            var actualPrice             = row.FindControl("PriceLabel") as Label;

                            if (orderDetailIdLiteral != null && shippingDetailIdLiteral != null)
                            {
                                var orderDetailId    = Convert.ToInt64(orderDetailIdLiteral.Text);
                                var shippingDetailId = Convert.ToInt64(shippingDetailIdLiteral.Text);

                                isStatusUpdated = _shippingDetailOrderDetailRepository.UpdateStatus(shippingDetailId, orderDetailId, false);

                                var shippingDetail = _shippingDetailRepository.GetById(shippingDetailId);
                                shippingDetail.Status = ShipmentStatus.Cancelled;
                                _shippingDetailRepository.Save(shippingDetail);

                                var resultShippingDetails  = _shippingDetailRepository.GetShippingDetailsForCancellation(orderDetailId).ToList();
                                var productShippingDetails = _shippingDetailRepository.GetProductShippingDetailsForCancellation(orderDetailId).ToList();
                                if (productShippingDetails.Count > resultShippingDetails.Count)
                                {
                                    var productShippingDetail = productShippingDetails.FirstOrDefault();
                                    if (productShippingDetail != null)
                                    {
                                        _shippingDetailOrderDetailRepository.UpdateStatus(productShippingDetail.Id, orderDetailId, false);
                                        productShippingDetail.Status = ShipmentStatus.Cancelled;
                                        _shippingDetailRepository.Save(productShippingDetail);
                                        CheckEventCustomerResultStateAndDeleteCdGenTrackRecord();
                                    }
                                }

                                if (actualPrice != null && !string.IsNullOrEmpty(actualPrice.Text))
                                {
                                    TotalAmountPayable += Convert.ToDecimal(actualPrice.Text);
                                }
                            }
                        }

                        if (AmountPaid < (DiscountedTotal - TotalAmountPayable))
                        {
                            TotalAmountPayable = 0;
                        }
                        else
                        {
                            TotalAmountPayable = AmountPaid - (DiscountedTotal - TotalAmountPayable);
                        }

                        var isRefundQueueEnabled = IoC.Resolve <ISettings>().IsRefundQueueEnabled;

                        if (PaymentMode.SelectedValue == PaymentType.CreditCard.PersistenceLayerId.ToString() &&
                            BillingAddressDifferentRadio.Checked && !isRefundQueueEnabled)
                        {
                            var creatorOrganizationRoleUser = GetCreatorOrganizationRoleUser();
                            UpdateCustomerBillingAddress(creatorOrganizationRoleUser.Id);
                        }

                        if (isStatusUpdated)
                        {
                            if (TotalAmountPayable > 0)
                            {
                                if (isRefundQueueEnabled)
                                {
                                    var refundRequest          = PrepareRefundRequestObject();
                                    var refundRequestValidator = IoC.Resolve <RefundRequestEditModelValidator>();
                                    var result = refundRequestValidator.Validate(refundRequest);
                                    if (result.IsValid)
                                    {
                                        IoC.Resolve <IRefundRequestService>().SaveRequest(refundRequest);
                                    }
                                    else
                                    {
                                        var propertyNames = result.Errors.Select(er => er.PropertyName).Distinct();
                                        var htmlString    = propertyNames.Aggregate("", (current, property) => current + (result.Errors.Where(er => er.PropertyName == property).FirstOrDefault().ErrorMessage + "&nbsp;&nbsp;"));
                                        MessageBox.ShowErrorMessage(htmlString);
                                        return;
                                    }
                                }
                                else
                                {
                                    var creatorOrganizationRoleUser = GetCreatorOrganizationRoleUser();
                                    var paymentInstrument           = RefundPayment(creatorOrganizationRoleUser,
                                                                                    OrderId + "_" + CustomerId);
                                    if (paymentInstrument != null &&
                                        ApplyPaymentToOrder(creatorOrganizationRoleUser, CurrentOrder, paymentInstrument))
                                    {
                                        transaction.Complete();
                                        Response.RedirectUser(ReturnUrl);
                                    }
                                    else
                                    {
                                        SetAndDisplayErrorMessage("Oops some error occured in the system please try again later.");
                                    }
                                }
                            }
                            transaction.Complete();
                            if (UrlValidator.IsUrlLocalToHost(Request, ReturnUrl))
                            {
                                Response.RedirectUser(ReturnUrl);
                            }
                        }
                        else
                        {
                            SetAndDisplayErrorMessage("Oops some error occured in the system please try again later.");
                        }
                    }
                }
            }
            catch (InvalidOperationException)
            {
            }
            catch { SetAndDisplayErrorMessage("Oops some error occured in the system please try again later."); }
        }