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)); } }
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); }
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); } }
public decimal GetTotalCostToBePaid(SubscriberBl subscriber) { return(GetTotalCostOfConnections(subscriber) + GetTotalCostOfTextMessages(subscriber) + GetTotalCostBasedOnOffers(subscriber)); }
public decimal GetTotalCostBasedOnOffers(SubscriberBl subscriber) { return(subscriber.Phones.Select(p => p.Offer).Select(o => o.PriceOfTheOffer).Sum()); }
public decimal GetTotalCostOfTextMessages(SubscriberBl subscriber) { return(subscriber.Phones.Select(p => p.CostOfMessagesOutsideBundle).Sum()); }
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}"); }
public async Task AddSubscriberAsync(SubscriberBl subscriberBl) { await _subscriberService.AddSubscriberAsync(subscriberBl); }