public ValueTuple <IContract, ITerminal> SignContract(ITariffPlan tariffPlan, IClient client = null) // TODO clientId optional parameter and return contract with terminal. { var output = new ValueTuple <IContract, ITerminal>(); if (client == null) // TODO Register client { client = new ClientModel(); Clients.Add(client); } // Create random number var phoneNumber = GeneratePhoneNumber(); // Register user at random station. var station = Stations.ToList()[new Random().Next(0, Stations.Count - 1)]; var terminal = new Terminal.Terminal(); var port = station.ConnectTerminal(terminal); port.ConnectTerminal(terminal); station.AddPort(port); var contract = new ContractModel(tariffPlan, this, phoneNumber, port.Id, station.Id); terminal.Number = contract.PhoneNumber; Clients.Add(client); output.Item1 = contract; output.Item2 = terminal; return(output); }
/// <summary> /// Adds the contract. /// </summary> /// <param name="id">The identifier.</param> /// <param name="phoneNumber">The phone number.</param> /// <param name="tariffPlan">The tariff plan.</param> public void AddContract(string id, string phoneNumber, ITariffPlan tariffPlan) { IContract contract = new Contract(id, phoneNumber); contract.ChangeTariff(tariffPlan); Contracts.Add(contract); }
//public int PhoneNumber { get; private set; } public SimpleContractForPerson(int contracrNum, ITariffPlan plan, int phoneNumber, string firstName, string lastName, DateTime dateOfBirth, string passportNumber) : base(contracrNum, plan, phoneNumber) { FirstName = firstName; LastName = lastName; DateOfBirth = dateOfBirth; PassportNumber = passportNumber; }
public Contract(ICompany company, IClient client, DateTime dateCreate, ITariffPlan tariffPlan) { Company = company; Client = client; DateCreate = dateCreate; TariffPlan = tariffPlan; }
public ContractModel(ITariffPlan tariffPlan, IOperator telephoneOperator, int phoneNumber, Guid portId, Guid stationId) : this() { Id = Guid.NewGuid(); TariffPlan = tariffPlan; PhoneNumber = phoneNumber; PortId = portId; StationId = stationId; }
public Contract(IUser client, ITariffPlan tariffPlan, PhoneNumber number) { ContractStartDate = DateTime.Now; Client = client; TariffPlan = tariffPlan; Account = new Account(tariffPlan.FreeMinutes); Number = number; }
public bool ChangeTariffPlan(ITariffPlan newPlan) { if ((DateTime.Today - Plan.Keys.Last()).Days > DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month)) { Plan.Add(DateTime.Today, newPlan); return(true); } return(false); }
public ReportCalls(IClient client, string reportPeriod, ITariffPlan tariffPlan, decimal durationOfConversations, decimal currentMoney, decimal totalSummCollect, IList <IClientLog> clientLogs) { Client_ = client; ReportPeriod = reportPeriod; TariffPlan_ = tariffPlan; DurationOfConversations = durationOfConversations; CurrentMoney = currentMoney; TotalSummCollect = totalSummCollect; Logs.AddRange(clientLogs); }
public bool ChangeTariffPlan(Subscribers subscriber, ITariffPlan newPlan) { ContractHead subsContract; Contracts.TryGetValue(subscriber.Contract.ContractNumber, out subsContract); if (subsContract.ChangeTariffPlan(newPlan)) { return(true); } return(false); }
public TestTerminal(PhoneNumber number, ITariffPlan tariffPlan) : base(number, tariffPlan) { State = TerminalState.Free; IncomingRequest += OnIncomingRequest; OutgoingCall += (sender, info) => { Console.WriteLine($"Phone : {((Terminal) sender).Number.Number} call to {info.Target.Number}"); }; Online += (sender, args) => { Console.WriteLine($"Phone {((Terminal) sender).Number.Number} now Online"); }; Offline += (sender, args) => { Console.WriteLine($"Phone {((Terminal) sender).Number.Number} now offline"); }; }
/// <summary> /// Changes the tariff. /// </summary> /// <param name="newTariff">The new tariff.</param> /// <returns></returns> public bool ChangeTariff(ITariffPlan newTariff) { TariffPlanRecord currentTariffRecord = _tariffPlanHistory.LastOrDefault(); if (currentTariffRecord != null) { if (currentTariffRecord.StartDate.Year == StaticTime.CurrentTime.Year && currentTariffRecord.StartDate.Month == StaticTime.CurrentTime.Month) { return(false); } currentTariffRecord.EndDate = StaticTime.CurrentTime; } TariffPlanRecord newTariffRecord = new TariffPlanRecord(); newTariffRecord.TariffPlan = newTariff; newTariffRecord.StartDate = StaticTime.CurrentTime; _tariffPlanHistory.Add(newTariffRecord); return(true); }
public ITerminal ConcludeContract(ITariffPlan tariffPlan) { if (_TariffPlans.Select(x => tariffPlan.GetType()).Contains(tariffPlan.GetType())) { var phoneNumber = new PhoneNumber(_NumberCode + _Number.ToString()); _Number++; var dateTime = LocalDateTime.Now; var newContract = new Contract(phoneNumber, tariffPlan.GetNewInstance(), dateTime); _CurrentContracts.Add(newContract); _LastPayment.Add(phoneNumber, dateTime); var newTerminal = new Terminal(phoneNumber, _Logger); _Logger.WriteToLog("-> Billing system conclude contract"); _Logger.WriteToLog(ObjectToLogString.ToLogString(newContract)); OnContract(this, newTerminal); return(newTerminal); } return(null); }
public void AcceptClientTerminalAndPort(IClientTerminal terminal, IPort port, ITariffPlan tariffPlan) { if (terminal.Rent != true) { terminal.Rent = true; ClientTerminal = terminal; TariffPlan = tariffPlan; } else { throw new Exception("Данный терминал уже выдан другому клиенту"); } if (port.Rent != true) { port.Rent = true; Port = port; } else { throw new Exception("Данный порт уже предоставлен другому клиенту"); } }
public bool ChangeTariffPlan(PhoneNumber phoneNumber, ITariffPlan tariffPlan) { if (_TariffPlans.Select(x => tariffPlan.GetType()).Contains(tariffPlan.GetType())) { var dateTime = LocalDateTime.Now; _Logger.WriteToLog("-> User with number " + phoneNumber.GetValue + " want change tariff " + dateTime.ToShortDateString()); var currentContract = _CurrentContracts.SingleOrDefault(x => x.Number == phoneNumber); if (currentContract != null && currentContract.Date.Month != dateTime.Month) { var newContract = new Contract(phoneNumber, tariffPlan, dateTime); _CurrentContracts.Remove(currentContract); _OldContracts.Add(currentContract); _CurrentContracts.Add(newContract); _Logger.WriteToLog("Tariff changed on " + tariffPlan.Name); return(true); } } _Logger.WriteToLog("Tariff was not changed"); return(false); }
public bool ChangeTariffPlan(PhoneNumber phoneNumber, ITariffPlan tariffPlan) { if (_TariffPlans.Select(x => tariffPlan.GetType()).Contains(tariffPlan.GetType())) { var dateTime = LocalDateTime.Now; _Logger.WriteToLog("-> User with number " + phoneNumber.GetValue + " want change tariff " + dateTime.ToShortDateString()); var currentContract = _CurrentContracts.SingleOrDefault(x => x.Number == phoneNumber); if (currentContract != null && currentContract.Date.Month != dateTime.Month) { var newContract = new Contract(phoneNumber, tariffPlan, dateTime); _CurrentContracts.Remove(currentContract); _OldContracts.Add(currentContract); _CurrentContracts.Add(newContract); _Logger.WriteToLog("Tariff changed on " + tariffPlan.Name); return true; } } _Logger.WriteToLog("Tariff was not changed"); return false; }
protected Terminal(PhoneNumber number, ITariffPlan tariffPlan) { Number = number; TariffPlan = tariffPlan; }
public bool ChangeTariffPlan(ITariffPlan newPlan) { return(false); }
public IContract GetContract(ITariffPlan tariffPlan, int phoneNumber) { return(new Contract(tariffPlan, phoneNumber)); }
public ITerminal GetContract(IUser user, ITariffPlan tariffPlan) { var terminal = new TestTerminal(new PhoneNumber((10000 + _id).ToString()), tariffPlan); _id++; _userTariffPlansMapp.Add(user, tariffPlan); UserCallinfoDictionary.Add(user, new List<CallInfo>()); _terminalsUserMapp.Add(terminal, user); var date = TimeHelper.Now; _userRegistryDateTimeMapp.Add(user, date); UserPayDateTime.Add(user, date); OnToSignСontract(terminal); return terminal; }
public void AddNewTariffPlan(ITariffPlan tariffPlan) { TariffPlans.Add(tariffPlan); }
public ContractHead(int contractNumber, ITariffPlan plan, int phoneNum) { ContractNumber = contractNumber; Plan.Add(DateTime.Today, plan); PhoneNumber = phoneNum; }
public Contract(PhoneNumber number, ITariffPlan tariffPlan, DateTime date) { this.Number = number; this.TariffPlan = tariffPlan; this.Date = date; }
public PersonContract(int contracrNum, PersonSubscriber client, ITariffPlan plan, List <int> phoneNums) { Subscriber = client; PhoneNumbers.AddRange(phoneNums); Plan.Add(DateTime.Today, plan); }
static void Main(string[] args) { #region Initialization var manager = Configuration.GetManager(new DependencyManager()); ITariffPlan tariffPlan = manager.GetTariffPlan(0.5m); IContract contractA1 = manager.GetContract(tariffPlan, phoneNumber: 37544); IContract contractMTS = manager.GetContract(tariffPlan, phoneNumber: 37529); IContract contractLife = manager.GetContract(tariffPlan, phoneNumber: 37525); IViewable view = manager.GetView(); IList <IPort> ports = new List <IPort>() { manager.GetPort(), manager.GetPort(), manager.GetPort() }; IList <ITerminal> terminals = new List <ITerminal>() { manager.GetTerminal(view), manager.GetTerminal(view), manager.GetTerminal(view) }; IBilling billingSystem = manager.GetBillingSystem( new List <IContract>() { contractA1, contractLife, contractMTS }); IAts ats = manager.GetAts(terminals, ports, billingSystem); ISubscriber johnSmith = ats.ConcludeContractWith(new Person("John", "Smith")); ISubscriber tomasAnderson = ats.ConcludeContractWith(new Person("Tomas", "Anderson")); ISubscriber pifiaOracle = ats.ConcludeContractWith(new Person("Pifia", "Oracle")); #endregion #region 1. not enough funds in the account view.Show("1. not enough funds in the account"); johnSmith.Call(37529); view.Show(LineSeparator); #endregion #region Add cash to the account view.Show("Add cash to the account"); johnSmith.AccountMoney = CashToAccount; view.Show(LineSeparator); #endregion #region 2. on target number not enough funds in the account view.Show("2. on target number not enough funds in the account"); johnSmith.Call(37529); view.Show(LineSeparator); #endregion #region Add cash to the accounts view.Show($"Add cash to the accounts ({tomasAnderson.FullName},{pifiaOracle.FullName})"); tomasAnderson.AccountMoney = CashToAccount; pifiaOracle.AccountMoney = CashToAccount; view.Show(LineSeparator); #endregion #region 3. Call allowed between johnSmith and pifiaOracle view.Show($"3. Call allowed between {johnSmith.FullName} and {pifiaOracle.FullName}"); johnSmith.Call(37529); pifiaOracle.Answer(); // tomasAnderson call to pifiaOracle view.Show(LineSeparator); #endregion #region 4. tomasAnderson call to the pifiaOracle but pifiaOracle is busy view.Show($"4. {tomasAnderson.FullName} call to the {pifiaOracle.FullName}"); tomasAnderson.Call(pifiaOracle); view.Show(LineSeparator); pifiaOracle.Reject(); view.Show(LineSeparator); #endregion #region 5. tomasAnderson call to the pifiaOracle second attempt (drop call) view.Show($"5. {tomasAnderson.FullName} call to the {pifiaOracle.FullName}"); tomasAnderson.Call(pifiaOracle); pifiaOracle.Drop(); view.Show(LineSeparator); #endregion #region 6. tomasAnderson call to the pifiaOracle third attempt (answer call) view.Show($"6. {tomasAnderson.FullName} call to the {pifiaOracle.FullName}"); tomasAnderson.Call(pifiaOracle); pifiaOracle.Answer(); tomasAnderson.Reject(); view.Show(LineSeparator); #endregion #region 7. tomasAnderson call to the pifiaOracle third attempt (answer call again) view.Show($"7. {tomasAnderson.FullName} call to the {pifiaOracle.FullName}"); tomasAnderson.Call(pifiaOracle); pifiaOracle.Answer(); pifiaOracle.Reject(); view.Show(LineSeparator); #endregion #region Billing system work view.Show("Get subscriber by number "); view.Show(billingSystem.GetSubscriberBy(37429)); view.Show(LineSeparator); view.Show("Get all calls with subscriber"); view.Show(pifiaOracle); view.Show(billingSystem.GetAllCallsOrderedByDuraction(pifiaOracle)); view.Show(LineSeparator); view.Show("Get all subscribers in coming call"); view.Show(billingSystem.GetAllSubscriberInComingCalls(pifiaOracle)); view.Show(LineSeparator); #endregion view.Stop(); }
public ITerminal ConcludeContract(ITariffPlan tariffPlan) { if (_TariffPlans.Select(x => tariffPlan.GetType()).Contains(tariffPlan.GetType())) { var phoneNumber = new PhoneNumber(_NumberCode + _Number.ToString()); _Number++; var dateTime = LocalDateTime.Now; var newContract = new Contract(phoneNumber, tariffPlan.GetNewInstance(), dateTime); _CurrentContracts.Add(newContract); _LastPayment.Add(phoneNumber, dateTime); var newTerminal = new Terminal(phoneNumber, _Logger); _Logger.WriteToLog("-> Billing system conclude contract"); _Logger.WriteToLog(ObjectToLogString.ToLogString(newContract)); OnContract(this, newTerminal); return newTerminal; } return null; }
public void SetNewTariffPlan(IUser user, ITariffPlan tariffPlan) { var contractDate = GetContracDateTime(user); if (contractDate > TimeHelper.Now) { _userTariffPlansMapp.Remove(user); _userTariffPlansMapp.Add(user, tariffPlan); _userRegistryDateTimeMapp.Remove(user); _userRegistryDateTimeMapp.Add(user, TimeHelper.Now); } else { Console.WriteLine("Month has not yet passed"); } }
public Contract(ITariffPlan tariffPlan, int phoneNumber) { TariffPlan = tariffPlan; PhoneNumber = phoneNumber; }
public Billing(ITariffPlan tariffPlan) { TariffPlan = tariffPlan; outgoingСalls = new List <OutgoingСall>(); Abonents = new HashSet <AbonentInfo>(); }