예제 #1
0
        private SingeLineInvoice[] InvoicesFor(SingleLineUsageDetails[] usageDetails)
        {
            var result = new SingeLineInvoice[usageDetails.Length];

            for (int i = 0; i < usageDetails.Length; i++)
            {
                Package package = usageDetails[i].Package;

                double minutes = MinutesWithoutFriends(usageDetails[i], out double?friendsMinuets);
                int    smses   = usageDetails[i].SMSes.Length;

                double minutesDifference = package != null && package.IncludesMinuets ?
                                           minutes - package.MaxMinuets.Value
                    : minutes;

                int smsesDifference = package != null && package.IncludesSMSes ?
                                      smses - package.MaxSMSes.Value
                    : smses;

                PackageUsage packageInfo  = GetPackageInfo(package, minutes, minutesDifference, friendsMinuets, smses, smsesDifference);
                OutOfPackage outOfPackage = GetOutOfPackage(minutesDifference, smsesDifference, usageDetails[i].ClientType);

                result[i] = new SingeLineInvoice
                {
                    UsageDetails = usageDetails[i],
                    PackageInfo  = packageInfo,
                    OutOfPackage = outOfPackage,
                    TotalPrice   = (package?.TotalPrice ?? 0) + outOfPackage.TotalAdditionalPrice
                };
            }

            return(result);
        }
예제 #2
0
        private OutOfPackage GetOutOfPackage(double minuetsDifference, int smsesDifference, ClientTypeEnum clientType)
        {
            var result = new OutOfPackage();

            result.AdditionalMinuets    = minuetsDifference > 0 ? minuetsDifference : 0;
            result.AdditionalSMSes      = smsesDifference > 0 ? smsesDifference : 0;
            result.TotalAdditionalPrice =
                result.AdditionalMinuets * priceList.GetCallMinuetPrice(clientType)
                + result.AdditionalSMSes * priceList.GetSMSPrice(clientType);

            return(result);
        }