public DateTime GetDateOfPreviousInvoice(SubscriberBl subscriberBl)
        {
            DateTime dateOfPreviousInvoice;

            using (var dbContext = _dbContextFactory())
            {
                if (!dbContext.InvoiceDbSet.Any(i => i.Subscriber.Id == subscriberBl.Id))
                {
                    if (dbContext.PhoneDbSet.Where(p => p.Subscriber.Id == subscriberBl.Id).SelectMany(c => c.Connections).Count() != 0)
                    {
                        return(dateOfPreviousInvoice = dbContext.PhoneDbSet
                                                       .Where(p => p.Subscriber.Id == subscriberBl.Id)
                                                       .Select(p => p.Connections
                                                               .Min(c => c.DateOfBeginning)).Min());
                    }
                    return(dateOfPreviousInvoice = DateTime.Now);
                }
                dateOfPreviousInvoice = dbContext.InvoiceDbSet
                                        .Where(i => i.Subscriber.Id == subscriberBl.Id)
                                        .OrderByDescending(i => i.GenerationDate)
                                        .First().GenerationDate;
            }

            return(dateOfPreviousInvoice);
        }
        public string GenerateInvoiceNumber(SubscriberBl subscriberBl)
        {
            var numberOfInvoices = GetAll().Select(i => i.Subscriber).Where(s => s.Id == subscriberBl.Id).Count();

            numberOfInvoices++;

            return(String.Format($"FV_{subscriberBl.Id:D4}_{numberOfInvoices:D4}"));
        }
        public SubscriberBl Capture()
        {
            var newSubscriber = new SubscriberBl
            {
                Name         = _ioHelper.GetStringFromUser("Enter the name of the subscriber: "),
                Surname      = _ioHelper.GetStringFromUser("Enter the surname of the subscriber: "),
                DateOfBirth  = _ioHelper.GetDateOfBirthFromUser("Enter the birth date of the subscriber in the following format: 'dd-mm-yyyy': "),
                Email        = _subscriberService.CheckEmail(_ioHelper.GetStringFromUser("Enter the email (e.g. [email protected]): ")),
                BillingCycle = _subscriberService.ChooseLeastCountedBillingCycle()
            };

            return(newSubscriber);
        }
        public Subscriber MapSubscriberBlToSubscriber(SubscriberBl subscriberBl)
        {
            var subscriber = new Subscriber
            {
                Id           = subscriberBl.Id,
                Name         = subscriberBl.Name,
                Surname      = subscriberBl.Surname,
                DateOfBirth  = subscriberBl.DateOfBirth,
                BillingCycle = subscriberBl.BillingCycle,
                Email        = subscriberBl.Email,
                Phones       = MapPhonesBlListToPhonesList(subscriberBl.Phones)
            };

            return(subscriber);
        }
        public async Task <HttpResponseMessage> AddSubscriberAsync([FromBody] SubscriberBl subscriber)
        {
            try
            {
                subscriber.BillingCycle = await Task.Run(() => _subscriberService.ChooseLeastCountedBillingCycle());

                var subscriberId = await _subscriberService.AddSubscriberAsync(subscriber);

                return(Request.CreateResponse(HttpStatusCode.OK, subscriberId));
            }
            catch (Exception e)
            {
                var message = $"failed adding new subscriber. {e.Message}";
                return(Request.CreateResponse(HttpStatusCode.NotFound, message));
            }
        }
Esempio n. 6
0
        public InvoiceBl Capture(SubscriberBl subscriber, List <PhoneReportBl> reportsBl)
        {
            var newInvoice = new InvoiceBl
            {
                BeginningDate           = _invoiceService.GetDateOfPreviousInvoice(subscriber),
                GenerationDate          = DateTime.Now,
                Number                  = _invoiceService.GenerateInvoiceNumber(subscriber),
                Subscriber              = subscriber,
                TotalCostOfConnections  = _reportService.GetTotalCostOfConnections(subscriber),
                TotalCostOfTextMessages = _reportService.GetTotalCostOfTextMessages(subscriber),
                TotalOffersCost         = _reportService.GetTotalCostBasedOnOffers(subscriber),
                TotalCostToBePaid       = _reportService.GetTotalCostToBePaid(subscriber),
                PhoneReports            = reportsBl
            };

            return(newInvoice);
        }
        public SubscriberBl MapSubscriberToSubscriberBl(Subscriber subscriber)
        {
            var subscriberBl = new SubscriberBl
            {
                Id           = subscriber.Id,
                Name         = subscriber.Name,
                Surname      = subscriber.Surname,
                DateOfBirth  = subscriber.DateOfBirth,
                BillingCycle = subscriber.BillingCycle,
                Email        = subscriber.Email
            };

            if (subscriber.Phones != null)
            {
                subscriberBl.Phones = MapPhonesListToPhonesBlList(subscriber.Phones);
            }

            return(subscriberBl);
        }
Esempio n. 8
0
        public async Task <int> AddSubscriberAsync(SubscriberBl subscriberBl)
        {
            var subscriber = _dataObjectMapper.MapSubscriberBlToSubscriber(subscriberBl);

            using (var dbContext = _dbContextFactory())
            {
                if (await dbContext.SubscriberDbSet.AnyAsync(s => s.Surname == subscriber.Surname && s.DateOfBirth == subscriber.DateOfBirth))
                {
                    throw new Exception("There is already a subscriber with given data");
                }

                await Task.Run(() =>
                {
                    dbContext.SubscriberDbSet.Add(subscriber);
                    dbContext.SaveChanges();
                });

                return(subscriber.Id);
            }
        }
Esempio n. 9
0
 public decimal GetTotalCostToBePaid(SubscriberBl subscriber)
 {
     return(GetTotalCostOfConnections(subscriber)
            + GetTotalCostOfTextMessages(subscriber)
            + GetTotalCostBasedOnOffers(subscriber));
 }
Esempio n. 10
0
 public decimal GetTotalCostBasedOnOffers(SubscriberBl subscriber)
 {
     return(subscriber.Phones.Select(p => p.Offer).Select(o => o.PriceOfTheOffer).Sum());
 }
Esempio n. 11
0
 public decimal GetTotalCostOfTextMessages(SubscriberBl subscriber)
 {
     return(subscriber.Phones.Select(p => p.CostOfMessagesOutsideBundle).Sum());
 }
Esempio n. 12
0
 public decimal GetTotalCostOfConnections(SubscriberBl subscriber)
 {
     return(subscriber.Phones.Select(p => p.CostOfConnectionsOutsideBundle).Sum());
 }
 public InvoiceBl CaptureInvoice(SubscriberBl subscriber, List <PhoneReportBl> reportsBl)
 {
     return(_invoiceDataCapture.Capture(subscriber, reportsBl));
 }
 public void DisplaySubscriber(SubscriberBl subscriber)
 {
     _ioHelper.PrintMessage($"Name of the subscriber: {subscriber.Name} {Environment.NewLine}" +
                            $"Surname of the subscriber: {subscriber.Surname} {Environment.NewLine}" +
                            $"Date of birth of the subscriber: {subscriber.DateOfBirth.ToShortDateString()} {Environment.NewLine}");
 }
Esempio n. 15
0
 public async Task AddSubscriberAsync(SubscriberBl subscriberBl)
 {
     await _subscriberService.AddSubscriberAsync(subscriberBl);
 }