Exemplo n.º 1
0
 public void wrModel(WrMod mode, Mod mod)
 {
     string doc_name = mode.ToString();
     Log.set("Model.wrModel(" + doc_name + ")");
     DateTime t0 = DateTime.Now;
     Docs doc = Docs.getDoc(doc_name, create_if_notexist: true, reset: true);
     doc.Reset();
     switch (mode)
     {
         case WrMod.ModelINFO:   // общая информация о модели: имя, директория, MD5 и др
             doc.wrDocSetForm("HDR_ModelINFO", 1, AutoFit: true);
             string adr = mod.adrCity;
             if (mod.adrStreet != string.Empty) adr += ", " + mod.adrStreet;
             doc.wrDocForm(mod.name, adr, mod.dir, mod.phase
                 , sDat(mod.date), mod.MD5
                 , sInt(mod.elements.Count), sDat(mod.pricingDate), mod.pricingMD5);
             break;
         case WrMod.Materials:   // сводка по материалам, их типам (бетон, сталь и др)
             doc.wrDocSetForm("FORM_Materials", 3, AutoFit: true);
             foreach (var mGr in mod.elmMgroups)
             {
                 doc.wrDocForm(mGr.mat, mGr.totalVolume, mGr.totalWeight, mGr.totalPrice);
             }
             break;
         case WrMod.Suppliers:   // сводка по поставщикам проекта (контакты, URL прайс-листа, закупки)
             doc.wrDocSetForm("FORM_ModSupplierLine", 4, AutoFit: true);
             foreach (var s in mod.Suppliers)
             {
                 doc.wrDocForm(s.Name, s.Url, s.City, s.Index, s.Street, s.Telephone);
             }
             break;
         case WrMod.Rules:       // перечень Правил, используемых для обработки модели
             if (mod.Rules.Count == 0) Msg.F("Can't write TSmatchINFO.xlsx/Rules");
             doc.wrDocSetForm("FORM_RuleLine");
             foreach (var rule in mod.Rules)
             {
                 doc.wrDocForm(sDat(rule.date), rule.sSupl, rule.sCS, rule.text);
             }
             break;
         case WrMod.Report:      // отчет по сопоставлению групп <материал, профиль> c прайс-листами поставщиков
             doc.wrDocSetForm("FORM_Report", AutoFit: true);
             int n = 1;
             foreach (var gr in mod.elmGroups)
             {
                 string compDescription = "", suplName = "", csName = "";
                 if(!string.IsNullOrEmpty(gr.SupplierName))
                 {
                     suplName = gr.SupplierName;
                     csName = gr.CompSetName;
                     compDescription = gr.compDescription;
                 }
                 doc.wrDocForm(n++, gr.Mat, gr.Prf
                     , sDbl00(gr.totalLength), sDbl(gr.totalWeight), sDbl(gr.totalVolume)
                     , compDescription, suplName, csName
                     , sDbl(gr.totalWeight), sDbl(gr.totalPrice));
             }
             doc.isChanged = true;
             doc.saveDoc();
             //--- string - Summary
             double sumWgh = 0, sumPrice = 0;
             int iGr = doc.i0;
             foreach (var gr in mod.elmGroups)
             {
                 double? w = doc.Body.Double(iGr, Decl.REPORT_SUPL_WGT);
                 double? p = doc.Body.Double(iGr++, Decl.REPORT_SUPL_PRICE);
                 sumWgh += (w == null) ? 0 : (double)w;
                 sumPrice += (p == null) ? 0 : (double)p;
             }
             doc.wrDocSetForm("FORM_Report_Sum", AutoFit: true);
             doc.wrDocForm(sumWgh, sumPrice);
             break;
     }
     doc.isChanged = true;
     doc.saveDoc();
     log.Info("Время записи в файл \"" + doc_name + "\"\t t= " + (DateTime.Now - t0).ToString() + " сек");
     Log.exit();
 }
Exemplo n.º 2
0
 public void wrModel(WrMod mode)
 {
     string doc_name = mode.ToString();
     Log.set("Model.wrModel(" + doc_name + ")");
     DateTime t0 = DateTime.Now;
     Docs doc = Docs.getDoc(doc_name);
     doc.Reset();
     switch (mode)
     {
         case WrMod.ModelINFO:   // общая информация о модели: имя, директория, MD5 и др
             doc.wrDocSetForm("HDR_ModelINFO", 1, AutoFit: true);
             doc.wrDocForm(name, dir, Phase, date, MD5, elementsCount);
             break;
         case WrMod.Raw:         // элементы с атрибутами, как они прочитаны из модели
             doc.wrDocSetForm("FORM_RawLine", 2, AutoFit: true);
             foreach (var elm in elements)
             {
                 double w = elm.weight;                          // elm.weight - weight [kg];
                 double v = elm.volume; // / 1000 / 1000 / 1000;     // elm.volume [mm3] -> [m3] 
                 doc.wrDocForm(elm.guid, elm.mat, elm.mat_type, elm.prf, elm.length, w, v);
             }
             break;
         case WrMod.Materials:   // сводка по материалам, их типам (бетон, сталь и др)
             doc.wrDocSetForm("FORM_Materials", 3, AutoFit: true);
             foreach (var mGr in elmMgroups)
             {
                 doc.wrDocForm(mGr.mat, mGr.totalVolume, mGr.totalWeight, mGr.totalPrice);
             }
             break;
         case WrMod.Suppliers:   // сводка по поставщикам проекта (контакты, URL прайс-листа, закупки)
             doc.wrDocSetForm("FORM_ModSupplierLine", 4, AutoFit: true);
             foreach (var s in Suppliers)
             {
                 doc.wrDocForm(s.name, s.Url, s.City, s.index, s.street, s.telephone);
             }
             break;
         case WrMod.Rules:       // перечень Правил, используемых для обработки модели
             doc.wrDocSetForm("HDR_ModRules", 1, AutoFit: true);
             doc.wrDocForm(strListRules);
             doc.wrDocSetForm("FORM_ModRuleLine");
             foreach (var rule in Rules)
             {
                 doc.wrDocForm(rule.Supplier.name, rule.CompSet.name, rule.text);
             }
             break;
         case WrMod.Report:      // отчет по сопоставлению групп <материал, профиль> c прайс-листами поставщиков
             doc.wrDocSetForm("FORM_Report", AutoFit: true);
             int n = 1;
             foreach (var gr in elmGroups)
             {
                 string foundDescr = "", suplName = "", csName = "";
                 if (gr.match != null && gr.match.ok == Mtch.OK.Match)
                 {
                     foundDescr = gr.match.component.Str(SType.Description);
                     suplName = gr.match.rule.Supplier.name;
                     csName = gr.match.rule.CompSet.name;
                 }
                 doc.wrDocForm(n++, gr.mat, gr.prf
                     , gr.totalLength, gr.totalWeight, gr.totalVolume
                     , foundDescr, suplName, csName
                     , gr.totalWeight, gr.totalPrice);
             }
             doc.isChanged = true;
             doc.saveDoc();
             //--- string - Summary
             double sumWgh = 0, sumPrice = 0;
             int iGr = doc.i0;
             foreach (var gr in elmGroups)
             {
                 double? w = doc.Body.Double(iGr, Decl.REPORT_SUPL_WGT);
                 double? p = doc.Body.Double(iGr++, Decl.REPORT_SUPL_PRICE);
                 sumWgh += (w == null) ? 0 : (double)w;
                 sumPrice += (p == null) ? 0 : (double)p;
             }
             doc.wrDocSetForm("FORM_Report_Sum", AutoFit: true);
             doc.wrDocForm(sumWgh, sumPrice);
             break;
     }
     doc.isChanged = true;
     doc.saveDoc();
     log.Info("Время записи в файл \"" + doc_name + "\"\t t= " + (DateTime.Now - t0).ToString() + " сек");
     Log.exit();
 }