public double CalculatePriceOfCall(CallInfo call) { if (_FavoriteNumbers.Contains(call.Target)) { return 0; } else { return call.Duration.TotalMinutes * _PricePerMinute; } }
public double CalculatePriceOfCall(CallInfo call) { var durationInMinutes = call.Duration.TotalMinutes; if (_PrivateMinutes != 0) { if (durationInMinutes > _PrivateMinutes) { durationInMinutes -= _PrivateMinutes; _PrivateMinutes = 0; } else { _PrivateMinutes -= durationInMinutes; return 0; } } return durationInMinutes * _PricePerMinute; }
public static string ToLogString(CallInfo callInfo) { return String.Format("Call: from - {0}, to - {1}, time - {2}, duration(min) - {3}, price - {4}", callInfo.Source.GetValue, callInfo.Target.GetValue, callInfo.StartedAt, callInfo.Duration.TotalMinutes, callInfo.Price); }
protected void AddCall(object sender, CallInfo callInfo) { var currentTariffPlan = this._CurrentContracts .Where(x => x.Number == callInfo.Source) .OrderBy(x => x.Date) .Last() .TariffPlan; callInfo.Price = currentTariffPlan.CalculatePriceOfCall(callInfo); _Logger.WriteToLog("-> Billing system get new call"); _Logger.WriteToLog(ObjectToLogString.ToLogString(callInfo)); _NotPayCalls.Add(callInfo); }
protected void RejectRequest(Request request, ResponseState responseState, IPort port) { var response = new Response(responseState, request); _Logger.WriteToLog("-> ATS reject"); _Logger.WriteToLog(ObjectToLogString.ToLogString(response)); CallInfo call = new CallInfo(request.SourceNumber, request.TargetNumber); call.StartedAt = LocalDateTime.Now; port.CallWasCompleted(response); OnTerminateCall(this, call); }
protected void ProcessRequest(object sender, Request request) { var senderPort = _RoutingPorts[request.SourceNumber]; var targetPort = _RoutingPorts[request.TargetNumber]; var callInfo = new CallInfo(request.SourceNumber, request.TargetNumber); if (OnConnecting != null && !OnConnecting(request.SourceNumber)) { RejectRequest(request, ResponseState.NotEnoughtMoney, senderPort); } else if (targetPort == null) { RejectRequest(request, ResponseState.TargetNotExist, senderPort); } else if (targetPort.GetState == PortState.Busy) { RejectRequest(request, ResponseState.Busy, senderPort); } else if (targetPort.GetState == PortState.SwitchedOff) { RejectRequest(request, ResponseState.Offline, senderPort); } else { this._ConnectingCalls.Add(callInfo); AcceptRequest(request, targetPort); } }