示例#1
0
        // Загрузка списка клиентов и контрактов из xml документа сформированного MS Access
        public void AccessXmlToClients(ListClients clients)
        {
            /* Закоментировано для варианта с добавлением новых записей
             * // Очищаем  все списки
             * Clients.clients.Clear();
             *
             * Clients.AllContracts.Clear();
             * Clients.AllServices.Clear();
             * Clients.AllNameWorks.Clear();
             * Clients.AllNameDevices.Clear();
             * Clients.AllAddInfo.Clear();
             */

            #region CultureInfo setting
            CultureInfo ci = Thread.CurrentThread.CurrentCulture;

            ci = (CultureInfo)ci.Clone();

            ci.NumberFormat.CurrencyGroupSeparator = " ";
            ci.NumberFormat.NumberDecimalSeparator = ".";

            Thread.CurrentThread.CurrentCulture = ci;
            #endregion

            foreach (XElement xe in xClients.Element("dataroot").Elements("Клиенты"))
            {//
                int    id   = int.Parse(xe.Element("КодКлиента").Value);
                string name = xe.Element("НазваниеКомпании").Value;
                string settlementAccount = xe.Element("АдресВыставленияСчета")?.Value;
                string city    = xe.Element("Город")?.Value;
                string address = xe.Element("ОбластьКрайРеспублика")?.Value;

                Client client;

                // Проверяем, есть ли клиент. Если нет - создаём
                if (clients.Contains(id))
                {
                    client = clients[id];
                }
                else
                {
                    client = new Client(name, id, settlementAccount, city, address);

                    clients.Add(client);
                }

                string svalue;

                IEnumerable <XElement> xelement = xe.Elements("Договоры");
                if (xelement != null)
                {
                    foreach (XElement element in xelement)
                    {
                        id = int.Parse(element.Element("КодЗаказа").Value);

                        if (Clients.AllContracts.ContainsKey(id))
                        {
                            continue;
                        }

                        svalue = element.Element("ДатаРазмещения")?.Value;

                        if (!DateTime.TryParse(svalue, out DateTime dt))
                        {
                            dt = DateTime.MinValue;
                        }

                        svalue = element.Element("НомерЗаказа")?.Value;
                        int number = (int)double.Parse(svalue ?? "0");

                        svalue = element.Element("Сумма")?.Value;
                        decimal summ = decimal.Parse(svalue ?? "0");

                        bool signed = (int.Parse(element.Element("Наличие_x0020_договора").Value) == 1);

                        string sfn = GetFileName(element.Element("ФайлДоговора")?.Value);

                        var regex = new Regex(@"(\.\.\\)|(/)|(\.\./)|%20");

                        string filename = regex.Replace(sfn,
                                                        (m) => {
                            if (m.Value == @"..\")
                            {
                                return(@"\");
                            }
                            if (m.Value == "../")
                            {
                                return(@"\");
                            }
                            if (m.Value == "%20")
                            {
                                return(" ");
                            }
                            return(@"\");
                        });

                        TypeContract tc;
                        if (filename == null)
                        {
                            tc = TypeContract.Contract;
                        }
                        else
                        {
                            tc = (filename.Contains("Договор"))
                                                   ? TypeContract.Contract     // Договор
                                                   : TypeContract.CWC;         // Акт приёмки сдачи работ
                        }

                        var contract = new Contract(client, id, dt, number, summ, signed, filename, tc);

                        // Получаем правильный путь к файлу договора
                        string path = Clients.GetPathFile(contract.FileName, Clients.DefaultPathFile);

                        if (path != null)
                        {
                            contract.LoadServicesFrom_xls(path); // загружаем список услуг договора
                        }

                        client.contracts.Add(contract);
                    }
                }
            }
        }
示例#2
0
        // Fill List clients and List contracts (foreach(Element))
        public void XmlToClientsAndContracts(ListClients clients)
        {
            // Очищаем  все списки
            Clients.clients.Clear();
            Clients.AllContracts.Clear();
            Clients.AllServices.Clear();


            #region CultureInfo setting
            CultureInfo ci = Thread.CurrentThread.CurrentCulture;

            ci = (CultureInfo)ci.Clone();

            ci.NumberFormat.CurrencyGroupSeparator = " ";
            ci.NumberFormat.NumberDecimalSeparator = ".";

            Thread.CurrentThread.CurrentCulture = ci;
            #endregion

            XElement xelm = xClients.Element("Clients").Element("CommonData");

            // загружаем общие данные, если они есть
            if (xelm != null)
            {
                // Загружаем списки наименований услуг, названий устройств, названий подразделений
                ReadListFromXml(Clients.AllNameWorks, xelm.Element("ListNameWorks")?.Elements());

                ReadListFromXml(Clients.AllNameDevices, xelm.Element("ListNameDevices")?.Elements());

                ReadListFromXml(Clients.AllAddInfo, xelm.Element("ListAddInfo")?.Elements(), "InfoString");

                // Загружаем список всех услуг
                IEnumerable <XElement> xelements = xelm.Element("ListServices")?.Elements();

                if (xelements != null)
                {
                    foreach (XElement xe in xelements)
                    {
                        int id = int.Parse(xe.Attribute("Id").Value);

                        var sv = new Service(Clients.AllNameWorks[int.Parse(xe.Element("NameWork").Attribute("Id").Value)].Name,
                                             Clients.AllNameDevices[int.Parse(xe.Element("NameDevice").Attribute("Id").Value)].Name,
                                             int.Parse(xe.Element("Subdivision").Attribute("Id").Value),
                                             int.Parse(xe.Element("Number").Value),
                                             decimal.Parse(xe.Element("Value").Value),
                                             id,
                                             Clients.AllAddInfo[int.Parse(xe.Element("AddInfo").Attribute("Id").Value)].Name);

                        sv.Add();
                    }
                }
            }

            // Загружаем список клиентов

            foreach (XElement xe in xClients.Element("Clients").Elements("Client"))
            {
                int    id   = int.Parse(xe.Attribute("ClientId").Value);
                string name = xe.Element("ClientName").Value;
                string settlementAccount = xe.Element("SettlementAccount")?.Value;
                string city    = xe.Element("City")?.Value;
                string address = xe.Element("Address")?.Value;

                if (clients.Contains(id))
                {   // Ошибка! Повтор идентификатора в xml файле
                }

                var client = new Client(name, id, settlementAccount, city, address);

                clients.Add(client);

                client.Subdivisions.Clear();

                // загружаем список подразделений данного клиента
                IEnumerable <XElement> xelement = xe.Element("Subdivisions")?.Elements();
                if (xelement != null)
                {
                    foreach (XElement element in xelement)
                    {
                        if (client.Subdivisions.ContainsValue(element.Value))
                        {// Ошибка! Повтор имени подразделения в xml файле
                        }

                        client.AddSubdivision(element.Value, int.Parse(element.Attribute("Id").Value));
                    }
                }

                // загружаем список договоров данного клиента
                xelement = xe.Element("Contracts")?.Elements();
                if (xelement != null)
                {
                    foreach (XElement element in xelement)
                    {
                        id = int.Parse(element.Attribute("ContractId").Value);

                        string svalue = element.Element("DateContract")?.Value;

                        if (!DateTime.TryParse(svalue, out DateTime dt))
                        {
                            dt = DateTime.MinValue;
                        }

                        svalue = element.Element("Number")?.Value;
                        int number = (int)double.Parse(svalue ?? "0");

                        svalue = element.Element("Summ")?.Value;
                        decimal summ = decimal.Parse(svalue ?? "0");

                        bool signed = bool.Parse(element.Element("Signed").Value);

                        var regex = new Regex(@"(\.\.\\)|(/)|(\.\./)|%20");

                        svalue = regex.Replace(element.Element("FileName")?.Value,
                                               (m) =>
                        {
                            if (m.Value == @"..\")
                            {
                                return(@"\");
                            }
                            if (m.Value == "../")
                            {
                                return(@"\");
                            }
                            if (m.Value == "%20")
                            {
                                return(" ");
                            }
                            return(@"\");
                        });

                        TypeContract tc;
                        if (svalue == null)
                        {
                            tc = TypeContract.Contract;
                        }
                        else
                        {
                            tc = (svalue.Contains("Акт"))
                                                   ? TypeContract.CWC       // Акт приёмки сдачи работ
                                                   : TypeContract.Contract; // Договор
                        }

                        var ctr = new Contract(client, id, dt, number, summ, signed, svalue, tc);

                        client.contracts.Add(ctr);

                        //
                        //  Здесь загружаем Services
                        //
                        IEnumerable <XElement> ServicesElements = element.Element("Services")?.Elements();

                        if (ServicesElements != null)
                        {
                            ctr.services.Clear();

                            foreach (XElement servelem in ServicesElements)
                            {
                                int idService = int.Parse(servelem.Attribute("Id").Value);

                                ctr.services.Add(idService);

                                var sv = Service.Svlist[idService];

                                // Увеличиваем счётчики использования компонентов услуги

                                client.NWCounts.IncrementValue(sv.Nw.Id);
                                client.NDCounts.IncrementValue(sv.Nd.Id);
                                client.AICounts.IncrementValue(sv.Ai.Id);
                            }
                        }
                    }
                }
            }
        }