public PriceDetails GetPrice(string distance, string lorryType, string fromBuildingType = null, string toBuildingType = null, string labor = null, string assembleBed = null, string assemblyDining = null, string assemblyWardrobe = null, string assemblyTable = null, string bubbleWrapping = null, string shrinkWrapping = null, string promoCode = null) { // calculate the transport cost var transportCost = deliveryPriceDao.GetPrice(distance, lorryType); if (transportCost == null) { return(null); } PriceDetails priceDetails = new PriceDetails(); priceDetails.total = transportCost.price; priceDetails.partnerTotal = transportCost.partner_price; // break down the cost priceDetails.fuel = 0.4f * priceDetails.partnerTotal; priceDetails.maintenance = 0.35f * priceDetails.partnerTotal; priceDetails.labor = 0.25f * priceDetails.partnerTotal; var additionalService = deliveryAdditionalDao.Get(); int laborCount = 0; if (fromBuildingType != null && toBuildingType != null && labor != null && int.TryParse(labor, out laborCount) && laborCount != 0) { DeliveryExtraService laborCost = null; // extra labor cost if (int.Parse(fromBuildingType) == (int)Constants.Configuration.BuildingType.HighRise_nolift || int.Parse(toBuildingType) == (int)Constants.Configuration.BuildingType.HighRise_nolift) { laborCost = additionalService.Find(t => t.name.CompareTo("labor-highrise-nolift") == 0); } else if (int.Parse(fromBuildingType) == (int)Constants.Configuration.BuildingType.HighRise_lift || int.Parse(toBuildingType) == (int)Constants.Configuration.BuildingType.HighRise_lift) { laborCost = additionalService.Find(t => t.name.CompareTo("labor-highrise-lift") == 0); } else { laborCost = additionalService.Find(t => t.name.CompareTo("labor-landed") == 0); } if (laborCost == null) { DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, fromBuildingType + " " + toBuildingType); return(null); } var addCost = laborCount * laborCost.value; var addPartnerCost = laborCount * laborCost.partnerValue; priceDetails.total += addCost; priceDetails.partnerTotal += addPartnerCost; priceDetails.labor += addPartnerCost; } int assembleBedCount = 0; if (assembleBed != null && int.TryParse(assembleBed, out assembleBedCount) && assembleBedCount != 0) { var cost = additionalService.Find(t => t.name.CompareTo("assemble-bed") == 0); if (cost == null) { DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, "assembleBed: " + assembleBed); return(null); } var addCost = assembleBedCount * cost.value; var addPartnerCost = assembleBedCount * cost.partnerValue; priceDetails.total += addCost; priceDetails.partnerTotal += addPartnerCost; priceDetails.labor += addPartnerCost; } int assembleDiningCount = 0; if (assemblyDining != null && int.TryParse(assemblyDining, out assembleDiningCount) && assembleDiningCount != 0) { var cost = additionalService.Find(t => t.name.CompareTo("assemble-diningtable") == 0); if (cost == null) { DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, "assembleBed: " + assemblyDining); return(null); } var addCost = assembleDiningCount * cost.value; var addPartnerCost = assembleDiningCount * cost.partnerValue; priceDetails.total += addCost; priceDetails.partnerTotal += addPartnerCost; priceDetails.labor += addPartnerCost; } int assembleTableCount = 0; if (assemblyTable != null && int.TryParse(assemblyTable, out assembleTableCount) && assembleTableCount != 0) { var cost = additionalService.Find(t => t.name.CompareTo("assemble-table") == 0); if (cost == null) { DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, "assemblyTable: " + assemblyTable); return(null); } var addCost = assembleTableCount * cost.value; var addPartnerCost = assembleTableCount * cost.partnerValue; priceDetails.total += addCost; priceDetails.partnerTotal += addPartnerCost; priceDetails.labor += addPartnerCost; } int assemblyWardrobeCount = 0; if (assemblyWardrobe != null && int.TryParse(assemblyWardrobe, out assemblyWardrobeCount) && assemblyWardrobeCount != 0) { var cost = additionalService.Find(t => t.name.CompareTo("assemble-wardrobe") == 0); if (cost == null) { DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, "assemblyWardrobe: " + assemblyWardrobe); return(null); } var addCost = assemblyWardrobeCount * cost.value; var addPartnerCost = assemblyWardrobeCount * cost.partnerValue; priceDetails.total += addCost; priceDetails.partnerTotal += addPartnerCost; priceDetails.labor += addPartnerCost; } int bubbleWrappingCount = 0; if (bubbleWrapping != null && int.TryParse(bubbleWrapping, out bubbleWrappingCount) && bubbleWrappingCount != 0) { var cost = additionalService.Find(t => t.name.CompareTo("bubble-wrap") == 0); if (cost == null) { DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, "bubbleWrapping: " + bubbleWrapping); return(null); } var addCost = bubbleWrappingCount * cost.value; var addPartnerCost = bubbleWrappingCount * cost.partnerValue; priceDetails.total += addCost; priceDetails.partnerTotal += addPartnerCost; } int shrinkWrappingCount = 0; if (shrinkWrapping != null && int.TryParse(shrinkWrapping, out shrinkWrappingCount) && shrinkWrappingCount != 0) { var cost = additionalService.Find(t => t.name.CompareTo("shrink-wrap") == 0); if (cost == null) { DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, "shrinkWrapping: " + shrinkWrapping); return(null); } var addCost = shrinkWrappingCount * cost.value; var addPartnerCost = shrinkWrappingCount * cost.partnerValue; priceDetails.total += addCost; priceDetails.partnerTotal += addPartnerCost; } priceDetails.partner = priceDetails.partnerTotal; priceDetails.justlorry = priceDetails.total - priceDetails.partnerTotal; // discount voucher if (promoCode != null) { var voucherResult = new Vouchers(); var responseCode = validateVoucher(promoCode, priceDetails.total, out voucherResult); if (responseCode == Constant.ErrorCode.ESuccess) { // first set the used voucher count // 20161118 - increase count during confirm (add job) instead //if (voucherDao.IncreaseUsedCount(promoCode) == false) //{ // DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, "voucherDao.IncreaseUsedCount(promoCode) in Common controller: " + promoCode); //} if (int.Parse(voucherResult.voucherType.id) == (int)Constants.Configuration.VoucherType.Percentage) { var discountedValue = voucherResult.discountValue * priceDetails.total; if (discountedValue > voucherResult.maximumDiscount) { discountedValue = voucherResult.maximumDiscount; } priceDetails.total -= discountedValue; priceDetails.discount = discountedValue; priceDetails.discountRate = (int)voucherResult.discountValue; } else if (int.Parse(voucherResult.voucherType.id) == (int)Constants.Configuration.VoucherType.Value) { var discountedValue = voucherResult.discountValue; if (discountedValue > voucherResult.maximumDiscount) { discountedValue = voucherResult.maximumDiscount; } priceDetails.discountRate = (int)(voucherResult.discountValue / priceDetails.total); priceDetails.total -= discountedValue; priceDetails.discount = discountedValue; } } } if (priceDetails.total < 0) { priceDetails.total = 0; } return(priceDetails); }
public PriceDetails GetPrice(string lorryType, string fromBuildingType, string promoCode) { var transportCost = deliveryPriceDao.GetPrice("0", lorryType); if (transportCost == null) { return(null); } PriceDetails priceDetails = new PriceDetails(); priceDetails.total = (transportCost.price * 0.8f); priceDetails.partnerTotal = (transportCost.partner_price * 0.8f); // breakdown cost priceDetails.fuel = 0.4f * priceDetails.partnerTotal; priceDetails.maintenance = 0.35f * priceDetails.partnerTotal; priceDetails.labor = 0.25f * priceDetails.partnerTotal; // calculate for labors var laborCount = 1; switch (lorryType) { case "1": laborCount = 2; break; case "2": case "3": laborCount = 3; break; } var additionalService = deliveryAdditionalDao.Get(); DeliveryExtraService laborCost = null; // extra labor cost if (fromBuildingType == null) { fromBuildingType = "1"; } if (int.Parse(fromBuildingType) == (int)Constants.Configuration.BuildingType.HighRise_nolift) { laborCost = additionalService.Find(t => t.name.CompareTo("labor-highrise-nolift") == 0); } else if (int.Parse(fromBuildingType) == (int)Constants.Configuration.BuildingType.HighRise_lift) { laborCost = additionalService.Find(t => t.name.CompareTo("labor-highrise-lift") == 0); } else { laborCost = additionalService.Find(t => t.name.CompareTo("labor-landed") == 0); } if (laborCost == null) { return(null); } var laborCosting = laborCount * laborCost.value; var partnerLaborCosting = laborCount * laborCost.partnerValue; priceDetails.total += laborCosting; priceDetails.partnerTotal += partnerLaborCosting; priceDetails.labor += partnerLaborCosting; priceDetails.partner = priceDetails.partnerTotal; priceDetails.justlorry = (priceDetails.total - priceDetails.partnerTotal); // discount voucher if (promoCode != null) { var voucherResult = new Vouchers(); var responseCode = validateVoucher(promoCode, priceDetails.total, out voucherResult); if (responseCode == Constant.ErrorCode.ESuccess) { // first set the used voucher count // 20161118 - increase count during confirm (add job) instead //if (voucherDao.IncreaseUsedCount(promoCode) == false) //{ // DBLogger.GetInstance().Log(DBLogger.ESeverity.Warning, "voucherDao.IncreaseUsedCount(promoCode) in Common controller: " + promoCode); //} if (int.Parse(voucherResult.voucherType.id) == (int)Constants.Configuration.VoucherType.Percentage) { var discountedValue = voucherResult.discountValue * priceDetails.total; if (discountedValue > voucherResult.maximumDiscount) { discountedValue = voucherResult.maximumDiscount; } priceDetails.total -= discountedValue; priceDetails.discount = discountedValue; priceDetails.discountRate = (int)voucherResult.discountValue; } else if (int.Parse(voucherResult.voucherType.id) == (int)Constants.Configuration.VoucherType.Value) { var discountedValue = voucherResult.discountValue; if (discountedValue > voucherResult.maximumDiscount) { discountedValue = voucherResult.maximumDiscount; } priceDetails.discountRate = (int)(voucherResult.discountValue / priceDetails.total); priceDetails.total -= discountedValue; priceDetails.discount = discountedValue; } } } return(priceDetails); }