/// Updates materials needed in Chimney construction /// </summary> /// <param name="connection">Database connection</param> /// <param name="construction">Chímney construction to calculate</param> /// <param name="index">Number of constructions in module</param> /// <returns>Returns MainItems list calculated from constructions</returns> public MainItem CalculateConstruction(DatabaseConnection connection, ChimneyConstruction construction, int index) { // Result MainItem chimneyMainItem = new MainItem(); chimneyMainItem.Analysis = new ItemAnalysis(); chimneyMainItem.ID = string.Format("{0}-{1}", Properties.Resources.MAIN_ITEM_ID_CHIMNEY, index); chimneyMainItem.Name = construction.Name; chimneyMainItem.MeasureUnit = Properties.Resources.LABEL_CHIMNEY_MEASURE_UNIT; chimneyMainItem.Quantity = 1; chimneyMainItem.Kind = Properties.Resources.TEXT_KIND_CHIMNEY; // Get construction result code to load materials string resultCode = construction.ResultCode; if (string.IsNullOrEmpty(resultCode)) { chimneyMainItem.Note = Properties.Resources.MESSAGE_NO_MATERIAL_FOUND; return chimneyMainItem; } // New material set Hashtable materials = new Hashtable(); // Create MainItem for every construction // Load materials related to construction result code DataSet materialRelations = connection.GetMaterialSourcesForAutomaticConstructions(resultCode); if (materialRelations == null) { chimneyMainItem.Note = Properties.Resources.MESSAGE_NO_MATERIAL_FOUND; return chimneyMainItem; } try { // Browse all loaded materials foreach (DataRow relatedMaterial in materialRelations.Tables[0].Rows) { // All columns are marked as NOT NULL in databse string materialID = relatedMaterial["MaterialID"] as string; string dimension = relatedMaterial["Rozmer"] as string; decimal usage = Utilities.StringUtils.ParseDecimalFromString( relatedMaterial["Mnozstvi"].ToString(), 0 ); // Load material from database by id DataSet materialSet = connection.GetMaterialById(materialID); if (materialSet == null || materialSet.Tables[0].Rows.Count == 0) continue; // No material found // Create Material MaterialItem material = new MaterialItem(materialSet.Tables[0].Rows[0]); material.UsageMeasureUnit = Utilities.StringUtils.GetUsageMeasureUnit( material.MeasureUnit, chimneyMainItem.MeasureUnit ); // Set its usage and quantity based on coeficient from database and quantity from construction SetChimneyMaterialUsage(material, construction, dimension.Trim(), usage); material.Quantity = chimneyMainItem.CountAnalyzedItemQuantity(material.Usage); // Adds material to new hashtable result // Material can be new, or can be already used -> sum their quantities AddMaterialToHashTable(materials, material, construction.Name); } // Update material list an unit price UpdateList(chimneyMainItem, materials); chimneyMainItem.CalculateUnitPrice(); } catch (Exception ex) { Karafa.Errors.KarafaLogger.LogError(ex); } // Return result return chimneyMainItem; }
/// <summary> /// For every material in list counts Usage to correspond to 1 m2 of construction, /// also counts proper quantity /// <param name="mainItem">MainItem with material to update</param> /// </summary> private void UpdateMaterialsCalculations(MainItem mainItem) { foreach (ImportItemBase item in mainItem.Analysis.ItemAnalysisList) { item.Usage /= mainItem.Quantity; item.Quantity = mainItem.CountAnalyzedItemQuantity(item.Usage); } }