Example #1
0
 /// <summary>
 /// Поиск номера военнослужащего в группе.
 /// </summary>
 /// <param name="root"></param>
 /// <param name="group"></param>
 /// <returns></returns>
 private int getGroupIndex(cRsrcsNode root, string group)
 {
     foreach (cRsrcsNode n in root.Nodes)
     {
         if (String.Compare(n.Group, group) == 0)
         {
             return(n.Index);
         }
     }
     return(-1);
 }
Example #2
0
        /// <summary>
        /// Разворачивание списка. Подсчет некоторых данных.
        /// </summary>
        /// <param name="treeRoot">Дерево, которое будет развернуто.</param>
        /// <param name="targetList">Одномерный массив с развернутым деревом.</param>
        /// <param name="busy">Количество отсутствующего лс.</param>
        /// <param name="fact">На лицо.</param>
        /// <param name="busyContract">Отсутствующие контрактники.</param>
        /// <param name="factContract">Отсутствующие срочники.</param>
        /// <returns>Количество строк в развернутом дереве.</returns>
        protected int mapTreeToList(cRsrcsNode treeRoot, List <cRsrcsNode> targetList, ref int busy, ref int fact, ref int busyContract, ref int factContract)
        {
            cRsrcsNode node;
            int        all = 1, soldiers = 0;

            for (int i = 0; i < treeRoot.Nodes.Count; i++)
            {
                node = treeRoot.Nodes[i];
                targetList.Add(node);
                if (node._soldier == null)
                {
                    all     += mapTreeToList(node, targetList, ref busy, ref fact, ref busyContract, ref factContract);
                    soldiers = 0;
                }
                else
                {
                    soldiers++;
                    targetList[targetList.Count - 1].Index = soldiers;

                    // Подсчёт личного состава:
                    if (String.IsNullOrEmpty(node._soldier.task))                     // Солдат не занят:
                    {
                        if (node._soldier.contract)
                        {
                            factContract++;
                        }
                        fact++;
                    }
                    else                     // Занят:
                    {
                        if (node._soldier.contract)
                        {
                            busyContract++;
                        }
                        busy++;
                    }
                }
            }
            return(all + soldiers);
        }
Example #3
0
        /// <summary>
        /// Формирование дерева с результатом.
        /// </summary>
        //private void insertSoldier(int table, int index, string parsingString, cRsrcsNode parent, int deep, string nariad, string nariadGroup, bool kontrakt, bool free)
        public void insertSoldier(cSoldier soldier, cRsrcsNode parent, int index, int deep)
        {
            // Добавляем солдата в список, если он не скрыт:
            if (!soldier.inUse)
            {
                return;
            }
            // Вспомогательные переменные:
            string group;             // Ищем в parent группу с именем group:

            // Определяем, какого служащего добавляем. Свободного или нет:
            if (String.IsNullOrEmpty(soldier.task))             // Свободного:
            {
                group = getGroupName(soldier.place, deep);
                if ((deep == 0 && group == null) || (deep == 1 && group == null))
                {
                    return;
                }
                parent.Count++;                 // Количество личного состава в поддереве.
                if (group == null)              // значит элемент записываем в parent:
                {
                    parent.Nodes.Add(new cRsrcsNode(soldier, index, deep));
                }
                else                 // Необходимо дальше искать группу для элемента:
                {
                    int ind = getGroupIndex(parent, group);
                    if (ind == -1)                     // Группу с таким именем не нашли, создаем новую:
                    {
                        cRsrcsNode n = new cRsrcsNode(null, parent.Nodes.Count, deep + 1);
                        n.Group = group;
                        parent.Nodes.Add(n);
                        insertSoldier(soldier, n, index, deep + 1);
                    }
                    else
                    {
                        insertSoldier(soldier, parent.Nodes[ind], index, deep + 1);
                    }
                }
            }
            else             // Добавление столбцов с нарядами:
            {
                switch (deep)
                {
                case 0:
                    group = getGroupName(soldier.place, 0);
                    break;

                case 1:
                    group = getTaskCategory(soldier.task);
                    break;

                case 2:
                    group = soldier.task;
                    break;

                default:
                    group = null;
                    break;
                }
                parent.Count++;                 // Количество личного состава в поддереве.
                if (group == null)
                {
                    parent.Nodes.Add(new cRsrcsNode(soldier, index, deep));                     // ???.
                }
                else
                {
                    int ind = getGroupIndex(parent, group);
                    if (ind == -1)                     // Группу с таким именем не нашли, создаем новую:
                    {
                        cRsrcsNode n = new cRsrcsNode(null, parent.Nodes.Count, deep + 1);
                        n.Group = group;
                        parent.Nodes.Add(n);
                        insertSoldier(soldier, n, index, deep + 1);
                    }
                    else
                    {
                        insertSoldier(soldier, parent.Nodes[ind], index, deep + 1);
                    }
                }
            }
        }
Example #4
0
        protected override String getVariableHtml(int variableIndex)
        {
            switch (variableIndex)
            {
            case 0:
                string     result = "";              // HTML-код расхода.
                Boolean    otherColor;               // Чередование светлых и темных строк.
                cRsrcsNode table, record;            // Текущая таблица (deep = 1; например 2 АВТР или АРВ), заголовок.
                cSoldier   soldier;
                int        maxRows;                  // Максимальное количество строк в таблице.
                int        i, j, k, busy, fact, busyContract, factContract;
                // Создание дерева с результатом (говнокод):
                cRsrcsNode tree = new cRsrcsNode(null, -1, 0);
                // ..Незанятые контрактники и срочники:
                for (i = 0; i < cPp.db.soldiers.list.Count; i++)
                {
                    soldier = (cSoldier)cPp.db.soldiers.list[i];
                    // Добавляем солдата в список, если он в штате.
                    if (soldier.contract && _contract && String.IsNullOrEmpty(soldier.task))
                    {
                        tree.insertSoldier(soldier, tree, i, 0);
                    }
                }
                for (i = 0; i < cPp.db.soldiers.list.Count; i++)
                {
                    soldier = (cSoldier)cPp.db.soldiers.list[i];
                    // Добавляем солдата в список, если он в штате.
                    if (!soldier.contract && String.IsNullOrEmpty(soldier.task))
                    {
                        tree.insertSoldier(soldier, tree, i, 0);
                    }
                }
                // ..Занятые контрактники и срочники:
                for (i = 0; i < cPp.db.soldiers.list.Count; i++)
                {
                    soldier = (cSoldier)cPp.db.soldiers.list[i];
                    // Добавляем солдата в список, если он в штате.
                    if (soldier.contract && _contract && cRsrcsNode.getTaskCategory(soldier.task) == String.Empty)
                    {
                        tree.insertSoldier(soldier, tree, i, 0);
                    }
                }
                for (i = 0; i < cPp.db.soldiers.list.Count; i++)
                {
                    soldier = (cSoldier)cPp.db.soldiers.list[i];
                    // Добавляем солдата в список, если он в штате.
                    if (soldier.contract && _contract && !String.IsNullOrEmpty(cRsrcsNode.getTaskCategory(soldier.task)))
                    {
                        tree.insertSoldier(soldier, tree, i, 0);
                    }
                }
                for (i = 0; i < cPp.db.soldiers.list.Count; i++)
                {
                    soldier = (cSoldier)cPp.db.soldiers.list[i];
                    // Добавляем солдата в список, если он в штате.
                    if (!soldier.contract && cRsrcsNode.getTaskCategory(soldier.task) == String.Empty)
                    {
                        tree.insertSoldier(soldier, tree, i, 0);
                    }
                }
                for (i = 0; i < cPp.db.soldiers.list.Count; i++)
                {
                    soldier = (cSoldier)cPp.db.soldiers.list[i];
                    // Добавляем солдата в список, если он в штате.
                    if (!soldier.contract && !String.IsNullOrEmpty(cRsrcsNode.getTaskCategory(soldier.task)))
                    {
                        tree.insertSoldier(soldier, tree, i, 0);
                    }
                }
                // Формирование HTML-кода расхода:
                for (i = 0; i < tree.Nodes.Count; i++)                         // Цикл по таблицам:
                {
                    maxRows = -1;
                    busy    = fact = busyContract = factContract = 0;
                    // Подготовка данных и запись заголовка таблицы:
                    table   = tree.Nodes[i];                                          // i-я таблица.
                    result += String.Format(@"<td{0}><table style=""width:100%; margin-bottom:8px;""><tr><td class=""place"">{1}</td></tr></table><table class=""list"" style=""width:100%; margin-bottom:8px;""><tr class=""light"">", i > 0 ? @" style=""padding-left:8px;""" : "", table.Group);
                    List <List <cRsrcsNode> > list = new List <List <cRsrcsNode> >(); // Создание таблицы.
                    for (j = 0; j < table.Nodes.Count; j++)
                    {
                        record = table.Nodes[j];
                        list.Add(new List <cRsrcsNode>());                                                          // Добавление столбца с военнослужащими.
                        k = mapTreeToList(record, list[j], ref busy, ref fact, ref busyContract, ref factContract); // Разворачивание столбца в одномерный массив.
                        if (k > maxRows)
                        {
                            maxRows = k;
                        }
                        if (String.IsNullOrEmpty(record.Group))
                        {
                            result += @"<td class=""header group"">&nbsp;</td>";
                        }
                        else
                        {
                            result += String.Format(@"<td class=""header group"">{0} - <strong>{1}</strong></td>", record.Group, record.Count);                                     // Запись группы.
                        }
                    }
                    result += @"</tr>";
                    // Вывод строк с военнослужащими в таблицу:
                    otherColor = false;
                    for (j = 0; j < maxRows - 1; j++)
                    {
                        otherColor = !otherColor;                                 // Чередование светлых и темных строк.
                        result    += String.Format(@"<tr class=""{0}"">", otherColor ? "dark" : "light");
                        for (k = 0; k < table.Nodes.Count; k++)                   // Цикл по столбцам таблицы:
                        {
                            if (list[k].Count > j)                                // Не пустая строка:
                            {
                                record = list[k][j];

                                if (record._soldier == null)                                                                                     // Группа:
                                {
                                    result += String.Format(@"<td class=""group"">{0} - <strong>{1}</strong></td>", record.Group, record.Count); // Вывод группы.
                                }
                                else                                                                                                             // Солдат:
                                {
                                    result += String.Format(@"<td>{0}. {1}</td>",
                                                            record.Index,
                                                            record._soldier.contract ?
                                                            String.Format(@"<strong>{0}</strong>",
                                                                          !String.IsNullOrEmpty(cRsrcsNode.getTaskCategory(record._soldier.task)) ?
                                                                          record._soldier.name :
                                                                          cPp.getStringWithoutTags(record._soldier.name)) :
                                                            !String.IsNullOrEmpty(cRsrcsNode.getTaskCategory(record._soldier.task)) ?
                                                            record._soldier.name :
                                                            cPp.getStringWithoutTags(record._soldier.name));                                                     // Вывод солдата.
                                }
                            }
                            else                                     // Пустая строка:
                            {
                                result += @"<td></td>";
                            }
                        }
                        result += @"</tr>";
                    }
                    if (_contract)
                    {
                        result += String.Format(@"</table>
					<!-- Общее количество личного состава. -->
					<table class=""totals"" style=""float:right;"">
						<tr>
							<td></td>
							<td class=""italic"">Контр.</td>
							<td class=""italic"">Срочн.</td>
							<td class=""italic"">Всего</td>
						</tr>
						<tr>
							<td class=""italic right"">По списку</td>
							<td class=""total"">{0}</td>
							<td class=""total"">{1}</td>
							<td class=""total"">{2}</td>
						</tr>
						<tr>
							<td class=""italic right"">На лицо</td>
							<td class=""total"">{3}</td>
							<td class=""total"">{4}</td>
							<td class=""total"">{5}</td>
						</tr>
						<tr>
							<td class=""italic right"">Отсутствует</td>
							<td class=""total"">{6}</td>
							<td class=""total"">{7}</td>
							<td class=""total"">{8}</td>
						</tr>
					</table></td>"                    ,
                                                busyContract + factContract,               // Контрактников по списку.
                                                busy + fact - busyContract - factContract, // Срочников по списку.
                                                busy + fact,                               // Всего по списку.
                                                factContract,                              // Контрактников на лицо.
                                                fact - factContract,                       // Срочников на лицо.
                                                fact,                                      // Всего на лицо.
                                                busyContract,                              // Отсутствует контрактников.
                                                busy - busyContract,                       // Отсутствует срочников.
                                                busy);                                     // Отсутствует всего.
                    }
                    else
                    {
                        result += String.Format(@"</table>
					<!-- Общее количество только срочников. -->
					<table class=""totals"" style=""float:right;"">
						<!-- tr>
							<td></td>
							<td class=""italic"">Срочн.</td>
						</tr -->
						<tr>
							<td class=""italic right"">По списку</td>
							<td class=""total"">{0}</td>
						</tr>
						<tr>
							<td class=""italic right"">На лицо</td>
							<td class=""total"">{1}</td>
						</tr>
						<tr>
							<td class=""italic right"">Отсутствует</td>
							<td class=""total"">{2}</td>
						</tr>
					</table></td>"                    ,
                                                busy + fact,           // Всего по списку.
                                                fact,                  // Всего на лицо.
                                                busy);                 // Отсутствует всего.
                    }
                }
                return(result);

            default:
                int toDay = _date.AddDays(1).Day, toMonth = _date.AddMonths(1).Month;
                return(String.Format("{0}-{1} {2} {3} г.", _date.Day, toDay, toDay < _date.Day ? cReport.getMonth(toMonth) : cReport.getMonth(_date.Month), toMonth < _date.Month ? _date.AddYears(1).Year : _date.Year));
            }
        }