//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); }
public ActionResult DeleteConfirmed(int id) { ServicePackageFee servicePackageFee = db.ServicePackageFees.Find(id); db.ServicePackageFees.Remove(servicePackageFee); db.SaveChanges(); return(RedirectToAction("Index")); }
//[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)); }
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)); }
// 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)); }
// 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)); }
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); }
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(); } }
//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)); }