Esempio n. 1
0
        //Calculate package fee from declared weight in RMB
        private decimal CalculatePackageFee(Package Package)
        {
            ServicePackageFee hehe  = db.ServicePackageFees.SingleOrDefault(a => a.PackageTypeID == Package.PackageTypeID && a.ServiceTypeID == Package.Shipment.ServiceTypeID);
            PackageTypeSize   haha  = db.PackageTypeSizes.Single(a => a.PackageTypeSizeID == Package.PackageTypeSizeID);
            decimal           price = 0;

            switch (Package.PackageTypeID)
            {
            //Envelop
            case 1:
                price = hehe.Fee;
                break;

            //Pak or Box
            case 2:
            case 4:
                price = Package.DeclaredWeight * hehe.Fee > hehe.MinimumFee ? (decimal)Package.DeclaredWeight * hehe.Fee : hehe.MinimumFee;
                int    limit         = 0;
                string limitString   = haha.WeightLimit;
                bool   convertResult = Int32.TryParse(limitString.Substring(0, limitString.Length - 2), out limit);
                if (limit != 0 && convertResult && Package.DeclaredWeight > (decimal)limit)
                {
                    price += 500;
                }

                break;

            //Tube or Custmoer
            case 3:
            case 5:
                price = Package.DeclaredWeight * hehe.Fee > hehe.MinimumFee ? (decimal)Package.DeclaredWeight * hehe.Fee : hehe.MinimumFee;
                break;
            }
            return(price);
        }
Esempio n. 2
0
        public ActionResult DeleteConfirmed(int id)
        {
            ServicePackageFee servicePackageFee = db.ServicePackageFees.Find(id);

            db.ServicePackageFees.Remove(servicePackageFee);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Esempio n. 3
0
        //[Test()]
        public void convertToCurrencyTest(
            string ToCurreuncy, decimal fee, decimal resultfee
            )
        {
            BaseController    b       = new BaseController();
            ServicePackageFee testing = new ServicePackageFee();

            Assert.That(b.convertToCurrency(ToCurreuncy, fee), Is.EqualTo(resultfee));
        }
Esempio n. 4
0
 public ActionResult Edit([Bind(Include = "ServicePackageFeeID,Fee,MinimumFee,PackageTypeID,ServiceTypeID")] ServicePackageFee servicePackageFee)
 {
     if (ModelState.IsValid)
     {
         db.Entry(servicePackageFee).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.PackageTypeID = new SelectList(db.PackageTypes, "PackageTypeID", "Type", servicePackageFee.PackageTypeID);
     ViewBag.ServiceTypeID = new SelectList(db.ServiceTypes, "ServiceTypeID", "Type", servicePackageFee.ServiceTypeID);
     return(View(servicePackageFee));
 }
        // GET: Shipments/ConfirmShipment
        public ActionResult ConfirmShipment()
        {
            if (Session["newShipment"] == null)
            {
                return(RedirectToAction("Index", "Home"));
            }
            ArrangeShipmentViewModel shipment = (ArrangeShipmentViewModel)Session["newShipment"];

            Session.Remove("newShipment");

            shipment.ServiceType       = db.ServiceTypes.Find(shipment.ServiceTypeID).Type;
            shipment.RecipientProvince = GetProvince(shipment.Destination);

            ViewBag.NumberOfPackages = shipment.NumberOfPackages;
            shipment.ShipmentCost    = 0;
            for (int i = 0; i < 10; i++)
            {
                if (i >= shipment.NumberOfPackages || shipment.Packages[i].CustomerWeight == 0)
                {
                    shipment.Packages[i].PackageTypeSizeID = 1;
                    shipment.Packages[i].CustomerWeight    = 0;
                    continue;
                }
                PackageTypeSize   packageTypeSize   = db.PackageTypeSizes.Find(shipment.Packages[i].PackageTypeSizeID);
                ServicePackageFee servicePackageFee = db.ServicePackageFees.First(s => (s.ServiceTypeID == shipment.ServiceTypeID) && (s.PackageTypeID == packageTypeSize.PackageTypeID));
                shipment.Packages[i].PackageTypeSize = packageTypeSize.PackageType.Type + " (" + packageTypeSize.Size + ")";

                decimal packageCost = 0;
                float   weightLimit = db.PackageTypeSizes.Find(shipment.Packages[i].PackageTypeSizeID).WeightLimit;

                packageCost = (decimal)shipment.Packages[i].CustomerWeight * servicePackageFee.Fee;

                if (weightLimit > 0 && shipment.Packages[i].CustomerWeight > weightLimit)
                {
                    packageCost += 500;
                }

                packageCost = (packageCost < servicePackageFee.MinimumFee) ? servicePackageFee.MinimumFee : packageCost;
                packageCost = ConvertCurrency(shipment.CurrencyCode, packageCost);
                shipment.Packages[i].PackageCost = packageCost;
                shipment.ShipmentCost           += packageCost;

                SaveToSessionState("newPackage" + i.ToString(), shipment.Packages[i]);
            }

            if (Session["newShipment"] != null)
            {
                Session.Remove("newShipment");
            }
            SaveToSessionState("newShipment", shipment);
            return(View(shipment));
        }
Esempio n. 6
0
        // GET: ServicePackageFees/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ServicePackageFee servicePackageFee = db.ServicePackageFees.Find(id);

            if (servicePackageFee == null)
            {
                return(HttpNotFound());
            }
            return(View(servicePackageFee));
        }
Esempio n. 7
0
        // GET: ServicePackageFees/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ServicePackageFee servicePackageFee = db.ServicePackageFees.Find(id);

            if (servicePackageFee == null)
            {
                return(HttpNotFound());
            }
            ViewBag.PackageTypeID = new SelectList(db.PackageTypes, "PackageTypeID", "Type", servicePackageFee.PackageTypeID);
            ViewBag.ServiceTypeID = new SelectList(db.ServiceTypes, "ServiceTypeID", "Type", servicePackageFee.ServiceTypeID);
            return(View(servicePackageFee));
        }
        public ActionResult DeleteConfirmed(int id)
        {
            ServicePackageFee servicePackageFee = db.ServicePackageFees.Find(id);

            db.ServicePackageFees.Remove(servicePackageFee);
            try
            {
                db.SaveChanges();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(View());
            }
            return(RedirectToAction("Index"));
        }
        // POST: ShipmentCostCalculator
        public ActionResult ShipmentCostCalculator(CalculatorShipmentViewModel shipment)
        {
            shipment.Destinations  = PopulateDestinationsDropDownList().ToList();
            shipment.ServiceTypes  = PopulateServiceTypesDropDownList().ToList();
            shipment.CurrencyCodes = PopulateCurrenciesDropDownList().ToList();
            for (int i = 0; i < 10; i++)
            {
                shipment.Packages[i].PackageTypeSizes = PopulatePackageTypeSizesDropDownList().ToList();
            }

            shipment.ShipmentCost = 0;


            ViewBag.NumberOfPackages = shipment.NumberOfPackages;

            for (int i = 0; i < 10; i++)
            {
                if (i >= shipment.NumberOfPackages || shipment.Packages[i].Weight == 0)
                {
                    shipment.Packages[i].PackageTypeSizeID = 1;
                    shipment.Packages[i].Weight            = 0;
                    continue;
                }
                PackageTypeSize   packageTypeSize   = db.PackageTypeSizes.Find(shipment.Packages[i].PackageTypeSizeID);
                ServicePackageFee servicePackageFee = db.ServicePackageFees.First(s => (s.ServiceTypeID == shipment.ServiceTypeID) && (s.PackageTypeID == packageTypeSize.PackageTypeID));

                decimal packageCost = 0;
                float   weightLimit = db.PackageTypeSizes.Find(shipment.Packages[i].PackageTypeSizeID).WeightLimit;

                packageCost = (decimal)shipment.Packages[i].Weight * servicePackageFee.Fee;

                if (weightLimit > 0 && shipment.Packages[i].Weight > weightLimit)
                {
                    packageCost += 500;
                }

                packageCost = (packageCost < servicePackageFee.MinimumFee) ? servicePackageFee.MinimumFee : packageCost;
                packageCost = ConvertCurrency(shipment.CurrencyCode, packageCost);
                shipment.Packages[i].PackageCost = packageCost;
                shipment.ShipmentCost           += packageCost;
            }

            return(View(shipment));
        }
        public ActionResult Create([Bind(Include = "ServicePackageFeeID,Fee,MinimumFee,PackageTypeID,ServiceTypeID")] ServicePackageFee servicePackageFee)
        {
            if (ModelState.IsValid)
            {
                db.ServicePackageFees.Add(servicePackageFee);
                try
                {
                    db.SaveChanges();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    return(View());
                }
                return(RedirectToAction("Index"));
            }

            ViewBag.PackageTypeID = new SelectList(db.PackageTypes, "PackageTypeID", "Type", servicePackageFee.PackageTypeID);
            ViewBag.ServiceTypeID = new SelectList(db.ServiceTypes, "ServiceTypeID", "Type", servicePackageFee.ServiceTypeID);
            return(View(servicePackageFee));
        }
Esempio n. 11
0
        public Dictionary <string, decimal> Calculate(string ServiceType, string PackageTypeSize, decimal weight)
        {
            Dictionary <string, decimal> result   = new Dictionary <string, decimal>();
            ServiceType       CostServiceType     = db.ServiceTypes.FirstOrDefault(a => a.Type == ServiceType);
            PakageTypeSize    CostPackageTypeSize = db.PakageTypeSizes.FirstOrDefault(a => a.size == PackageTypeSize);
            ServicePackageFee CostFee             = db.ServicePackageFees.FirstOrDefault(a => a.PackageTypeID == CostPackageTypeSize.PackageType.PackageTypeID && a.ServiceTypeID == CostServiceType.ServiceTypeID);
            decimal           penaltyFee          = db.PenaltyFees.FirstOrDefault(a => a.PenaltyFeeID == 1).Fee;
            string            WeightLimit         = CostPackageTypeSize.weightLimit;
            decimal           Fee        = CostFee.Fee;
            decimal           MinimumFee = CostFee.MinimumFee;
            decimal           Price      = Fee;

            if (CostPackageTypeSize.PackageType.Type == "Envelope")
            {
                Price = Fee;
            }
            else
            {
                decimal actualWeight = Math.Round(weight, 1);
                Price = Fee * actualWeight;
                if (CostPackageTypeSize.PackageType.Type != "Tube" && CostPackageTypeSize.PackageType.Type != "Customer")
                {
                    decimal actualWeightLimit = decimal.Parse(WeightLimit.Replace("kg", ""));
                    if (actualWeight > actualWeightLimit)
                    {
                        Price += penaltyFee;
                    }
                }
                if (Price < MinimumFee)
                {
                    Price = MinimumFee;
                }
            }
            result.Add("CNY", Price);
            result.Add("HKD", ConvertCurrency("HKD", Price));
            result.Add("MOP", ConvertCurrency("MOP", Price));
            result.Add("TWD", ConvertCurrency("TWD", Price));
            return(result);
        }
Esempio n. 12
0
        public void UpdateShipmentFee(int shipmentId, bool estimated)
        {
            decimal  fee      = 0;
            Shipment shipment = db.Shipments.Find(shipmentId);

            if (shipment != null)
            {
                foreach (var p in shipment.Packages)
                {
                    if (estimated)
                    {
                        ServiceType       st = db.ServiceTypes.Where(s => s.Type == shipment.ServiceType).Single();
                        PackageType       pt = p.PackageTypeSize.PackageType;
                        ServicePackageFee spf = db.ServicePackageFees.Where(s => s.ServiceTypeID == st.ServiceTypeID).Where(s => s.PackageTypeID == pt.PackageTypeID).Single();
                        decimal           PackageFee, FeePerKG, MinimumFee, MaximumWeight;
                        FeePerKG = spf.Fee;
                        try
                        {
                            MaximumWeight = p.PackageTypeSize.WeightLimit;
                        }
                        catch (Exception)
                        {
                            MaximumWeight = 0;
                        }

                        MinimumFee = spf.MinimumFee;
                        PackageFee = (decimal)p.EstimatedWeight * FeePerKG;
                        if (PackageFee < MinimumFee)
                        {
                            PackageFee = MinimumFee;
                        }
                        if (p.EstimatedWeight > MaximumWeight && MaximumWeight != 0)
                        {
                            PackageFee += spf.Penalty;
                        }
                        if (spf.PackageTypeID == 1)
                        {
                            PackageFee = MinimumFee;
                        }
                        fee += PackageFee;
                    }
                    else
                    {
                        ServiceType       st = db.ServiceTypes.Where(s => s.Type == shipment.ServiceType).Single();
                        PackageType       pt = p.PackageTypeSize.PackageType;
                        ServicePackageFee spf = db.ServicePackageFees.Where(s => s.ServiceTypeID == st.ServiceTypeID).Where(s => s.PackageTypeID == pt.PackageTypeID).Single();
                        decimal           PackageFee, FeePerKG, MinimumFee, MaximumWeight;
                        FeePerKG = spf.Fee;
                        try
                        {
                            MaximumWeight = p.PackageTypeSize.WeightLimit;
                        }
                        catch (Exception)
                        {
                            MaximumWeight = 0;
                        }

                        MinimumFee = spf.MinimumFee;
                        PackageFee = (decimal)p.Weight * FeePerKG;
                        if (PackageFee < MinimumFee)
                        {
                            PackageFee = MinimumFee;
                        }
                        if (p.Weight > MaximumWeight && MaximumWeight != 0)
                        {
                            PackageFee += spf.Penalty;
                        }
                        if (spf.PackageTypeID == 1)
                        {
                            PackageFee = MinimumFee;
                        }
                        fee += PackageFee;
                    }
                }
                Shipment ss = db.Shipments.Find(shipment.WaybillId);
                ss.ShipmentFee     = fee;
                db.Entry(ss).State = EntityState.Modified;
                db.SaveChanges();
            }
        }
Esempio n. 13
0
        //Calculate package fee from declared weight in RMB
        private decimal PackageFee(Package Package)
        {
            ServicePackageFee servicePackageFees = db.ServicePackageFees.SingleOrDefault(a => a.PackageTypeID == Package.PackageTypeID && a.ServiceTypeID == Package.Shipment.ServiceTypeID);
            PackageTypeSize   packageTypeSizes   = db.PackageTypeSizes.Single(a => a.PackageTypeSizeID == Package.PackageTypeSizeID);
            decimal           price = 0;

            switch (Package.PackageTypeID)
            {
            //Envelop
            case 1:
                price = servicePackageFees.Fee;
                break;

            //Pack/Box
            case 2:
                if (Package.Weight * servicePackageFees.Fee > servicePackageFees.MinimumFee)
                {
                    price = (decimal)Package.Weight * servicePackageFees.Fee;
                }
                else
                {
                    price = servicePackageFees.MinimumFee;
                }
                int    limit         = 0;
                string limitString   = packageTypeSizes.WeightLimit;
                bool   convertResult = Int32.TryParse(limitString.Substring(0, limitString.Length - 2), out limit);
                if (limit != 0 && convertResult && Package.Weight > (decimal)limit)
                {
                    price += 500;
                }
                break;

            case 4:
                if (Package.Weight * servicePackageFees.Fee > servicePackageFees.MinimumFee)
                {
                    price = (decimal)Package.Weight * servicePackageFees.Fee;
                }
                else
                {
                    price = servicePackageFees.MinimumFee;
                }
                int    weightLimit   = 0;
                string limitInString = packageTypeSizes.WeightLimit;
                bool   result        = Int32.TryParse(limitInString.Substring(0, limitInString.Length - 2), out weightLimit);
                if (weightLimit != 0 && result && Package.Weight > (decimal)weightLimit)
                {
                    price += 500;
                }
                break;

            //Tube or Customer
            case 3:
                if (Package.Weight * servicePackageFees.Fee > servicePackageFees.MinimumFee)
                {
                    price = (decimal)Package.Weight * servicePackageFees.Fee;
                }
                else
                {
                    price = servicePackageFees.MinimumFee;
                }
                break;

            case 5:
                if (Package.Weight * servicePackageFees.Fee > servicePackageFees.MinimumFee)
                {
                    price = (decimal)Package.Weight * servicePackageFees.Fee;
                }
                else
                {
                    price = servicePackageFees.MinimumFee;
                }
                break;
            }
            return(price);
        }
        // GET: ServicePackageFees
        public ActionResult Index(string ServiceType, int?PackageTypeSize, decimal?Weight, string Currency, bool?clearPackage)
        {
            //Initialization of parameter
            if (clearPackage == null)
            {
                clearPackage = false;
            }
            if (Session["PackageList"] == null)
            {
                Session["PackageList"] = new List <DummyPackage>();
            }
            if (Session["exchangeRate"] == null)
            {
                Session["exchangeRate"] = (decimal)1;
            }
            if (ServiceType == "")
            {
                ServiceType = null;
            }
            if (Currency == "")
            {
                Currency = null;
            }

            // Get list of ServiceType, PackageType, Currencies

            ViewBag.ServicePackageFeeCalculated = null;

            // Filter for ServicePackageFees
            var             servicePackageFees = db.ServicePackageFees.Include(s => s.PackageType).Include(s => s.ServiceType);
            PackageTypeSize currentPackageTypeSize;

            if (ServiceType != null)
            {
                servicePackageFees = servicePackageFees.Where(s => s.ServiceType.Type == ServiceType);
            }
            if (PackageTypeSize != null)
            {
                currentPackageTypeSize = db.PackageTypeSizes.Find(PackageTypeSize);
                servicePackageFees     = servicePackageFees.Where(s => s.PackageType.PackageTypeID == currentPackageTypeSize.PackageType.PackageTypeID);
            }

            // Determine currency exchange rate
            if (Currency != null)
            {
                Session["exchangeRate"] = Models.Currency.getCachedList().Where(s => s.CurrencyCode == Currency).Select(s => s.ExchangeRate).Single();
            }

            // Add package
            var ServicePackageFeeList = servicePackageFees.ToList();

            if (ServicePackageFeeList.Count() == 1 && Weight != null && Weight > 0)
            {
                currentPackageTypeSize = db.PackageTypeSizes.Find(PackageTypeSize);
                ServicePackageFee spf = ServicePackageFeeList.First();
                decimal           PackageFee, FeePerKG, MinimumFee, MaximumWeight;
                FeePerKG = spf.Fee;
                try
                {
                    MaximumWeight = currentPackageTypeSize.WeightLimit;
                }
                catch (Exception)
                {
                    MaximumWeight = 0;
                }

                MinimumFee = spf.MinimumFee;
                PackageFee = (decimal)Weight * FeePerKG;
                if (PackageFee < MinimumFee)
                {
                    PackageFee = MinimumFee;
                }
                if (Weight > MaximumWeight && MaximumWeight != 0)
                {
                    PackageFee += spf.Penalty;
                }
                if (spf.PackageTypeID == 1)
                {
                    PackageFee = MinimumFee;
                }

                List <DummyPackage> pl = (List <DummyPackage>)Session["PackageList"];
                pl.Add(new DummyPackage
                {
                    serviceType     = spf.ServiceType,
                    packageType     = spf.PackageType,
                    packageTypeSize = currentPackageTypeSize,
                    weight          = (decimal)Weight,
                    fee             = PackageFee
                });
            }

            // Clear Package
            if ((bool)clearPackage)
            {
                Session["PackageList"] = null;
            }

            // Calculate Total Fee
            ViewBag.TotalFee = 0;
            if (Session["PackageList"] != null)
            {
                foreach (var x in (List <DummyPackage>)Session["PackageList"])
                {
                    ViewBag.TotalFee += x.fee;
                }
            }

            // Compute display currency
            foreach (ServicePackageFee x in ServicePackageFeeList)
            {
                x.Fee        = CurrencyExchange(x.Fee, 1, (decimal)Session["exchangeRate"]);
                x.MinimumFee = CurrencyExchange(x.MinimumFee, 1, (decimal)Session["exchangeRate"]);
            }

            return(View(ServicePackageFeeList));
        }