Ejemplo n.º 1
0
        public void UndoCancelShippingRequest(RefundRequest refundRequest)
        {
            var order             = _orderRepository.GetOrder(refundRequest.OrderId);
            var activeOrderDetail = _orderController.GetActiveOrderDetail(order);

            var cancelledShippingDetails = _shippingDetailRepository.GetAllCancelledShippingForOrder(order.Id).OrderByDescending(sd => sd.Id).ToArray();
            var shippingDetail           = cancelledShippingDetails.FirstOrDefault(cd => cd.ActualPrice == refundRequest.RequestedRefundAmount);

            if (shippingDetail == null)
            {
                throw new Exception("No cancelled shipping item found in the order for requested amount.");
            }

            var eventCustomer          = _eventCustomerRepository.GetById(activeOrderDetail.EventCustomerOrderDetail.EventCustomerId);
            var isExclusivelyRequested = _shippingDetailService.CheckShippingIsExclusivelyRequested(eventCustomer.EventId, eventCustomer.CustomerId);

            var address = _addressRepository.GetAddress(shippingDetail.ShippingAddress.Id);

            address.Id        = 0;
            shippingDetail.Id = 0;
            shippingDetail.ShippingAddress        = address;
            shippingDetail.Status                 = ShipmentStatus.Processing;
            shippingDetail.IsExclusivelyRequested = isExclusivelyRequested;
            shippingDetail.DataRecorderMetaData   = new DataRecorderMetaData
            {
                DataRecorderCreator = _organizationRoleUserRepository.GetOrganizationRoleUser(_sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId),
                DateCreated         = DateTime.Now,
                DateModified        = DateTime.Now
            };

            IShippingController shippingController = new ShippingController();

            shippingDetail = shippingController.OrderShipping(shippingDetail);

            IRepository <ShippingDetailOrderDetail> shippingDetailOrderDetailRepository = new ShippingDetailOrderDetailRepository();

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

            shippingDetailOrderDetailRepository.Save(shippingDetailOrderDetail);

            var productDetail = order.OrderDetails.Where(od => od.DetailType == OrderItemType.ProductItem && od.IsCompleted).Select(od => od).OrderByDescending(od => od.Id).FirstOrDefault();

            SaveProductShipping(productDetail, activeOrderDetail, isExclusivelyRequested);

            var repository = ((IRepository <RefundRequest>)_refundRequestRepository);

            refundRequest.RequestStatus       = (long)RequestStatus.Reverted;
            refundRequest.RefundRequestResult = new RefundRequestResult
            {
                ProcessedOn = DateTime.Now,
                ProcessedByOrgRoleUserId = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId
            };
            repository.Save(refundRequest);
        }
Ejemplo n.º 2
0
        public List <SalesRepTerritory> GetTerritoriesForSalesRep(long salesRepId)
        {
            long organizationRoleUserId = _organizationRoleUserRepository.
                                          GetOrganizationRoleUser(salesRepId).Id;
            Expression <Func <TerritoryEntity, bool> > filter = te => te.OrganizationRoleUserTerritory.
                                                                Select(orut => orut.OrganizationRoleUserId).Contains(organizationRoleUserId);

            IEnumerable <TerritoryEntity> territoryEntities = FetchTerritoryEntities(filter);

            return(territoryEntities.Select(te => GetSalesRepTerritory(te)).ToList());
        }
        public ShippingDetail GetShippingDetailData(CustomerOrderDetail customerOrderDetail)
        {
            var option = customerOrderDetail.ShippingOptions.FirstOrDefault();

            if (option == null)
            {
                return(null);
            }

            var shippingDetail = new ShippingDetail
            {
                ShippingOption       = new ShippingOption(option.Id),
                DataRecorderMetaData =
                    new DataRecorderMetaData
                {
                    DataRecorderCreator = _organizationRoleUserRepository.GetOrganizationRoleUser(_creatorOrganizationRoleUser),
                    DateCreated         = DateTime.Now,
                    DateModified        = DateTime.Now
                },
                Status          = ShipmentStatus.Processing,
                ShippingAddress = GetShippinAddress(customerOrderDetail),
                ActualPrice     = option.Price
            };

            return(shippingDetail);
        }
Ejemplo n.º 4
0
        private OrderedPair <OrganizationRoleUser, string> GetOrganizationRoleUser <T>(T data, Func <T, long> organizationRoleUserId)
        {
            var organizationRoleUser = _organizationRoleUserRepository.GetOrganizationRoleUser(organizationRoleUserId(data));
            var user = _userRepository.GetUser(organizationRoleUser.UserId);

            return(new OrderedPair <OrganizationRoleUser, string>(organizationRoleUser, user.NameAsString));
        }
Ejemplo n.º 5
0
        private OrderedPair <OrganizationRoleUser, OrderedPair <string, string> > GetOrganizationRoleUser <T>(T data, Func <T, long> organizationRoleUserId)
        {
            var organizationRoleUser = _organizationRoleUserRepository.GetOrganizationRoleUser(organizationRoleUserId(data));
            var user = _userRepository.GetUser(organizationRoleUser.UserId);
            var role = _roleRepository.GetByRoleId(organizationRoleUser.RoleId);

            return(new OrderedPair <OrganizationRoleUser, OrderedPair <string, string> >(organizationRoleUser, new OrderedPair <string, string>(user.NameAsString, role.DisplayName)));
        }
Ejemplo n.º 6
0
        public void AddItem(IOrderable itemToOrder, int quantity, long forOrganizationRoleUserId,
                            long dataRecorderCreatorId, SourceCode sourceCode, EventCustomer eventCustomer,
                            ShippingDetail shippingDetail, OrderStatusState orderStatusState, long?sourceId = null)
        {
            if (sourceId == null && (itemToOrder is EventPackage || itemToOrder is EventTest))
            {
                var customerId = forOrganizationRoleUserId;
                if (itemToOrder is EventTest)
                {
                    var preApprovedTestList = _preApprovedTestRepository.GetByCustomerId(customerId).Select(x => x.TestId);
                    if (preApprovedTestList.Contains(((EventTest)itemToOrder).TestId))
                    {
                        sourceId = (long)OrderSource.PreApproved;
                    }
                }
                else if (itemToOrder is EventPackage)
                {
                    var preApprovedPackageList = _preApprovedPackageRepository.GetByCustomerId(customerId).Select(x => x.PackageId);
                    if (preApprovedPackageList.Contains(((EventPackage)itemToOrder).PackageId))
                    {
                        sourceId = (long)OrderSource.PreApproved;
                    }
                }
                if (sourceId == null)
                {
                    var oru = _organizationRoleUserRepository.GetOrganizationRoleUser(dataRecorderCreatorId);
                    if (oru.RoleId == (long)Roles.FranchiseeAdmin)
                    {
                        sourceId = (long)OrderSource.Admin;
                    }
                    else if (oru.RoleId == (long)Roles.CallCenterRep)
                    {
                        sourceId = (long)OrderSource.CallCenter;
                    }
                    else if (oru.RoleId == (long)Roles.Technician)
                    {
                        sourceId = (long)OrderSource.Technician;
                    }
                    else if (oru.RoleId == (long)Roles.NursePractitioner)
                    {
                        sourceId = (long)OrderSource.NursePractioner;
                    }
                }
            }


            OrderDetail orderDetail = _orderDetailFactory.CreateNewOrderDetail(itemToOrder, quantity,
                                                                               forOrganizationRoleUserId,
                                                                               dataRecorderCreatorId,
                                                                               sourceCode, eventCustomer, shippingDetail, sourceId);

            orderDetail.OrderItemStatus = _orderItemStatusFactory.CreateOrderItemStatus(itemToOrder.OrderItemType,
                                                                                        (int)orderStatusState);

            var pair = new OrderedPair <OrderDetail, IOrderable>(orderDetail, itemToOrder);

            _lineItems.Add(pair);
        }
Ejemplo n.º 7
0
        public User GetUser(long organizationRoleUserId)
        {
            var orgRoleUser = _orgRoleUserRepository.GetOrganizationRoleUser(organizationRoleUserId);

            if (orgRoleUser == null)
            {
                return(null);
            }
            return(_userRepository.GetUser(orgRoleUser.UserId));
        }
Ejemplo n.º 8
0
        private OrganizationRoleUser GetForOrganizationRoleUser(long customerId)
        {
            var orgRolesUser = _organizationRoleUserRepository.GetOrganizationRoleUser(customerId);

            if (orgRolesUser != null && orgRolesUser.RoleId == (long)Roles.Customer)
            {
                return(orgRolesUser);
            }
            return(null);
        }
Ejemplo n.º 9
0
        private OrganizationRoleUser GetForOrganizationRoleUser(long customerId)
        {
            var orgRolesUsers = _organizationRoleUserRepository.GetOrganizationRoleUser(customerId);

            if (orgRolesUsers != null)
            {
                return(orgRolesUsers);
            }

            return(null);
        }
Ejemplo n.º 10
0
        public PrimaryCarePhysicianEditModel GetPrimaryCarePhysicianEditModel(long customerId)
        {
            PrimaryCarePhysicianEditModel pcpEditModel = null;
            var pcp = _primaryCarePhysicianRepository.Get(customerId);

            if (pcp != null)
            {
                pcpEditModel                = Mapper.Map <PrimaryCarePhysician, PrimaryCarePhysicianEditModel>(pcp);
                pcpEditModel.Address        = Mapper.Map <Address, AddressEditModel>(pcp.Address);
                pcpEditModel.MailingAddress = pcp.MailingAddress != null?Mapper.Map <Address, AddressEditModel>(pcp.MailingAddress) : pcpEditModel.Address;

                if (pcpEditModel.IsPcpAddressVerified.HasValue)
                {
                    pcpEditModel.IsPcpAddressVerified = pcp.IsPcpAddressVerified;
                    pcpEditModel.PcpAddressVerifiedOn = pcp.PcpAddressVerifiedOn;
                    if (pcp.PcpAddressVerifiedBy.HasValue)
                    {
                        var orgRoleUser = _organizationRoleUserRepository.GetOrganizationRoleUser(pcp.PcpAddressVerifiedBy.Value);
                        if (orgRoleUser != null)
                        {
                            if (orgRoleUser.RoleId > 0)
                            {
                                var role = _roleRepository.GetByRoleId(orgRoleUser.RoleId);
                                if (role != null)
                                {
                                    pcpEditModel.PcpAddresVarifiedByRole = role.DisplayName;
                                }
                            }
                            if (orgRoleUser.UserId > 0)
                            {
                                var user = _userRepository.GetUser(orgRoleUser.UserId);
                                if (user != null)
                                {
                                    pcpEditModel.PcpAddresVarifiedByUserName = user.Name.ToString();
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                pcpEditModel = new PrimaryCarePhysicianEditModel {
                    Address = new AddressEditModel(), PhoneNumber = new PhoneNumber {
                        CountryCode = CountryCode.UnitedStatesAndCanada
                    }, MailingAddress = new AddressEditModel(), HasSameAddress = true
                };
            }

            pcpEditModel.HasSameAddress = IsMailingAddressSame(pcpEditModel);

            return(pcpEditModel);
        }
Ejemplo n.º 11
0
        private Name GetOrganizationRoleUserName(long orgRoleUserId)
        {
            var name = new Name {
                FirstName = string.Empty, LastName = string.Empty
            };

            if (orgRoleUserId <= 0)
            {
                return(name);
            }

            var user = _repositoryOrganizationRoleUser.GetOrganizationRoleUser(orgRoleUserId);

            if (user == null)
            {
                return(name);
            }

            var person = _repositoryUser.GetUser(user.UserId);

            return(person != null ? person.Name : name);
        }
Ejemplo n.º 12
0
        public void PollForEvaluationReminderNotification()
        {
            _logger.Info("Starting the Polling Agent for Evaluation Reminder Notification.");

            var value = _configurationSettingRepository.GetConfigurationValue(ConfigurationSettingName.SendEmptyQueueEvaluationReminder);

            var physicians = _organizationRoleUserRepository.GetIdNamePairofUsersByRole(Roles.MedicalVendorUser);

            foreach (var orderedPair in physicians)
            {
                var overReadEvaluationPair = _physicianRepository.GetEventCustomerIdForOverReadPhysicianEvaluation(orderedPair.FirstValue);
                var evaluationPair         = _physicianRepository.GetEventCustomerIdForPhysicianEvaluation(orderedPair.FirstValue);
                if ((value.ToLower() == bool.TrueString.ToLower()) || (evaluationPair.ItemsAvailable > 0 || overReadEvaluationPair.ItemsAvailable > 0))
                {
                    try
                    {
                        var createdByOrgRoleUserId =
                            _organizationRoleUserRepository.GetOrganizationRoleUserIdsForRole((long)Roles.FranchisorAdmin).First();

                        var orgRoleUser = _organizationRoleUserRepository.GetOrganizationRoleUser(orderedPair.FirstValue);

                        var evaluationReminderNotificationModel = _emailNotificationModelsFactory.GetEvaluationReminderNotificationModel(orderedPair.FirstValue);
                        _notifier.NotifySubscribersViaEmail(NotificationTypeAlias.EvaluationReminder, EmailTemplateAlias.EvaluationReminder, evaluationReminderNotificationModel, orgRoleUser.UserId, createdByOrgRoleUserId, "Evaluation Reminder Notification");
                    }
                    catch (Exception ex)
                    {
                        _logger.Info(
                            String.Format("\n System failure: For Physician:{0} \n Message{1}", orderedPair.SecondValue,
                                          ex.Message));
                    }
                }
                else
                {
                    _logger.Info(String.Format("\n No Evaluation Pending For Physician:{0}", orderedPair.SecondValue));
                }
            }
        }
Ejemplo n.º 13
0
        //TODO: SRE
        //TODO: Not to use callCenterCallCenterRepId
        public List <Core.Finance.Domain.Order> GetAllOrdersCreatedByCallCenterRep(long callCenterRepId, DateTime startDate, DateTime endDate)
        {
            var callCenterRepOrganizationRoleUser =
                _organizationRoleUserRepository.GetOrganizationRoleUser(callCenterRepId);

            var orders = new List <Core.Finance.Domain.Order>();

            using (var myAdapter = PersistenceLayer.GetDataAccessAdapter())
            {
                var linqMetaData = new LinqMetaData(myAdapter);

                var orderIds = linqMetaData.EventCustomers.Join(linqMetaData.EventCustomerOrderDetail,
                                                                ec => ec.EventCustomerId,
                                                                ecod => ecod.EventCustomerId,
                                                                (ec, ecod) =>
                                                                new { ec, ecod.OrderDetailId, ecod.IsActive }).Join(
                    linqMetaData.OrderDetail, @t => @t.OrderDetailId, od => od.OrderDetailId,
                    (@t, od) => new { @t, od.OrderId }).Join(linqMetaData.Order, @t => @t.OrderId, o => o.OrderId,
                                                             (@t, o) => new { @t, o }).Where(
                    @t => @t.t.t.ec.CreatedByOrgRoleUserId == callCenterRepOrganizationRoleUser.Id &&
                    @t.t.t.ec.DateCreated >= startDate &&
                    @t.t.t.ec.DateCreated <= endDate &&
                    @t.o.OrganizationRoleUserCreatorId == callCenterRepOrganizationRoleUser.Id &&
                    @t.o.DateCreated >= startDate && @t.o.DateCreated <= endDate).Select(@t => @t.o.OrderId).
                               Distinct();


                foreach (var orderId in orderIds)
                {
                    var order = GetOrder(orderId);
                    orders.Add(order);
                }

                return(orders);
            }
        }
Ejemplo n.º 14
0
        private void CreateChangeOrderMetrics(EventMetricsViewData eventMetricsViewData,
                                              Core.Finance.Domain.Order order, OrganizationRoleUser organizationRoleUser)
        {
            // It means the order has been changed, so either downgrade or upgrade will occur for such cases only.
            if (order.DiscountedTotal == order.TotalAmountPaid && order.OrderDetails.Count > 1)
            {
                order.OrderDetails.ForEach(od =>
                {
                    od.DataRecorderMetaData.DateCreated =
                        od.DataRecorderMetaData.DateCreated.GetDateWithDifferentTime(
                            od.DataRecorderMetaData.DateCreated.Hour,
                            od.DataRecorderMetaData.DateCreated.Minute,
                            od.DataRecorderMetaData.DateCreated.Second);
                    if (od.Price < 0)
                    {
                        od.Price = 0;
                    }
                });
                Func <OrderDetail, decimal> amountOfDiscount = od => od.SourceCodeOrderDetail == null ? 0 : od.SourceCodeOrderDetail.Amount;
                var dateCreatedGroups = order.OrderDetails.GroupBy(od => od.DataRecorderMetaData.DateCreated).Select(
                    g =>
                    new
                {
                    g.Key,
                    TotalValue   = g.Sum(od => (od.Price * od.Quantity) - (amountOfDiscount(od))),
                    AvailedValue = g.Where(od => od.OrderItemStatus.OrderStatusState == OrderStatusState.FinalSuccess
                                           //EventPackageItemStatus.Availed || od.OrderItemStatus == EventTestItemStatus.Availed
                                           ).Sum(
                        od => ((od.Price * od.Quantity) - amountOfDiscount(od))),
                    CreatorId = g.Select(od => od.DataRecorderMetaData.DataRecorderCreator.Id).ToList()
                }).ToList();

                var availedPriceToBeAddedToNextGroup = 0m;

                for (int counter = 0; counter < (dateCreatedGroups.Count - 1); counter++)
                {
                    var changedOrderDetailOrganizationRoleUser =
                        _organizationRoleUserRepository.GetOrganizationRoleUser(
                            dateCreatedGroups[counter + 1].CreatorId.LastOrDefault());

                    var originalOrderDetailSum = dateCreatedGroups[counter].TotalValue +
                                                 availedPriceToBeAddedToNextGroup;
                    availedPriceToBeAddedToNextGroup += dateCreatedGroups[counter].AvailedValue;

                    var changedOrderDetailSum = dateCreatedGroups[counter + 1].TotalValue +
                                                availedPriceToBeAddedToNextGroup;

                    if (changedOrderDetailSum == 0)
                    {
                        continue;
                    }

                    var roleId = GetParentRoleIdByRoleId(organizationRoleUser.RoleId);

                    if (roleId == (int)Roles.Technician)
                    {
                        if (GetParentRoleIdByRoleId(changedOrderDetailOrganizationRoleUser.RoleId) == (int)Roles.Technician)
                        {
                            if (originalOrderDetailSum > changedOrderDetailSum)
                            {
                                eventMetricsViewData.DownGradePaymentCount++;
                                eventMetricsViewData.DownGradePayments += originalOrderDetailSum - changedOrderDetailSum;
                            }
                            if (originalOrderDetailSum < changedOrderDetailSum)
                            {
                                eventMetricsViewData.UpGradePaymentCount++;
                                eventMetricsViewData.UpGradePayments += changedOrderDetailSum - originalOrderDetailSum;
                            }
                        }
                    }
                    else
                    {
                        if (originalOrderDetailSum > changedOrderDetailSum)
                        {
                            eventMetricsViewData.DownGradePaymentCount++;
                            eventMetricsViewData.DownGradePayments += originalOrderDetailSum - changedOrderDetailSum;
                        }
                        if (originalOrderDetailSum < changedOrderDetailSum)
                        {
                            eventMetricsViewData.UpGradePaymentCount++;
                            eventMetricsViewData.UpGradePayments += changedOrderDetailSum - originalOrderDetailSum;
                        }
                    }
                }
            }
        }
Ejemplo n.º 15
0
        public bool RegisterCustomer(MassRegistrationEditModel model, long eventId, EventType eventType)
        {
            var createdByOrgRoleUser = Mapper.Map <OrganizationRoleUserModel, OrganizationRoleUser>(_sessionContext.UserSession.CurrentOrganizationRole);

            if (model.Address != null && string.IsNullOrEmpty(model.Address.StreetAddressLine1) && string.IsNullOrEmpty(model.Address.City) && string.IsNullOrEmpty(model.Address.ZipCode))
            {
                var state = _stateRepository.GetStatebyCode(_settings.State) ??
                            _stateRepository.GetState(_settings.State);
                model.Address.StreetAddressLine1 = _settings.Address1;
                model.Address.StreetAddressLine2 = _settings.Address2;
                model.Address.City    = _settings.City;
                model.Address.StateId = state != null ? state.Id : model.Address.StateId;
                model.Address.ZipCode = _settings.ZipCode;
            }
            var customer = _massRegistrationEditModelFactory.CreateCustomer(model, createdByOrgRoleUser);

            _customerService.SaveCustomer(customer, createdByOrgRoleUser.Id);

            var forOrgRoleUser = _orgRoleUserRepository.GetOrganizationRoleUser(customer.CustomerId);

            var orderables = new List <IOrderable>();

            if (model.PackageId > 0)
            {
                orderables.Add(_eventPackageRepository.GetByEventAndPackageIds(eventId, model.PackageId));
            }
            if (orderables.IsNullOrEmpty())
            {
                return(false);
            }

            var screeningTime = _eventPackageSelectorService.GetScreeningTime(eventId, model.PackageId, null);
            var slots         = _eventSchedulingSlotService.BookSlotTemporarily(model.AppointmentId, screeningTime, model.PackageId, null);

            if (slots.IsNullOrEmpty())
            {
                throw new InvalidOperationException("Slot is booked by some other customer.");
            }

            var eventCustomer = SaveEventCustomer(createdByOrgRoleUser, model.AppointmentId, eventId, customer.CustomerId);

            ShippingDetail shippingDetail = null;

            if (model.AddFreeShipping)
            {
                var shippingAddress = Mapper.Map <AddressEditModel, Address>(model.Address);

                shippingDetail = SaveShippingDetail(shippingAddress, createdByOrgRoleUser);
            }
            PlaceOrder(forOrgRoleUser, createdByOrgRoleUser, orderables, eventCustomer, null, shippingDetail);

            if (model.SendNotification)
            {
                var eventData = _eventRepository.GetById(eventId);
                SendNotification(customer, eventData, createdByOrgRoleUser, "/Scheduling/MassRegistration/Create");
            }

            try
            {
                _eventSchedulingSlotService.SendEventFillingNotification(eventId, createdByOrgRoleUser.Id);
            }
            catch (Exception)
            {
            }
            return(true);
        }
Ejemplo n.º 16
0
        public void PollForUpdate()
        {
            var files = DirectoryOperationsHelper.GetFiles(_settings.MediaLocation + "\\PreAppprovedTest", "*PreAppprovedTest*.csv");

            var createdBy = _organizationRoleUserRepository.GetOrganizationRoleUser(1);

            foreach (var file in files)
            {
                _logger.Info("Parsing file : " + file);

                DataTable table = _csvReader.ReadWithTextQualifier(file);

                if (table.Rows.Count <= 0)
                {
                    _logger.Info("No records found.");
                    continue;
                }

                foreach (DataRow row in table.Rows)
                {
                    var clientId = GetRowValue(row, "Client_Id");
                    //var contractNumber = GetRowValue(row, "Contract_Number");
                    var preApprovedTests = GetPreApprovedTests(row, "Pre-approved tests");

                    if (string.IsNullOrEmpty(clientId))                  // || string.IsNullOrEmpty(contractNumber)
                    {
                        _logger.Info("Skipping row : Client Id blank."); //or Contract Number
                        continue;
                    }

                    var chaseOutbound = _chaseOutboundRepository.GetByClientId(clientId);

                    if (chaseOutbound == null)
                    {
                        _logger.Info(string.Format("Chase data not found for Client Id : {0}", clientId));
                        continue;
                    }

                    if (preApprovedTests != null && preApprovedTests.Any())
                    {
                        var pairs = TestType.A1C.GetNameValuePairs();
                        var preApprovedTestExists = pairs.Where(x => preApprovedTests.Contains(x.SecondValue.ToLower())).Select(x => x.SecondValue.ToLower());

                        var testNotExist = string.Empty;

                        if (preApprovedTestExists != null && preApprovedTestExists.Any() && (preApprovedTestExists.Count() != preApprovedTests.Count()))
                        {
                            var testNotExistInSystem = preApprovedTests.Where(x => !preApprovedTestExists.Contains(x.ToLower())).Select(x => x).ToArray();

                            testNotExist = string.Join(",", testNotExistInSystem);
                        }
                        else if (preApprovedTestExists == null || !preApprovedTestExists.Any())
                        {
                            testNotExist = string.Join(",", preApprovedTests);
                        }

                        if (!string.IsNullOrEmpty(testNotExist))
                        {
                            _logger.Info(testNotExist + " test alias name does not exist in HIP");
                            continue;
                        }

                        var preApprovedTestIds = pairs.Where(x => preApprovedTests.Contains(x.SecondValue.ToLower())).Select(x => (long)x.FirstValue);
                        if (preApprovedTestIds != null && preApprovedTestIds.Any())
                        {
                            _preApprovedTestRepository.SavePreApprovedTests(chaseOutbound.CustomerId, preApprovedTestIds, createdBy.Id);

                            _logger.Info(string.Format("Pre-approved tests updated for Client Id : {0}", clientId));
                        }
                    }
                }

                _logger.Info("Parsed file : " + file);
            }
        }
Ejemplo n.º 17
0
        public void PollForExportableRequest()
        {
            ExportableReportsQueue exportableReportsQueue = null;

            try
            {
                var timeOfDay = DateTime.Now.TimeOfDay;
                if (_isDevEnvironment || (timeOfDay > new TimeSpan(4, 0, 0)))
                {
                    _logger.Info("Exportable Report Generation Started");

                    exportableReportsQueue = _exportableReportsQueueRepository.GetExportableReportsQueueForService();

                    if (exportableReportsQueue == null)
                    {
                        _logger.Info("No Request pending in queue for generation");
                        return;
                    }

                    var orgRoleUser = _organizationRoleUserRepository.GetOrganizationRoleUser(exportableReportsQueue.RequestedBy);

                    var user       = _userRepository.GetUser(orgRoleUser.UserId);
                    var reportType = (ExportableReportType)exportableReportsQueue.ReportId;

                    _logger.Info("Generating Report :" + reportType.GetDescription() + " Requested by " + user.NameAsString);

                    UpdateExportReportStartTimeAndStaus(exportableReportsQueue);
                    var fileName = string.Empty;

                    switch (reportType)
                    {
                    case ExportableReportType.AppointmentsBooked:
                        var appointmentsBookedListModelFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <AppointmentsBookedListModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _schedulingExportableReportHelper.AppointmentBookedReportExport(appointmentsBookedListModelFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.CustomerExport:
                        var customerExportListModelFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <CustomerExportListModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _schedulingExportableReportHelper.CustomerReportExport(customerExportListModelFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.TestPerformed:
                        var testPerformedFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <TestPerformedListModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _medicalExportableReportHelper.TestPerformedReportExport(testPerformedFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.OutreachCallReport:
                        var outreachCallReportModelFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <OutreachCallReportModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.OutreachCallReportExport(outreachCallReportModelFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.MemberStatusReport:
                        var memberStatusListModelFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <MemberStatusListModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _schedulingExportableReportHelper.MemberStatusReportExport(memberStatusListModelFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.TestNotPerformed:
                        var testNotPerformedFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <TestNotPerformedListModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _medicalExportableReportHelper.TestNotPerformedReportExport(testNotPerformedFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.GapsClosure:
                        var gapsClosureFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <GapsClosureModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _medicalExportableReportHelper.GapsReportExport(gapsClosureFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.GiftCertificate:
                        var giftCertificateFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <GiftCertificateReportFilter>(exportableReportsQueue.FilterData);
                        fileName = _financeReportHelper.GiftCerificateExport(giftCertificateFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.EventArchiveStats:
                        var eventArchiveStatsFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <EventArchiveStatsFilter>(exportableReportsQueue.FilterData);
                        fileName = _medicalExportableReportHelper.EventArchiveStatsExport(eventArchiveStatsFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.CallQueueSchedulingReport:
                        var callQueueCustomerReportFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <CallQueueSchedulingReportFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.CallQueueSchedulingReportExport(callQueueCustomerReportFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.TestBooked:
                        var testBookedListModelFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <TestsBookedListModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _schedulingExportableReportHelper.TestBookedReportExport(testBookedListModelFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.CallQueueExcludedCustomerReport:
                        var callQueueExcludedCustomerReportModelFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <CallQueueExcludedCustomerReportModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.CallQueueExcludedCustomerReportExport(callQueueExcludedCustomerReportModelFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.CallQueueCustomerReport:
                        var outboundCallQueueFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <OutboundCallQueueFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.CallQueueCustomersReportExport(outboundCallQueueFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.CustomerWithNoEventsInAreaReport:
                        var customerWithNoEventsInAreaReportModelFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <CustomerWithNoEventsInAreaReportModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.CustomerWithNoEventsInAreaReportExport(customerWithNoEventsInAreaReportModelFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.CallCenterCallReport:
                        var callCenterCallReportModelFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <CallCenterCallReportModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.CallCenterCallReportExport(callCenterCallReportModelFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.ConfirmationReport:
                        var confirmationReportFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <ConfirmationReportFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.ConfirmationReportExport(confirmationReportFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.CallSkippedReport:
                        var callSkippedFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <CallSkippedReportFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.CallSkippedReportExport(callSkippedFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.PcpTrackingReport:
                        var pcpTrackingReportFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <PcpTrackingReportFilter>(exportableReportsQueue.FilterData);
                        fileName = _schedulingExportableReportHelper.PcpTrackingReportExport(pcpTrackingReportFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.CustomerSchedule:
                        var customerScheduleModelFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <CustomerScheduleModelFilter>(exportableReportsQueue.FilterData);
                        fileName = _schedulingExportableReportHelper.CustomerScheduleExport(customerScheduleModelFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.ExcludedCustomerReport:
                        var excludedCustomerReport = Newtonsoft.Json.JsonConvert.DeserializeObject <OutboundCallQueueFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.ExcludedCusomerReportExport(excludedCustomerReport, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.DisqualifiedTestReport:
                        var disqualifiedTestReportFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <DisqualifiedTestReportFilter>(exportableReportsQueue.FilterData);
                        fileName = _medicalExportableReportHelper.DisqualifiedTestReportExport(disqualifiedTestReportFilter, orgRoleUser.UserId);
                        break;

                    case ExportableReportType.PreAssessmentReport:
                        var preAssessmentReportFilter = Newtonsoft.Json.JsonConvert.DeserializeObject <PreAssessmentReportFilter>(exportableReportsQueue.FilterData);
                        fileName = _callCenterExportableReportHelper.PreAssessmentReportExport(preAssessmentReportFilter, orgRoleUser.UserId);
                        break;
                    }

                    SaveFile(exportableReportsQueue, fileName);
                    SendNotification(user, reportType.GetDescription(), orgRoleUser.UserId, exportableReportsQueue.RequestedBy);

                    _logger.Info("Report :" + reportType.GetDescription() + " Requested by " + user.NameAsString + " Generated Successfully.");
                }
                else
                {
                    _logger.Info(string.Format("Call Upload Parser can not be called as time of day is {0}", timeOfDay));
                }
            }
            catch (Exception ex)
            {
                if (exportableReportsQueue != null)
                {
                    UpdateExportReportEndTimeAndStaus(exportableReportsQueue, (long)ExportableReportStatus.Failed);
                }

                _logger.Error("ex " + ex.Message + " stack trace: " + ex.StackTrace);
            }
        }
Ejemplo n.º 18
0
        protected void PaymentDetailsGrid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            switch (e.Row.RowType)
            {
            case DataControlRowType.DataRow:
            {
                var data = e.Row.DataItem as EventHostDepositViewData;

                if (data != null)
                {
                    var      eventAddress          = e.Row.FindControl("eventAddress") as HtmlContainerControl;
                    var      deliverToAddress      = e.Row.FindControl("deliverToAddress") as HtmlContainerControl;
                    var      paymentType           = e.Row.FindControl("paymentType") as HtmlContainerControl;
                    var      paymentMode           = e.Row.FindControl("paymentMode") as HtmlContainerControl;
                    var      paymentStatusDropDown = e.Row.FindControl("paymentStatusDropDown") as DropDownList;
                    var      cancellationDate      = e.Row.FindControl("cancellationDate") as Literal;
                    var      dueDate                = e.Row.FindControl("dueDate") as Literal;
                    var      eventDateIcon          = e.Row.FindControl("_eventDateIcon") as HtmlContainerControl;
                    var      lastModifiedDate       = e.Row.FindControl("_lastModifiedDate") as HtmlContainerControl;
                    var      eventStatus            = e.Row.FindControl("_eventStatus") as HtmlContainerControl;
                    var      paymentStatus          = e.Row.FindControl("_paymentStatus") as HtmlContainerControl;
                    long     organizationRoleUserId = 0;
                    DateTime?paymentRequested       = null;

                    if (dueDate != null && data.DueDate.HasValue)
                    {
                        dueDate.Text = data.DueDate.Value.ToShortDateString();
                    }

                    if (cancellationDate != null && data.IsDeposit && data.DepositFullRefundDueDate != null)
                    {
                        cancellationDate.Text = data.DepositFullRefundDueDate.Value.ToShortDateString();
                    }
                    if (eventAddress != null)
                    {
                        eventAddress.InnerHtml =
                            CommonCode.AddressMultiLine(data.EventStreetAddressLine1,
                                                        data.EventStreetAddressLine2,
                                                        data.EventCity,
                                                        data.EventState,
                                                        data.EventZip);
                    }
                    if (deliverToAddress != null)
                    {
                        deliverToAddress.InnerHtml =
                            CommonCode.AddressMultiLine(data.StreetAddressLine1,
                                                        data.StreetAddressLine2,
                                                        data.City,
                                                        data.State,
                                                        data.Zip);
                    }

                    if (paymentStatusDropDown != null)
                    {
                        var status = data.Status.ToString();
                        BindPaymentStatus(status, paymentStatusDropDown);
                    }

                    var amountSpan = e.Row.FindControl("_amount") as HtmlContainerControl;

                    string  paymentToolTip = string.Empty;
                    decimal amount         = 0m;

                    if (eventStatus != null && data.EventStatus != EventStatus.Active)
                    {
                        eventStatus.InnerHtml = "<strong>Event Status:</strong><br />" + data.EventStatus.ToString();
                    }
                    if (amountSpan != null)
                    {
                        if (!data.IsDeposit)
                        {
                            bool isAppliedToCost = false;

                            try
                            {
                                var hostDeposit = _hostDeositRepository.GetById(data.EventId);
                                if (hostDeposit != null && hostDeposit.DepositApplicablityMode == DepositType.AppliedToCost)
                                {
                                    isAppliedToCost        = true;
                                    amount                 = hostDeposit.IsActive ? data.Amount - hostDeposit.Amount : data.Amount - 0;
                                    organizationRoleUserId = hostDeposit.PaymentRecordedBy != null
                                                                         ? hostDeposit.PaymentRecordedBy.Id
                                                                         : 0;
                                    paymentRequested = hostDeposit.CreatedDate;
                                }
                                else
                                {
                                    amount = data.Amount;
                                }

                                if (isAppliedToCost)
                                {
                                    paymentToolTip =
                                        "<a class=\"jtip\" href=\"#\" title=\"Details|Room Rent = $" +
                                        data.Amount.ToString("#.##");
                                    if (hostDeposit.IsActive)
                                    {
                                        paymentToolTip += "<br /> Deposit = $" +
                                                          hostDeposit.Amount.ToString("#.##");
                                    }

                                    paymentToolTip += "<br /> Amount Payable = $" + amount.ToString("#.##") +
                                                      "\">" + amount.ToString("#.##") + "</a>";
                                    amountSpan.InnerHtml = paymentToolTip;
                                }
                                else
                                {
                                    paymentToolTip =
                                        "<a class=\"jtip\" href=\"#\" title=\"Details|Room Rent = $" +
                                        data.Amount.ToString("#.##");
                                    if (hostDeposit.IsActive)
                                    {
                                        paymentToolTip += "<br /> Deposit = Refundable";
                                    }
                                    paymentToolTip += "<br />Amount Payable = $" + amount.ToString("#.##") + "\">" + amount.ToString("#.##") + "</a>";

                                    amountSpan.InnerHtml = paymentToolTip;
                                }
                            }
                            catch
                            {
                                amount         = data.Amount;
                                paymentToolTip =
                                    "<a class=\"jtip\" href=\"#\" title=\"Details|Room Rent = $" +
                                    data.Amount.ToString("#.##") +
                                    "<br /> Deposit = Refundable <br /> Amount Payable = $" +
                                    amount.ToString("#.##") + "\">" + amount.ToString("#.##") + "</a>";
                                amountSpan.InnerHtml = paymentToolTip;
                            }
                        }
                        else
                        {
                            paymentToolTip =
                                "<a class=\"jtip\" href=\"#\" title=\"Details|This is deposit amount $" +
                                data.Amount.ToString("#0.00") + "\">" + data.Amount.ToString("#0.00") + "</a>";
                            amountSpan.InnerHtml = paymentToolTip;
                            var hostPayment = _hostPaymentRepository.GetById(data.EventId);
                            organizationRoleUserId = hostPayment.PaymentRecordedBy != null
                                                                         ? hostPayment.PaymentRecordedBy.Id
                                                                         : 0;
                            paymentRequested = hostPayment.CreatedDate;
                        }
                    }
                    // Payment Recorded By
                    if (organizationRoleUserId > 0 && data.EventStatus != EventStatus.Active)
                    {
                        var organizationRoleUser =
                            _organizationRoleUserRepository.GetOrganizationRoleUser(organizationRoleUserId);
                        if (organizationRoleUser != null)
                        {
                            ICustomerRepository customerRepository = new CustomerRepository();
                            var userDetails = customerRepository.GetCustomerByUserId(organizationRoleUser.UserId);

                            if (userDetails != null && paymentStatus != null)
                            {
                                paymentStatus.InnerHtml = "Payment Recorded By:" + userDetails.Name.FullName;
                                if (paymentRequested != null)
                                {
                                    paymentStatus.InnerHtml = paymentStatus.InnerHtml + "<br />" + "Payment Date:" + paymentRequested.Value.ToShortDateString();
                                }
                            }
                        }
                    }


                    if (paymentType != null)
                    {
                        paymentType.InnerHtml = data.IsDeposit ? "Deposit" : "Room Rent";
                    }
                    if (paymentMode != null)
                    {
                        var payment = data.PaymentMode.ToString();
                        paymentMode.InnerHtml =
                            Enum.Parse(typeof(HostPaymentType), payment).ToString();
                        if (paymentMode.InnerText == HostPaymentType.Both.ToString())
                        {
                            paymentMode.InnerText = "Check/CC";
                        }
                    }

                    var eventWizardAnchor = e.Row.FindControl("EventWizardAnchor") as HtmlAnchor;
                    if (eventWizardAnchor != null)
                    {
                        eventWizardAnchor.HRef = "/App/Common/CreateEventWizard/Step1.aspx?EventID=" + data.EventId;
                    }

                    //var updateButton = e.Row.FindControl("UpdateButton") as Button;
                    //if (data.Status == HostPaymentStatus.Paid || data.Status == HostPaymentStatus.Refunded)
                    ////if (data.Status == HostPaymentStatus.Refunded)
                    ////{
                    ////    e.Row.Enabled = false;
                    ////    updateButton.Enabled = false;
                    ////}

                    // Past,Cussrent,Future event date icon
                    if (eventDateIcon != null)
                    {
                        if (data.EventDate.ToString("MM/dd/yyyy").Equals(DateTime.Now.ToString("MM/dd/yyyy")))
                        {
                            eventDateIcon.InnerHtml =
                                "<img src=\"/App/Images/icon-todays-event.gif\" title=\"Today Event\" alt=\"Today Event\"/>";
                        }
                        else if (data.EventDate > DateTime.Now)
                        {
                            eventDateIcon.InnerHtml =
                                "<img src=\"/App/Images/icon-future-event.gif\" title=\"Future Event\" alt=\"Future Event\"/>";
                        }
                        else if (data.EventDate < DateTime.Now)
                        {
                            eventDateIcon.InnerHtml =
                                "<img src=\"/App/Images/icon-past-event.gif\" title=\"Past Event\" alt=\"Past Event\"/>";
                        }
                    }
                    // Last Modified Date
                    if (data.HostPaymentTransactions != null && data.HostPaymentTransactions.Count > 0)
                    {
                        lastModifiedDate.InnerHtml =
                            data.HostPaymentTransactions.LastOrDefault().TransactionDate.ToString("MM/dd/yyyy");
                    }
                    var _spanPrintButton = e.Row.FindControl("_spanPrintButton") as HtmlContainerControl;
                    if (data.Status == HostPaymentStatus.Pending)
                    {
                        _spanPrintButton.Style.Add(HtmlTextWriterStyle.Display, "none");
                    }
                    else
                    {
                        _spanPrintButton.Style.Add(HtmlTextWriterStyle.Display, "block");
                    }
                }
            }
            break;
            }
        }
        public void PollForSendNotification()
        {
            try
            {
                _logger.Info("Starting the Polling Agent to Send Notification to Nurse Practitioner after evaluation.");

                var eventCustomerResults = _eventCustomerResultRepository.GetEventCustomerResultByResultState((int)NewTestResultStateNumber.Evaluated, false, _settings.ResultFlowChangeDate);
                if (eventCustomerResults.IsNullOrEmpty())
                {
                    _logger.Info("No record found to send notification."); return;
                }

                var cryptographyService = new DigitalDeliveryCryptographyService();
                _logger.Info("Total Customer: " + eventCustomerResults.Count());

                var appUrl         = _settings.AppUrl;
                var medicareAppUrl = _settings.MedicareAppUrl;

                foreach (var eventCustomerResult in eventCustomerResults)
                {
                    try
                    {
                        _logger.Info("sending Notification to Np customer Id: " + eventCustomerResult.CustomerId + "event Id: " + eventCustomerResult.EventId);

                        var eventCustomer = _eventCustomerRepository.GetRegisteredEventForUser(eventCustomerResult.CustomerId, eventCustomerResult.EventId);
                        if (eventCustomer.AwvVisitId.HasValue)
                        {
                            var model = new EhrReadyForReEvaluation
                            {
                                EventId              = eventCustomerResult.EventId,
                                HfCustomerId         = eventCustomerResult.CustomerId,
                                Message              = "",
                                ReadyForReEvaluation = true
                            };

                            _logger.Info(string.Format("Sending for Sync ready for Reevaluation to HRA for NursePractitionerId: {0} for CustomerId: {1} and EventId: {2}", eventCustomerResult.SignedOffBy.Value, eventCustomerResult.CustomerId, eventCustomerResult.EventId));

                            var isSynced = _newResultFlowStateService.SyncReadyForEvaluation(model, eventCustomerResult.DataRecorderMetaData.DataRecorderModifier.Id, "Calling from polling agent PollForSendNotification");

                            if (isSynced)
                            {
                                _logger.Info(string.Format(" Synced Notification send To NP and HRA has been updated NursePractitionerId: {0} for CustomerId: {1} and EventId: {2}", eventCustomerResult.SignedOffBy.Value, eventCustomerResult.CustomerId, eventCustomerResult.EventId));

                                var orgRoleUser = _organizationRoleUserRepository.GetOrganizationRoleUser(eventCustomerResult.SignedOffBy.Value);

                                var urlTestDocumentation            = appUrl + string.Format("/App/Common/Results.aspx?key={0}", cryptographyService.Encrypt(eventCustomerResult.EventId + "~" + eventCustomerResult.CustomerId));
                                var urlUnlockAssessment             = medicareAppUrl + string.Format("/mailauth/{0}", eventCustomer.AwvVisitId);
                                var urlTriggersReadyForCodingStatus = ""; // need to write code for this url variables

                                var notificationModel = _emailNotificationModelsFactory.GetNPfordiagnosingwithlinkNotificationViewModel(eventCustomerResult.CustomerId, eventCustomerResult.EventId, urlTestDocumentation, urlUnlockAssessment, urlTriggersReadyForCodingStatus);

                                _notifier.NotifySubscribersViaEmail(NotificationTypeAlias.NPfordiagnosingwithlinkNotification, EmailTemplateAlias.NPfordiagnosingwithlinkNotification, notificationModel, orgRoleUser.UserId, _RequestedByOrgRoleUserId, "SendNotiificationToNursePractitionerPollingAgent");

                                _logger.Info(string.Format("Notification sent to NursePractitionerId: {0} for CustomerId: {1} and EventId: {2}", eventCustomerResult.SignedOffBy.Value, eventCustomerResult.CustomerId, eventCustomerResult.EventId));

                                _testResultService.SetResultstoState(eventCustomerResult.EventId, eventCustomerResult.CustomerId, (int)NewTestResultStateNumber.NpNotificationSent, false, eventCustomerResult.DataRecorderMetaData.DataRecorderModifier.Id);
                                _logger.Info(string.Format(" Result State has been update for CustomerId: {0} and EventId: {1}", eventCustomerResult.CustomerId, eventCustomerResult.EventId));
                            }

                            _logger.Info(string.Format("Synced To NP and HRA NursePractitionerId: {0} for CustomerId: {1} and EventId: {2} and hra Result {3}", eventCustomerResult.SignedOffBy.Value, eventCustomerResult.CustomerId, eventCustomerResult.EventId, isSynced));
                        }
                        else
                        {
                            _logger.Error(string.Format("AwvVisitId is null for CustomerId: {0} and EventId: {1}", eventCustomerResult.CustomerId, eventCustomerResult.EventId));
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(string.Format("System failure: For NursePractitionerId: {0}, CustomerId: {1} and EventId: {2}", eventCustomerResult.SignedOffBy.Value, eventCustomerResult.CustomerId, eventCustomerResult.EventId));
                        _logger.Error("Error Message: " + ex.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error("Exception occurred on execution of SendNotiificationToNursePractitionerPollingAgent.");
                _logger.Error("Error Message: " + ex.Message);
            }
        }
Ejemplo n.º 20
0
        public void PollForOutboundChase()
        {
            var outboundUploads = _outboundUploadRepository.GetAllUploadedFilesByType((long)OutboundUploadType.ChaseOutbound);

            if (outboundUploads == null || !outboundUploads.Any())
            {
                _logger.Info("No new files uploaded.");
                return;
            }

            var accountIds = _accountIds.Split(',');

            //var activityTypes = _activityTypeRepository.GetAll();

            foreach (var accountId in accountIds)
            {
                var account = _corporateAccountRepository.GetById(Convert.ToInt32(accountId));

                var fileLocation         = _mediaRepository.GetOutboundUploadMediaFileLocation(account.FolderName, "Chase");
                var archivedFileLocation = _mediaRepository.GetOutboundUploadMediaFileLocation(account.FolderName, "ChaseArchived");

                foreach (var outboundUpload in outboundUploads)
                {
                    try
                    {
                        var file = GetFile(outboundUpload.FileId);

                        if (!System.IO.File.Exists(fileLocation.PhysicalPath + file.Path))
                        {
                            _logger.Info("File not found : " + fileLocation.PhysicalPath + file.Path);
                            continue;
                        }

                        _logger.Info("Importing File : " + file.Path);

                        outboundUpload.StatusId       = (long)OutboundUploadStatus.Parsing;
                        outboundUpload.ParseStartTime = DateTime.Now;
                        _outboundUploadRepository.Save(outboundUpload);

                        DataTable table = _pipeDelimitedReportHelper.Read(fileLocation.PhysicalPath + file.Path);

                        if (table.Rows.Count <= 0)
                        {
                            _logger.Info("No rows found.");
                            outboundUpload.ParseEndTime = DateTime.Now;
                            outboundUpload.StatusId     = (long)OutboundUploadStatus.Parsed;
                            _outboundUploadRepository.Save(outboundUpload);
                            continue;
                        }

                        var csvStringBuilder = new StringBuilder();
                        csvStringBuilder.Append(LogHeader + Environment.NewLine);

                        var languages = _languageRepository.GetAll();
                        var labs      = _labRepository.GetAll();

                        var successRows = 0;
                        foreach (DataRow row in table.Rows)
                        {
                            var model    = GetChaseOutboundModel(row);
                            var errorRow = model.TenantId + "|" + model.ClientId + "|" + model.CampaignId + "|" + model.IndividualId + "|" + model.ContractNumber + "|" + model.ContractPersonNumber + "|" + model.ConsumerId;
                            try
                            {
                                if (!string.IsNullOrEmpty(model.HomeAddressState))
                                {
                                    try
                                    {
                                        var state = _stateRepository.GetStatebyCode(model.HomeAddressState) ?? _stateRepository.GetState(model.HomeAddressState);
                                        if (state != null)
                                        {
                                            model.HomeAddressState = state.Name;
                                        }
                                        else
                                        {
                                            csvStringBuilder.Append(errorRow + "|" + "Invalid Home_Addr_State" + Environment.NewLine);
                                            continue;
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        _logger.Error("Error importing data.");
                                        _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                                        csvStringBuilder.Append(errorRow + "|" + ex.Message + Environment.NewLine);
                                        continue;
                                    }
                                }

                                if (!string.IsNullOrEmpty(model.AddressState))
                                {
                                    try
                                    {
                                        var state = _stateRepository.GetStatebyCode(model.AddressState) ?? _stateRepository.GetState(model.AddressState);
                                        if (state != null)
                                        {
                                            model.AddressState = state.Name;
                                        }
                                        else
                                        {
                                            csvStringBuilder.Append(errorRow + "|" + "Invalid Addr_State" + Environment.NewLine);
                                            continue;
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        _logger.Error("Error importing data.");
                                        _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                                        csvStringBuilder.Append(errorRow + "|" + ex.Message + Environment.NewLine);
                                        continue;
                                    }
                                }

                                if (!string.IsNullOrEmpty(model.ProviderOfRecordAddressState))
                                {
                                    try
                                    {
                                        var state = _stateRepository.GetStatebyCode(model.ProviderOfRecordAddressState) ?? _stateRepository.GetState(model.ProviderOfRecordAddressState);
                                        if (state != null)
                                        {
                                            model.ProviderOfRecordAddressState = state.Name;
                                        }
                                        else
                                        {
                                            csvStringBuilder.Append(errorRow + "|" + "Invalid Provider_Addr_State" + Environment.NewLine);
                                            continue;
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        _logger.Error("Error importing data.");
                                        _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                                        csvStringBuilder.Append(errorRow + "|" + ex.Message + Environment.NewLine);
                                        continue;
                                    }
                                }

                                var chaseOutbound = _chaseOutboundFactory.Create(model);

                                var corporateCustomerEditModel = _chaseOutboundFactory.CreateCorporateCustomerEditModel(model);

                                var           createdBy = _organizationRoleUserRepository.GetOrganizationRoleUser(1);
                                StringBuilder sb        = new StringBuilder();

                                //var activityType = activityTypes.FirstOrDefault(x => x.Alias == corporateCustomerEditModel.Activity);

                                bool     isNewCustomer = false;
                                DateTime?dob           = null;

                                if (!string.IsNullOrEmpty(corporateCustomerEditModel.Dob))
                                {
                                    try
                                    {
                                        dob = Convert.ToDateTime(corporateCustomerEditModel.Dob);
                                    }
                                    catch (Exception ex)
                                    {
                                        throw new Exception("DOB is not in correct format. Please Provide in MM/DD/YYYY", ex);
                                    }
                                }

                                var customer = _customerRepository.GetCustomerForCorporate(corporateCustomerEditModel.FirstName, corporateCustomerEditModel.MiddleName,
                                                                                           corporateCustomerEditModel.LastName, corporateCustomerEditModel.Email, PhoneNumber.ToNumber(corporateCustomerEditModel.PhoneHome),
                                                                                           PhoneNumber.ToNumber(corporateCustomerEditModel.PhoneCell), dob, account.Tag, sb);

                                var updatedCustomer = _customerRegistrationService.RegisterCorporateCustomer(customer, corporateCustomerEditModel, account.Tag, createdBy, languages, labs,
                                                                                                             sb, (long)UploadActivityType.BothMailAndCall, null, out isNewCustomer);

                                chaseOutbound.CustomerId = updatedCustomer.CustomerId;

                                var address = new Address(model.AddressLine1, model.AddressLine2, model.AddressCity,
                                                          model.AddressState, model.AddressZipCode, "USA");


                                address = _addressService.SaveAfterSanitizing(address);
                                if (address.Id > 0)
                                {
                                    _customerRepository.UpdateBillingAddress(updatedCustomer.CustomerId, address.Id);
                                }
                                var customTags = model.CustomTags.Split(',');
                                if (customTags != null && customTags.Any() && updatedCustomer != null)
                                {
                                    foreach (var customTag in customTags)
                                    {
                                        _corporateCustomerCustomTagService.Save(new CorporateCustomerCustomTag
                                        {
                                            CustomerId           = updatedCustomer.CustomerId,
                                            IsActive             = true,
                                            Tag                  = customTag,
                                            DataRecorderMetaData = new DataRecorderMetaData(new OrganizationRoleUser(createdBy.Id), DateTime.Now, null)
                                        });
                                    }
                                }

                                if (!string.IsNullOrEmpty(model.RelationshipCode) || !string.IsNullOrEmpty(model.RelationshipDescription))
                                {
                                    var relationship = GetRelationship(model.RelationshipCode, model.RelationshipDescription);
                                    chaseOutbound.RelationshipId = relationship.Id;
                                }

                                chaseOutbound = _chaseOutboundRepository.Save(chaseOutbound);
                                // _chaseProductRepository.DeleteByCustomerId(chaseOutbound.CustomerId);

                                if (!string.IsNullOrEmpty(model.ProductLevel1))
                                {
                                    SaveChaseProduct(model.ProductLevel1, 1, chaseOutbound.CustomerId, chaseOutbound.Id);
                                }
                                if (!string.IsNullOrEmpty(model.ProductLevel2))
                                {
                                    SaveChaseProduct(model.ProductLevel2, 2, chaseOutbound.CustomerId, chaseOutbound.Id);
                                }
                                if (!string.IsNullOrEmpty(model.ProductLevel3))
                                {
                                    SaveChaseProduct(model.ProductLevel3, 3, chaseOutbound.CustomerId, chaseOutbound.Id);
                                }
                                if (!string.IsNullOrEmpty(model.ProductLevel4))
                                {
                                    SaveChaseProduct(model.ProductLevel4, 4, chaseOutbound.CustomerId, chaseOutbound.Id);
                                }
                                if (!string.IsNullOrEmpty(model.ProductLevel5))
                                {
                                    SaveChaseProduct(model.ProductLevel5, 5, chaseOutbound.CustomerId, chaseOutbound.Id);
                                }

                                // _chaseChannelLevelRepository.DeleteByCustomerId(chaseOutbound.CustomerId);

                                if (!string.IsNullOrEmpty(model.ChannelLevel2))
                                {
                                    SaveChaseChannel(model.ChannelLevel2, 2, chaseOutbound.CustomerId, chaseOutbound.Id);
                                }
                                if (!string.IsNullOrEmpty(model.ChannelLevel3))
                                {
                                    SaveChaseChannel(model.ChannelLevel3, 3, chaseOutbound.CustomerId, chaseOutbound.Id);
                                }

                                if (!string.IsNullOrEmpty(model.GroupName) || !string.IsNullOrEmpty(model.GroupNumber) || !string.IsNullOrEmpty(model.GroupDivision))
                                {
                                    var chaseGroup = GetChaseGroup(model.GroupName, model.GroupNumber, model.GroupDivision);
                                    chaseOutbound.ChaseGroupId = chaseGroup.Id;
                                }

                                if (string.IsNullOrEmpty(model.CampaignId) || string.IsNullOrEmpty(model.CampaignName))
                                {
                                    _logger.Info("Campaign Id/Name missing. Incomplete Data");

                                    /*csvStringBuilder.Append(errorRow + "|" + "Campaign Id/Name missing. Incomplete Data." + Environment.NewLine);
                                     * continue;*/
                                }
                                else
                                {
                                    SaveCampaign(model, chaseOutbound.CustomerId, chaseOutbound.Id);
                                }

                                if (!string.IsNullOrEmpty(model.ForecastedOutreachDate))
                                {
                                    try
                                    {
                                        chaseOutbound.ForecastedOutreachDate = Convert.ToDateTime(model.ForecastedOutreachDate);
                                    }
                                    catch (Exception)
                                    {
                                        csvStringBuilder.Append(errorRow + "|" + "Forecasted_Outreach_Date is not in correct format. Please Provide in MM/DD/YYYY" + Environment.NewLine);
                                        continue;
                                    }
                                }
                                if (!string.IsNullOrEmpty(model.RecordProcessDate))
                                {
                                    try
                                    {
                                        chaseOutbound.RecordProcessDate = Convert.ToDateTime(model.RecordProcessDate);
                                    }
                                    catch (Exception)
                                    {
                                        csvStringBuilder.Append(errorRow + "|" + "Record_Process_Date is not in correct format. Please Provide in MM/DD/YYYY" + Environment.NewLine);
                                        continue;
                                    }
                                }



                                successRows++;
                            }
                            catch (Exception ex)
                            {
                                _logger.Error("Error importing data.");
                                _logger.Error("Message: " + ex.Message + "\nStack Trace; " + ex.StackTrace);
                                csvStringBuilder.Append(errorRow + "|" + ex.Message + Environment.NewLine);
                            }
                        }

                        if (successRows < table.Rows.Count)
                        {
                            var logFileName = _pipeDelimitedReportHelper.GetReportName(ReportType.Exception);

                            var logFile = SaveLogFile(fileLocation.PhysicalPath + logFileName + ".txt", csvStringBuilder);
                            outboundUpload.LogFileId = logFile.Id;
                        }

                        outboundUpload.SuccessUploadCount = successRows;
                        outboundUpload.FailedUploadCount  = table.Rows.Count - successRows;
                        outboundUpload.ParseEndTime       = DateTime.Now;
                        outboundUpload.StatusId           = successRows > 0 ? (long)OutboundUploadStatus.Parsed : (long)OutboundUploadStatus.ParseFailed;
                        _outboundUploadRepository.Save(outboundUpload);

                        if (successRows > 1)
                        {
                            System.IO.File.Move(fileLocation.PhysicalPath + file.Path, archivedFileLocation.PhysicalPath + file.Path);
                            ((IFileRepository)_fileRepository).MarkasArchived(file.Id);
                        }
                    }
                    catch (Exception ex)
                    {
                        outboundUpload.StatusId = (long)OutboundUploadStatus.ParseFailed;
                        _outboundUploadRepository.Save(outboundUpload);
                        _logger.Error(string.Format("while Parsing File"));
                        _logger.Error("Ex Message" + ex.Message);
                        _logger.Error("Ex Stack Trace " + ex.StackTrace);
                    }
                }
            }
        }