Beispiel #1
0
        public Core.Finance.Domain.Order GetOrder(long orderId)
        {
            OrderEntity orderEntity;

            using (var myAdapter = PersistenceLayer.GetDataAccessAdapter())
            {
                var linqMetaData = new LinqMetaData(myAdapter);
                try
                {
                    orderEntity = linqMetaData.Order.Single(o => o.OrderId == orderId);
                }
                catch (NotSupportedException)
                {
                    throw new ObjectNotFoundInPersistenceException <Core.Finance.Domain.Order>(orderId);
                }
            }
            List <OrderDetail> orderDetails = _orderDetailRepository.GetOrderDetailsForOrder(orderId);
            IEnumerable <PaymentInstrument> paymentsApplied = _paymentInstrumentRepository.GetByOrderId
                                                                  (orderId);

            Core.Finance.Domain.Order order = _mapper.Map(orderEntity);
            order.OrderDetails    = orderDetails;
            order.PaymentsApplied = paymentsApplied.ToList();

            // TODO: This has to be moved to each payment instrument repository.
            // HACK: This is done to fetch datarecorder metadata for the payments made for this order.
            var payments = _paymentRepository.GetByOrderId(order.Id);

            order.PaymentsApplied.ForEach(
                pa => pa.DataRecorderMetaData = payments.Single(p => p.Id == pa.PaymentId).DataRecorderMetaData);

            return(order);
        }
        public void GetForOrderReturnsExpectedNumberOfPaymentInstrumentsForOrder()
        {
            const int expectedPaymentInstrumentCount = 2;

            IEnumerable <PaymentInstrument> paymentInstruments = _repository.GetByOrderId(3);

            Assert.AreEqual(expectedPaymentInstrumentCount, paymentInstruments.Count());
        }
Beispiel #3
0
        public IEnumerable <PaymentViewData> GetPaymentDetailViewData(long orderId)
        {
            var paymentInstruments = _combinedPaymentInstrumentRepository.GetByOrderId(orderId).ToList();

            // TODO: This has to be moved to each payment instrument repository.
            // HACK: This is done to fetch datarecorder metadata.
            IPaymentRepository paymentRepository = new PaymentRepository();
            var payments = paymentRepository.GetByOrderId(orderId);

            if (payments != null && paymentInstruments != null && !payments.IsEmpty() && !paymentInstruments.IsEmpty())
            {
                paymentInstruments.ForEach(
                    pi => pi.DataRecorderMetaData = payments.Single(p => p.Id == pi.PaymentId).DataRecorderMetaData);
            }

            IPaymentViewDataFactory paymentViewDataFactory = new PaymentViewDataFactory();
            var paymentDetailViewDataList = new List <PaymentViewData>();

            foreach (var paymentInstrument in paymentInstruments)
            {
                paymentDetailViewDataList.Add(paymentViewDataFactory.Create(paymentInstrument));
            }
            return(paymentDetailViewDataList);
        }
 public IEnumerable <PaymentInstrument> GetPaymentInstrumentsForOrder(long orderId)
 {
     return(_combinedPaymentInstrumentRepository.GetByOrderId(orderId));
 }
Beispiel #5
0
        public void PollForInsuranceClaim()
        {
            _logger.Info("\n");
            _logger.Info(string.Format("Creating Claims. Date: {0:MM/dd/yyyy}", DateTime.Now));
            _logger.Info("\n");

            try
            {
                var billingAccounts = _billingAccountRepository.GetAll();
                if (billingAccounts == null || !billingAccounts.Any())
                {
                    _logger.Info("No billing account has been setup");
                }
                foreach (var billingAccount in billingAccounts)
                {
                    var eventCustomers = _eventCustomerRepository.GetEventCustomersForInsuranceClaim(_settings.DaysAfterGetClaim, billingAccount.Id);

                    if (eventCustomers == null || !eventCustomers.Any())
                    {
                        _logger.Info("No Records Found!");
                        continue;
                    }

                    var eventCustomerEncounters = _encounterRepository.GetEventCustomerEncounterByEventCustomerIds(eventCustomers.Select(ec => ec.Id).ToArray());


                    var eventIds = eventCustomers.Select(ec => ec.EventId).Distinct().ToArray();

                    var events = _eventRepository.GetByIds(eventIds);

                    foreach (var eventId in eventIds)
                    {
                        var eventData     = events.First(e => e.Id == eventId);
                        var claimResponse = _kareoApi.GetClaim(billingAccount, 32090, eventData.EventDate);//eventId
                        if (claimResponse == null || claimResponse.Charges == null || !claimResponse.Charges.Any())
                        {
                            _logger.Info(string.Format("No Claims for Event (Id:{0})", eventId));
                            continue;
                        }

                        var eventCustomersData = eventCustomers.Where(ec => ec.EventId == eventId).Select(ec => ec).ToArray();
                        foreach (var eventCustomer in eventCustomersData)
                        {
                            var eventCustomerEncounter = eventCustomerEncounters.First(ece => ece.EventCustomerId == eventCustomer.Id);
                            var chargeData             = claimResponse.Charges.Where(c => c.EncounterID == eventCustomerEncounter.EncounterId.ToString()).Select(c => c).ToArray();

                            if (chargeData == null || !chargeData.Any())
                            {
                                _logger.Info(string.Format("No Claims for Event (Id:{0}) and Customer (Id:{1}) ", eventId, eventCustomer.CustomerId));
                                continue;
                            }

                            var orderId          = _orderRepository.GetOrderIdByEventCustomerId(eventCustomer.Id);
                            var paymentsApplied  = _paymentInstrumentRepository.GetByOrderId(orderId);
                            var insurancePayment = paymentsApplied.Where(pi => pi.PaymentType == PaymentType.Insurance).Select(pi => pi).SingleOrDefault();
                            if (insurancePayment == null)
                            {
                                _logger.Info(string.Format("No Insurance payment for Event (Id:{0}) and Customer (Id:{1}) ", eventId, eventCustomer.CustomerId));
                                continue;
                            }
                            decimal amount = 0m;
                            foreach (var charge in chargeData)
                            {
                                var claim = new Claim
                                {
                                    Id                 = Convert.ToInt64(charge.ID),
                                    EncounterId        = Convert.ToInt64(charge.EncounterID),
                                    BillingPatientId   = Convert.ToInt64(charge.PatientID),
                                    InsurancePaymentId = insurancePayment.Id,
                                    ProcedureCode      = charge.ProcedureCode,
                                    ProcedureName      = charge.ProcedureName,
                                    Units              = Convert.ToInt32(Convert.ToDecimal(charge.Units)),
                                    TotalCharges       = Convert.ToDecimal(charge.TotalCharges),
                                    AdjustedCharges    = Convert.ToDecimal(charge.AdjustedCharges),
                                    Receipts           = Convert.ToDecimal(charge.Receipts),
                                    PatientBalance     = Convert.ToDecimal(charge.PatientBalance),
                                    InsuranceBalance   = Convert.ToDecimal(charge.InsuranceBalance),
                                    TotalBalance       = Convert.ToDecimal(charge.TotalBalance),
                                    Status             = charge.Status,
                                    DateCreated        = DateTime.Now,
                                    //FirstBillDate = Convert.ToDateTime(charge.PatientFirstBillDate),
                                    //LastBillDate = Convert.ToDateTime(charge.PatientLastBillDate)
                                };
                                //TODO:Save Claim
                                _claimRepository.Save(claim);
                                amount += claim.TotalCharges - claim.TotalBalance;
                            }
                            //TODO:Update Insurance payment
                            insurancePayment.Amount = amount;
                            _paymentInstrumentRepository.SavePaymentInstrument(insurancePayment);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("Error while fetching event customers Message:{0} \nStackTrace: {1}", ex.Message, ex.StackTrace));
                _logger.Info("\n");
            }
        }