Единица измерения и подтверждение
Привет, я работаю над приложением инвентаризации.
я застрял на пересчете единиц измерения , например, если продукт находится в килограмме, мне нужно продавать в граммах или тоннах
, дюжина к ПК и изготовленный на заказ пакет также там как коробка могут содержать 20 ПК и потребность продать ее в ПК или она может содержать 40 ПК. надеюсь, вы поняли мой вопрос,
Таблица продуктов выглядит так
ProductID Name Rate Unit Baseunit conversion 1 Item A 100 carton Pcs 20 2 item B 120 carton Doz 10 3 item C 100 Kilogram Gram 2
пример: товар а находится в картонной коробке по 20 шт.
пункт с представляет собой мешок весом 2 килограмма
и есть еще одна таблица для измерения единицы измерения
Unit_id Unit_Name Parent_ID Conversion 1 Pcs - 1 2 Doz 1 12 3 gram - 1 4 Kilogram 3 1000
как мудрый
Что я уже пробовал:
я пытался, но не получил полного решения для этого, пожалуйста, помогите
вот что я пытался сделать
public enum Units { //Mass //Hectogram = 0, Grams = 1, KiloGrams = 2, Pounds = 3, //Ounces = 4, //Tonnes = 5, //MilliGram = 6, //Length Metres = 101, Millimetres = 102, Centimeters = 103, Feet = 106, Inches = 107, //Volume Litres = 201, Millilitres = 202, FluidOunces = 204, //Quantity Numbers = 401, Dozen = 402, Carton = 400 } class UnitConverter { public static double CtnCount = 0; const int MassRange = 0; const int LengthRange = 100; const int VolumeRange = 200; const int Quantity = 400; static double[] ToBaseWeight = new double[7]; static double[] ToBaseLength = new double[8]; static double[] ToBaseVolume = new double[10]; static double[] ToBaseQty = new double[7]; static UnitConverter() { //ToBaseWeight[(int)Units.MilliGram] = 1 / 100; ToBaseWeight[(int)Units.Grams] = 1; //ToBaseWeight[(int)Units.Hectogram] = 100; ToBaseWeight[(int)Units.KiloGrams] = 1000; //ToBaseWeight[(int)Units.Ounces] = 28.3495231; ToBaseWeight[(int)Units.Pounds] = 453.59237; //ToBaseWeight[(int)Units.Tonnes] = 1000000; ToBaseLength[(int)Units.Metres - LengthRange] = 1; ToBaseLength[(int)Units.Millimetres - LengthRange] = 0.001; ToBaseLength[(int)Units.Centimeters - LengthRange] = 0.01; ToBaseLength[(int)Units.Feet - LengthRange] = 0.3048; ToBaseLength[(int)Units.Inches - LengthRange] = 0.0254; ToBaseVolume[(int)Units.Litres - VolumeRange] = 1000; ToBaseVolume[(int)Units.Millilitres - VolumeRange] = 1; ToBaseVolume[(int)Units.FluidOunces - VolumeRange] = 29.5735296; ToBaseQty[(int)Units.Numbers - Quantity] = 1; ToBaseQty[(int)Units.Dozen - Quantity] = 12; ToBaseQty[(int)Units.Carton - Quantity] = 100; } public static string ConvertUnits(double amount, Units from, Units to,double cnt) { CtnCount = cnt; if (from == to) return amount.ToString(); string msg = ValidateUnitMatch(from, to); if (msg != "") { return msg; } int range = GetConversionRange(from); double[] rateArray = GetConversionArray(range); double answer = 0; //Convert From to base, if (CtnCount>0) { rateArray[0] = CtnCount; } answer = rateArray[(int)from - range] * amount; //Convert base to To answer = answer * (1.0 / rateArray[(int)to - range]); return answer.ToString(); } static string ValidateUnitMatch(Units from, Units to) { int frange = ((((int)from) / 100) * 100); int trange = ((((int)to) / 100) * 100); if (frange != trange) { return "The from unit and to unit are not compatible. They need to be of the same type (Volume/Area/Mass/Length)"; } else { return ""; } } static int GetConversionRange(Units unit) { int range = ((((int)unit) / 100) * 100); return range; } static double[] GetConversionArray(int range) { switch (range) { case VolumeRange: return ToBaseVolume; case LengthRange: return ToBaseLength; case MassRange: return ToBaseWeight; case Quantity: return ToBaseQty; } throw new ArgumentOutOfRangeException("Unknown unit type"); } }
его работа, но я не смог использовать пользовательский блок.. как я уже сказал выше
если я хочу добавить новый блок, например, мешок содержит 10 кг товара, я не могу сделать это в этом случае.