Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        //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;
        }
Exemple #4
0
 public Contract(ICompany company, IClient client, DateTime dateCreate, ITariffPlan tariffPlan)
 {
     Company    = company;
     Client     = client;
     DateCreate = dateCreate;
     TariffPlan = tariffPlan;
 }
Exemple #5
0
 public ContractModel(ITariffPlan tariffPlan, IOperator telephoneOperator, int phoneNumber, Guid portId, Guid stationId) : this()
 {
     Id          = Guid.NewGuid();
     TariffPlan  = tariffPlan;
     PhoneNumber = phoneNumber;
     PortId      = portId;
     StationId   = stationId;
 }
Exemple #6
0
 public Contract(IUser client, ITariffPlan tariffPlan, PhoneNumber number)
 {
     ContractStartDate = DateTime.Now;
     Client            = client;
     TariffPlan        = tariffPlan;
     Account           = new Account(tariffPlan.FreeMinutes);
     Number            = number;
 }
Exemple #7
0
 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);
 }
Exemple #8
0
 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);
 }
Exemple #9
0
        public bool ChangeTariffPlan(Subscribers subscriber, ITariffPlan newPlan)
        {
            ContractHead subsContract;

            Contracts.TryGetValue(subscriber.Contract.ContractNumber, out subsContract);
            if (subsContract.ChangeTariffPlan(newPlan))
            {
                return(true);
            }
            return(false);
        }
Exemple #10
0
 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"); };
 }
Exemple #11
0
        /// <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);
        }
Exemple #13
0
        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;
        }
Exemple #16
0
 protected Terminal(PhoneNumber number, ITariffPlan tariffPlan)
 {
     Number = number;
     TariffPlan = tariffPlan;
 }
Exemple #17
0
 public bool ChangeTariffPlan(ITariffPlan newPlan)
 {
     return(false);
 }
Exemple #18
0
 public IContract GetContract(ITariffPlan tariffPlan, int phoneNumber)
 {
     return(new Contract(tariffPlan, phoneNumber));
 }
Exemple #19
0
        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;
        }
Exemple #20
0
 public void AddNewTariffPlan(ITariffPlan tariffPlan)
 {
     TariffPlans.Add(tariffPlan);
 }
Exemple #21
0
 public ContractHead(int contractNumber, ITariffPlan plan, int phoneNum)
 {
     ContractNumber = contractNumber;
     Plan.Add(DateTime.Today, plan);
     PhoneNumber = phoneNum;
 }
Exemple #22
0
 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);
 }
 public Contract(PhoneNumber number, ITariffPlan tariffPlan, DateTime date)
 {
     this.Number = number;
     this.TariffPlan = tariffPlan;
     this.Date = date;
 }
Exemple #25
0
        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;
        }
Exemple #27
0
 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");
     }
 }
Exemple #28
0
 public Contract(ITariffPlan tariffPlan, int phoneNumber)
 {
     TariffPlan  = tariffPlan;
     PhoneNumber = phoneNumber;
 }
Exemple #29
0
 public Billing(ITariffPlan tariffPlan)
 {
     TariffPlan    = tariffPlan;
     outgoingСalls = new List <OutgoingСall>();
     Abonents      = new HashSet <AbonentInfo>();
 }