Exemple #1
0
        public double CalcCharge(DateTime date, double quantity)
        {
            double charge;

              if (date.Before(SUMMER_START) || date.After(SUMMER_END))
            charge = quantity*_winterRate + _winterServiceCharge;
              else
            charge = quantity*_summerRate;

              return charge;
        }
        private Dollars Charge(int usage, DateTime start, DateTime end)
        {
            Dollars result;
            double summerFraction;

            // Find out how much of period is in the summer
            if (start.After(zone.SummerEnd()) || end.Before(zone.SummerStart()))
                summerFraction = 0;
            else if (!start.Before(zone.SummerStart()) && !start.After(zone.SummerEnd()) && !end.Before(zone.SummerStart()) && !end.After(zone.SummerEnd()))
            {
                summerFraction = 1;
            }
            else
            {
                // part in summer part in winter
                double summerDays;
                if (start.Before(zone.SummerStart()) || start.After(zone.SummerEnd()))
                {
                    // end is in the summer
                    summerDays = DayOfYear(end) - DayOfYear(zone.SummerStart()) + 1;
                }
                else
                {
                    // start is in summer
                    summerDays = DayOfYear(zone.SummerEnd()) - DayOfYear(start) + 1;
                }
                summerFraction = summerDays/(DayOfYear(end) - DayOfYear(start) + 1);
            }

            result = new Dollars((usage*zone.SummerRate()*summerFraction) + (usage*zone.WinterRate()*(1 - summerFraction)));
            result = result.Plus(new Dollars(result.Times(TAX_RATE)));

            Dollars fuel = new Dollars(usage*0.0175);
            result = result.Plus(fuel);

            result = new Dollars(result.Plus(fuel.Times(TAX_RATE)));

            return result;
        }
        private Dollars Charge(int fullUsage, DateTime start, DateTime end)
        {
            Dollars result;
            double summerFraction;
            int usage = Math.Min(fullUsage, CAP);
            if (start.After(zone.SummerEnd()) || end.Before(zone.SummerStart()))
                summerFraction = 0;
            else if (!start.Before(zone.SummerStart()) && !start.After(zone.SummerEnd()) &&
                !end.Before(zone.SummerStart()) && !end.After(zone.SummerEnd()))
                summerFraction = 1;
            else
            {
                double summerDays;
                if (start.Before(zone.SummerStart()) || start.After(zone.SummerEnd()))
                {
                    // end is in the summer
                    summerDays = DayOfYear(end) - DayOfYear(zone.SummerStart()) + 1;
                }
                else
                {
                    // start is in summer
                    summerDays = DayOfYear(zone.SummerEnd()) - DayOfYear(start) + 1;
                }
                ;
                summerFraction = summerDays/(DayOfYear(end) - DayOfYear(start) + 1);
            }

            result = new Dollars((usage*zone.SummerRate()*summerFraction) +
                (usage*zone.WinterRate()*(1 - summerFraction)));

            result = result.Plus(new Dollars(Math.Max(fullUsage - usage, 0)*0.062));
            result = result.Plus(new Dollars(result.Times(TAX_RATE)));

            Dollars fuel = new Dollars(fullUsage*0.0175);
            result = result.Plus(fuel);
            result = new Dollars(result.Plus(fuel.Times(TAX_RATE).Min(FUEL_TAX_CAP)));

            return result;
        }