public static double ToBaseUnit(MeasureUnitEnum from, decimal quantity, MeasureUnitTypeEnum type) { if (type == MeasureUnitTypeEnum.Mass) { return from switch { MeasureUnitEnum.Grama => UnitsNet.Mass.FromGrams(quantity).Grams, MeasureUnitEnum.Kilo => UnitsNet.Mass.FromKilograms(quantity).Grams, MeasureUnitEnum.Libra => UnitsNet.Mass.FromPounds(quantity).Grams, MeasureUnitEnum.Miligrama => UnitsNet.Mass.FromMilligrams(quantity).Grams, MeasureUnitEnum.Onca => UnitsNet.Mass.FromOunces(quantity).Grams, _ => 0, } } ; if (type == MeasureUnitTypeEnum.Volume) { return from switch { MeasureUnitEnum.Litro => UnitsNet.Volume.FromLiters(quantity).Milliliters, MeasureUnitEnum.Mililitro => UnitsNet.Volume.FromMilliliters(quantity).Milliliters, _ => 0, } } ; return(0); }
public decimal CalculatePricePerUnit(PriceRequest model, MeasureUnitTypeEnum pType, MeasureUnitTypeEnum qType) { if (model.ResultPrecision == 0) { model.ResultPrecision = 2; } var weightInGrams = Convert.ToDecimal(UnitConverter.ToBaseUnit(model.ProductMeasureUnit, model.Quantity, pType)); var pricePerUnit = model.ProductPrice / weightInGrams; var orderedWeight = Convert.ToDecimal(UnitConverter.ToBaseUnit(model.QuantityMeasureUnit, 1, qType)); var totalPrice = orderedWeight * pricePerUnit; return(Math.Round(totalPrice, model.ResultPrecision)); }
private async Task CalculateItem(NewOrderItem item, MeasureUnitEnum prodMeasureUnit, MeasureUnitTypeEnum pType, MeasureUnitTypeEnum qType, int corpClientId) { item.OriginalPrice = pricingApp.CalculatePricePerTotalWeight(new PriceRequest { ProductMeasureUnit = prodMeasureUnit, ProductPrice = item.ProductPrice, Quantity = item.Quantity, QuantityMeasureUnit = item.MeasureUnitId }, pType, qType); var prodSummary = await dataSheetService.CalculateProduction(item.ProductId, item.MeasureUnitId, item.Quantity, corpClientId); item.Cost = prodSummary.ProductionItems.Any() ? prodSummary.ProductionCost : new decimal?(); item.Profit = prodSummary.ProductionItems.Any() ? (item.PriceAfterDiscount - prodSummary.ProductionCost) : new decimal?(); }