Esempio n. 1
0
        public EventBasicInfoViewModel EventBasicInfoViewModel(IEnumerable <Host> hosts, Event theEvent, IEnumerable <Pod> pods, IEnumerable <EventAppointmentStatsModel> eventAppointmentStatsModels, IEnumerable <OrderedPair <long, long> > eventHpPairs, IEnumerable <Organization> organizations)
        {
            var eventModel = new EventBasicInfoViewModel();
            var host       = hosts.First(h => h.Id == theEvent.HostId);

            eventModel             = Mapper.Map <Event, EventBasicInfoViewModel>(theEvent);
            eventModel.HostAddress = Mapper.Map <Address, AddressViewModel>(host.Address);
            eventModel.HostName    = host.OrganizationName;
            eventModel.Pods        = pods != null
                ? pods.Where(p => theEvent.PodIds.Contains(p.Id))
                                     .Select(p => new OrderedPair <long, string>(p.Id, p.Name)).ToArray()
                : null;

            var eventAppointmentStatsModel =
                eventAppointmentStatsModels.Where(easm => easm.EventId == theEvent.Id).Select(easm => easm).Single();

            eventModel.TotalAppointmentSlots = eventAppointmentStatsModel.TotalSlots -
                                               eventAppointmentStatsModel.BlockedSlots;

            eventModel.FilledAppintmentSlots = eventAppointmentStatsModel.BookedSlots;
            eventModel.BookedSlots           = eventAppointmentStatsModel.FilledSlots;

            eventModel.IsDynamicScheduling = eventAppointmentStatsModel.IsDynamicScheduling;

            eventModel.AfternoonAvailableSlots = eventAppointmentStatsModel.AfternoonAvailableSlots;
            eventModel.MorningAvailableSlots   = eventAppointmentStatsModel.MorningAvailableSlots;
            eventModel.EveningAvailableSlots   = eventAppointmentStatsModel.EveningAvailableSlots;

            var sponsor = string.Empty;

            if (eventHpPairs != null && eventHpPairs.Any())
            {
                var hospitalPartnerId =
                    eventHpPairs.Where(o => o.FirstValue == theEvent.Id).Select(o => o.SecondValue).FirstOrDefault();
                if (hospitalPartnerId > 0)
                {
                    sponsor = organizations.Where(o => o.Id == hospitalPartnerId).Select(o => o.Name).First();
                }
            }

            if (string.IsNullOrEmpty(sponsor))
            {
                if (theEvent.AccountId.HasValue && theEvent.AccountId.Value > 0)
                {
                    sponsor = organizations.Where(o => o.Id == theEvent.AccountId.Value).Select(o => o.Name).First();
                }
            }

            eventModel.Sponsor = sponsor;
            return(eventModel);
        }
        public EventCustomerSummaryModel Create(EventCustomer eventCustomer, Order order, EventBasicInfoViewModel eventInfo, Customer customer, DateTime?apptTime, IEnumerable <OrderedPair <long, string> > orderPackageNamePair,
                                                IEnumerable <OrderedPair <long, string> > orderTestNamePair, IEnumerable <OrderedPair <long, string> > orderitemProductPair, IEnumerable <ShippingDetail> shippingDetails, IEnumerable <SourceCode> sourceCodes, IEnumerable <ChargeCard> cards)
        {
            string package = "";

            if (orderPackageNamePair != null && orderPackageNamePair.Count() > 0)
            {
                package = orderPackageNamePair.FirstOrDefault().SecondValue;
            }
            if (orderTestNamePair != null && orderTestNamePair.Count() > 0)
            {
                var tests = string.Join(",", orderTestNamePair.Select(ot => ot.SecondValue));
                package = !string.IsNullOrEmpty(package) ? package + ", " + tests : tests;
            }

            var getCardDetailstoDisplay = new Func <long, string>(cardId =>
            {
                return(cards.Where(c => c.Id == cardId).Select(
                           c =>
                           c.TypeId.ToString() + " " +
                           c.Number.Substring(c.Number.Length - 4, 4)).FirstOrDefault());
            });

            var payments = order.PaymentsApplied != null
                               ? order.PaymentsApplied.Select(
                pa => new OrderedPair <string, decimal>(pa.PaymentType == PaymentType.CreditCard ? getCardDetailstoDisplay(((ChargeCardPayment)pa).ChargeCardId) : pa.PaymentType.ToString(), pa.Amount))
                               : null;

            var sourceCodeOrderDetail =
                order.OrderDetails.Where(
                    od =>
                    od.SourceCodeOrderDetail != null &&
                    od.OrderItemStatus.OrderStatusState == OrderStatusState.FinalSuccess).Select(od => od.SourceCodeOrderDetail).FirstOrDefault();

            var sourceCode = sourceCodes != null && sourceCodes.Count() > 0
                                 ? sourceCodes.FirstOrDefault() : null;

            return(new EventCustomerSummaryModel()
            {
                AdditionalProduct =
                    orderitemProductPair != null
                                   ? String.Join(", ", orderitemProductPair.Select(oip => oip.SecondValue))
                                   : "",
                Address = eventInfo.HostAddress,
                AmountDue = order.DiscountedTotal - order.TotalAmountPaid,
                AmountPaid = order.TotalAmountPaid,
                Cost = order.UndiscountedTotal,
                AppointmentTime = apptTime,
                CustomerId = eventCustomer.CustomerId,
                CustomerName = customer.NameAsString,
                HomePhoneNumber = customer.HomePhoneNumber != null?customer.HomePhoneNumber.ToString() : "",
                                      OfficePhoneNumber = customer.OfficePhoneNumber != null?customer.OfficePhoneNumber.ToString() : "",
                                                              CellPhoneNumber = customer.MobilePhoneNumber != null?customer.MobilePhoneNumber.ToString() : "",
                                                                                    Email = customer.Email != null?customer.Email.ToString() : "",
                                                                                                EventCustomerId = eventCustomer.Id,
                                                                                                EventDate = eventInfo.EventDate,
                                                                                                EventId = eventCustomer.EventId,
                                                                                                Host = eventInfo.HostName,
                                                                                                OrderId = order.Id,
                                                                                                Package = package,
                                                                                                Payments = payments,
                                                                                                ShippingOptions =
                                                                                                    shippingDetails != null
                                   ? shippingDetails.Select(
                                                                                                        sd => new OrderedPair <string, decimal>(sd.ShippingOption.Name, sd.ActualPrice))
                                   : null,
                                                                                                SourceCode = sourceCode != null ? sourceCode.CouponCode : "",
                                                                                                SourceCodeAmount = sourceCodeOrderDetail != null ? sourceCodeOrderDetail.Amount : 0,
                                                                                                EventStatus = eventInfo.Status
            });
        }