Система управления проектами территориально-распределенной IT-компании
Стандарты, определяющие требования к квалификации участников управления проектами. Разработка программного средства, представляющего собой Web-приложение, организующее совместную работу над проектом сотрудников, территориально удалённых друг от друга.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 22.11.2015 |
Размер файла | 4,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
При определении трудоемкости программного средства учитываются объем программного средства (в тысячах строк условного кода), объем документации (тысяч строк), новизна и сложность программного средства, язык программирования, степень использования типовых (стандартных программ).
На основании общего объема программного средства определяется нормативная трудоемкость (Тн) по таблицам. Нормативная трудоемкость устанавливается с учетом сложности программного средства. Выделяется три группы сложности, в которых учтены следующие составляющие программного средства; языковой интерфейса, ввод-вывод, организация данных, режим работы, операционная и техническая среда. Кроме того, устанавливаются дополнительные коэффициенты сложности программного средства.
С учетом дополнительного коэффициента сложности Ксл рассчитывается общая трудоемкость программного средства
(6.3) |
гдеТн - нормативная трудоемкость, человеко-дней;
Ксл - дополнительный коэффициент сложности, ед.
Тн = 464 человеко-дня - по данным, приведенным в приложении 3 методического пособия [41];
Ксл = 0,12 - по данным, приведенным в методическом пособии приложении 4 таблице 8.2.
То = 464 · (0,12+1) = 519,68 (человеко-дней).
Расчет основной заработной платы
В соответствии с «Рекомендациями по применению «Единой тарифной сетки» рабочих и служащих народного хозяйства» и тарифными разрядами и коэффициентами должностей каждому исполнителю устанавливается разряд и тарифный коэффициент.
Месячная тарифная ставка каждого исполнителя определяется путем умножения действующей месячной тарифной ставки 1-го разряда на тарифный коэффициент, соответствующий установленному тарифному разряду
(6.4) |
где Сзм - тарифная ставка за месяц, руб.;
Сзм1 - тарифная ставка 1-го разряда за месяц, руб.;
Кт - тарифный коэффициент, ед.
Сзм1 = 400 000 руб. - по исходным данным;
Кт = 3,25 - по исходным данным, приведенным в таблице 5.1.
Сзм = 400 000 · 3,25 = 1 340 000 (руб.).
Основная заработная плата исполнителей на конкретное ПС рассчитывается по формуле
(6.5) |
где Соз - основная заработная плата, руб.;
Сзд - тарифная ставка за день, руб.;
То - общая трудоемкость программного средства, человеко-дней;
Кп - коэффициент естественных потерь рабочего времени, ед.;
Кпр - коэффициент премирования, ед.
То = 519,69 человеко-дней - подсчитано по формуле (6.3);
Кп = 1,2 - по исходным данным;
Кпр=1,2 - по исходным данным.
Cоз=(руб.).
Расчет дополнительной заработной платы
Дополнительная заработная плата на конкретное программное средство включает выплаты, предусмотренные законодательством о труде (оплата отпусков, льготных часов, времени выполнения государственных обязанностей и других выплат, не связанных с основной деятельностью исполнителей), и определяется по нормативу в процентах к основной заработной плате по следующей формуле
(6.6) |
где Соз - основная заработная плата, млн. руб.;
Ндз - норматив дополнительной заработной платы, %.
Соз = 49,019 млн. руб. - подсчитано по формуле (6.5);
Ндз = 15% - по исходным данным, приведенным в таблице 6.1.
(руб.).
Расчет отчислений в Фонд социальной защиты населения
Отчисления в Фонд социальной защиты населения (ФСЗН) определяются в соответствии с действующими законодательными актами по нормативу в процентном отношении к фонду основной и дополнительной зарплаты исполнителей
(6.7) |
гдеСоз - основная заработная плата, руб.;
Сдз - дополнительная заработная плата на конкретное ПС, млн. руб.;
Нфсзн - норматив отчислений в Фонд социальной защиты населения, %;
Соз = 49,019 млн. руб. - подсчитано по формуле (6.5);
Сдз = 7,352 руб. - подсчитано по формуле (6.6);
Нфсзн = 34% - по исходным данным, приведенным в таблице 5.1.
(руб.).
Расчет отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний
Отчисления по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний определяются в соответствии с действующими законодательными актами в зависимости от уровня риска отрасли, к которой относится организация-разработчик
(6.8) |
гдеСоз - основная заработная плата, млн. руб.;
Сдз - дополнительная заработная плата на конкретное ПС, руб.;
Нбгс - норматив отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний, %;
Соз = 49,019 млн. руб. - подсчитано по формуле (6.5);
Сдз = 7,352 млн.руб. - подсчитано по формуле (6.6);
Нбгс = 0,5% - по исходным данным, приведенным в таблице 5.1.
(руб.).
Расчет расходов на материалы
Расходы на материалы определяются с учетом действующих нормативов. По данной статье отражаются расходы на магнитную носители, перфокарты, бумагу, красящие ленты и другие материалы, необходимые для разработки программного средства. Нормы расхода материалов в суммарном выражении определяются в расчете на 100 строк исходного код. Сумма затрат материалов рассчитывается по формуле
(6.9) |
гдеVo' - скорректированный объем ПС, условных машино-команд;
Нм - норма расхода материалов в расчете на 100 строк исходного кода ПС, руб.;
Vo' = 20 052 условных машино-команд - подсчитано по формуле (6.2);
Нм = 380 руб. - по данным, приведенным в приложении 5 методического пособия [15].
(руб.).
Расчет расходов на оплату машинного времени
Расходы включают оплату машинного времени, необходимого для разработки и отладки программного средства, которое определяется по нормативам (в машино-часах) на 100 строк исходного кода машинного времени в зависимости от характера решаемых задач и типа ПЭВМ
(6.10) |
гдеСмв - сумма расходов на оплату машинного времени, млн. руб.;
Цм - цена одного машино-часа, руб.;
Vo' - скорректированный объем ПС, условных машино-команд;
Нмв - норматив расхода машинного времени на отладку 100 строк исходного кода, машино-часов;
Цм = 506,42 руб. - по исходным данным, приведенным в таблице 6.1;
Vo' = 20 052 условных машино-команд - подсчитано по формуле (6.2).
Так как информационная система выполняет общесистемные задачи, то Нмв = 12 машино-часов - по данным, приведенным в приложении 6 методического пособия [41].
Смв= (руб).
Расчет прочих прямых затрат
Расходы на конкретное программное средство включают затраты на приобретение и подготовку специальной научно-технической информации и специальной литературы. Определяются по нормативу в процентах к основной заработной плате
(6.11) |
гдеСпз - сумма прочих затрат, млн. руб.;
Соз - основная заработная плата, млн. руб.;
Нпз - норматив прочих затрат в целом по организации, %.
Соз = 49 019 118 руб. - подсчитано по формуле (6.5);
Нпз = 15% - по исходным данным, приведенным в таблице 6.1.
руб.
Расчет накладных расходов
Данные затраты, связанные с необходимостью содержания аппарата управления, а также с расходами на общехозяйственные нужды, относятся на конкретное программное средство по нормативу в процентном отношении к основной заработной плате исполнителей
(6.12) |
гдеСоз - основная заработная плата, млн. руб.;
Ннр - норматив накладных расходов в целом по организации, %;
Соз = 49 019 118 руб. - подсчитано по формуле (6.5);
Ннр = 120% - по исходным данным, приведенным в таблице 6.1.
руб.
Расчет суммы расходов на разработку программного средства
Общая сумма расходов на программное средство рассчитывается по формуле
(6.13) |
гдеСоз - основная заработная плата, млн. руб.;
Сдз - дополнительная заработная плата на конкретное ПС, руб.;
Сфсзн - сумма отчислений в Фонд социальной защиты населения, млн. руб.;
Сбгс - сумма отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний, млн. руб.;
См - сумма расходов на материалы, млн. руб.;
Ссо - сумма расходов на спецоборудование, млн. руб.;
Смв - сумма расходов на оплату машинного времени, млн. руб.;
Спз - сумма прочих затрат, млн. руб.;
Снр - сумма накладных расходов, млн. руб.;
Соз = 49 019 118 руб. - подсчитано по формуле (6.5);
Сдз = 7 352 867 руб. - подсчитано по формуле (6.6);
Сфсзн = 19 166 475 руб. - подсчитано по формуле (6.7);
Сбгс =281 859 руб. - подсчитано по формуле (6.8);
См = 76 197 руб. - подсчитано по формуле (6.9);
Смв = 1 218 568 руб. - подсчитано по формуле (6.10);
Спз = 7 352 867 руб. - подсчитано по формуле (6.11);
Снр = 58 822 941,77руб. - подсчитано по формуле (6.12) .
Ср= руб.
Расчет расходов на сопровождение и адаптацию
Кроме того, организация-разработчик осуществляет затраты на сопровождение и адаптацию программного средства, которые определяются по нормативу
(6.14) |
гдеСр - сумма расходов на разработку ПС, млн. руб.;
Нрса - норматив расходов на сопровождение и адаптацию, %;
Ср = 143,290 млн. руб. - подсчитано по формуле (6.13);
Нрса = 10% - по исходным данным.
руб.
Расчет полной себестоимости разработки программного средства
Общая сумма расходов на разработку (с затратами на сопровождение и адаптацию) - полная себестоимость программного средства определяется по формуле
(6.15) |
гдеСр - сумма расходов на разработку ПС, млн. руб.;
Срса - сумма расходов на сопровождение и адаптацию ПС, млн. руб.;
Ср = 143,290 млн. руб. - подсчитано по формуле (6.13);
Срса =14,329 млн. руб. - подсчитано по формуле (6.14).
(руб.)
Определение отпускной цены на программное средство
Отпускная цена определяется на основании цены разработчика, которая формируется на основе показателя рентабельности продукции. Рентабельность и прибыль по создаваемому программному средству определяются исходя из результатов анализа рыночных условий, переговоров с заказчиком (потребителем) и согласования с ним отпускной цены, включающей дополнительно налог на добавленную стоимость и отчисления в целевые бюджетные фонды из выручки от реализации продукции.
Прибыль рассчитывается по формуле
(6.16) |
гдеСп - полная себестоимость программного средства, млн. руб.;
Урн - уровень рентабельности ПС, %;
Сп = 157,620 млн. руб. - подсчитано по формуле (6.15);
Урн = 35% - по исходным данным, приведенным в таблице 6.1.
Прогнозируемая цена разработчика программного средства без налогов
(6.17) |
гдеСп - полная себестоимость ПС, млн. руб.;
Ппс - прибыль от реализации, млн. руб.;
Сп = 157,620 млн. руб. - подсчитано по формуле (6.15);
Ппс= 55,167 млн. руб. - подсчитано по формуле (6.16).
(руб.)
Сумма налога на добавленную стоимость
(6.18) |
где Цп - прогнозируемая цена разработчика ПС, млн. руб.;
Нндс - ставка НДС, %;
Цп = 212, 787 млн. руб. - подсчитано по формуле (6.17);
Нндс = 20% - по исходным данным, приведенным в таблице 6.1.
(руб.)
Прогнозируемая отпускная цена
(6.19) |
гдеЦп - прогнозируемая цена разработчика ПС, млн. руб.;
НДС - сумма налога на добавленную стоимость, млн. руб.
руб.
Результаты и выводы по расчетам
Таблица 6.3 содержит результаты расчетов экономических показателей проведенных в данном разделе. Так же данные по расчётам затрат представлены в приложении К.
Таблица 6.3 - Расчёт затрат на создание ПС и отпускной цены
Наименование показателей |
Обозначения |
Рассчитанные значения показателей, руб. |
|
1 |
2 |
3 |
|
Основная заработная плата |
Соз |
49 019 118 |
|
Дополнительная заработная плата |
Сдз |
7 352 867 |
|
Отчисления в ФСЗН |
Сфсзн |
19 166 475 |
|
Отчисления по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний |
Сбгс |
281 859 |
|
Расходы на материалы |
См |
76 197 |
|
Расходы на оплату машинного времени |
Смв |
1 218 568 |
|
Прочие прямые затраты |
Спз |
7 352 867 |
|
Расчет накладных расходов |
Снр |
58 822 941 |
|
Общая сумма расходов на ПС |
Ср |
143 290 896 |
|
Расходы на сопровождение и адаптацию |
Срса |
14 329 089 |
|
Полная себестоимость разработки ПС |
Сп |
157 619 985 |
|
Прибыль |
Ппс |
55 166 995 |
|
Планируемая цена без НДС |
Цп |
212 786 980 |
|
Сумма налога на добавленную стоимость |
НДС |
42 557 396 |
|
Прогнозируемая отпускная цена с НДС |
Цо |
255 344 376 |
Как видно из проведённых расчётов большую часть прогнозируемой цены разрабатываемого программного средства составляют основная заработная плата - 49 019 118 рублей и накладные расходы 58 822 941 рублей.
Прибыль от реализации программного средства составляет 55 166 995 руб., прогнозируемая цена разработчика программного средства 212 786 980 руб., прогнозируемая отпускная цена 255 344 376 руб.
Автоматизированные системы управления проектами позволяют руководителю легко и быстро отслеживать протекание всех процессов и направлять деятельность сотрудников в нужное русло. Прозрачность операций дает возможность всегда быть в курсе дел и на каждом этапе корректировать направление хода процесса.
При работе с проектами ИТ использование специализированных методов управления проектами будет очень полезным для непрерывного прогресса, приводящего к большей успешности в результате.
Заключение
Во время выполнения дипломного проекта была проанализирована краткая история теории управления проектами, рассмотрены основные термины и определения в данной области. Выявлены достоинства и недостатки существующих систем управления проектами, на основе которых и было принято решение о разработке новой системы. Также были рассмотрены основные стандарты в области управления процессом разработки программных средств. Проведён анализ наиболее популярных методов (методологий) разработки программного обеспечения. Для разработки дипломного проекта была выбрана итеративная модель, так как осуществлялось выполнение работ параллельно с непрерывным анализом полученных результатов и корректировкой предыдущих этапов работы. Это позволило на ранних стадиях выявить ошибки предыдущего этапа жизненного цикла проекта. Были описаны технологии и средства разработки, использовавшиеся в процессе создания приложения.
В рамках дипломного проекта было разработано программное средство, представляющее собой систему управления проектами территориально-распределенной IT-компании. Основными функциями системы являются организация совместной работы сотрудников, территориально удалённых друг от друга, работа с клиентами, работа над проектом, отслеживание хода выполнения проекта, подсчет затраченного на работу времени и средств, подбор сотрудника для выполнения каждой задачи в зависимости от его знаний, умений и загруженности.
Был подробно описан процесс разработки программного средства, процесс настройки хранилища данных. Описаны функции ролей и на их основе представлена UML диаграмма вариантов использования системы. Также были представлены структура приложения, описание использовавшихся элементов управления, диаграмма классов и функционал, который реализуют данные классы. Подробно рассмотрен процесс использования разработанного приложения разными типами пользователей, показан функционал системы. Приложение содержит административную, клиентскую часть и часть для персонала компании (сотрудники и менеджер).
По результатам дипломного проектирования сделаны доклады на 63 и 64 научно-техническую конференцию студентов и магистрантов, проводимые в УО «Белорусский государственный технологический университет» в 2012 и 2013 году, а также на VI республиканской научной конференции студентов и аспирантов «Новые математические методы и компьютерные технологии в проектировании, производстве и научных исследованиях», проводимой УО «Гомельский государственный университет имени Франциска Скорины» в 2013 году.
Список использованных источников
Управление проектами. PM Live [Электронный ресурс] / История управления проектами. - Режим доступа: http://pmlive.ru/articles/77. - Дата доступа: 20.03.2013.
Официальный сайт Microsoft Office [Электронный ресурс] / Краткая история управления проектами - Project. - Режим доступа: http://office.microsoft. com/ru-ru/project-help/HA001135342.aspx. - Дата доступа: 20.03.2013.
Управление проектами в соответствии с ISO 21500 [Электронный ресурс] / Концепция управления проектами. - Режим доступа: http://iso21500.ru/. - Дата доступа: 20.03.2013.
Википедия - свободная энциклопедия [Электронный ресурс] / Программное обеспечение для управления проектами - Режим доступа: http://ru.wikipedia.org/wiki/Программное_обеспечение_для_управления_проектами. - Дата доступа: 25.02.2013.
Википедия - свободная энциклопедия [Электронный ресурс] / Управление проектами. - Режим доступа: http://ru.wikipedia.org/wiki/ Управление_проектами. - Дата доступа: 25.02.2013.
Википедия - свободная энциклопедия [Электронный ресурс] / Microsoft Project. - Режим доступа: http://ru.wikipedia.org/wiki/Microsoft_Project. - Дата доступа: 25.03.2013.
SoftKey.info - Онлайн журнал о мире программирования [Электронный ресурс] / Open Workbench - управляем проектами. - Режим доступа: http://www.softkey.info/reviews/review3060.php. - Дата доступа: 25.03.2013.
Википедия - свободная энциклопедия [Электронный ресурс] / Atlassian_JIRA. - Режим доступа: http://ru.wikipedia.org/wiki/Atlassian_JIRA. - Дата доступа: 25.02.2013.
Software Development and Collaboration Tools|Atlassian [Electronic resource] / Products, JIRA. - 2013. - Mode of access: http://www.atlassian.com/ software/jira/overview. - Date of access: 15.02.2013.
Overview - Redmine [Electronic resource]. - Jean-Philippe Lang, 2006-2013. - Mode of access: http://www.redmine.org. - Date of access: 15.03.2013.
Википедия - свободная энциклопедия [Электронный ресурс] / Redmine. - Режим доступа: http://ru.wikipedia.org/wiki/Redmine. - Дата доступа: 25.02.2013.
Википедия - свободная энциклопедия [Электронный ресурс] / Trac. - режим доступа: http://ru.wikipedia.org/wiki/Trac. - Дата доступа: 25.03.2013.
Приложение А
Исходный код и схемы основных элементов базы данных
Листинг создания таблиц базы данных
CREATE TABLE [dbo].[ClientData]
(
[UserId] [uniqueidentifier] NOT NULL,
[ClientName] [nvarchar](256) NOT NULL,
[ClientDescription] [nvarchar](256) NULL,
CONSTRAINT [PK_ClientData] PRIMARY KEY CLUSTERED
(
[UserId] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
ON [PRIMARY]
ALTER TABLE [dbo].[ClientData] WITH CHECK ADD CONSTRAINT [FK_ClientData_aspnet_Users] FOREIGN KEY([UserId])
REFERENCES [dbo].[aspnet_Users] ([UserId])
ALTER TABLE [dbo].[ClientData] CHECK CONSTRAINT [FK_ClientData_aspnet_Users]
CREATE TABLE [dbo].[Employee](
[UserId] [uniqueidentifier] NOT NULL,
[LastName] [nvarchar](256) NOT NULL,
[FirstName] [nvarchar](256) NOT NULL,
[Patronumic] [nvarchar](256) NOT NULL,
[Salary] [money] NULL,
[Status] [bit] NULL,
[Experience] [float] NULL,
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED
(
[UserId] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [FK_Employee_aspnet_Users] FOREIGN KEY([UserId])
REFERENCES [dbo].[aspnet_Users] ([UserId])
ALTER TABLE [dbo].[Employee] CHECK CONSTRAINT [FK_Employee_aspnet_Users]
CREATE TABLE [dbo].[Jobs](
[JobId] [uniqueidentifier] NOT NULL,
[JobName] [nvarchar](max) NOT NULL,
[Start] [date] NOT NULL,
[Stop] [date] NOT NULL,
[Post] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Jobs] PRIMARY KEY CLUSTERED
([JobId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[UserInJobs](
[UserId] [uniqueidentifier] NOT NULL,
[JobId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_UserInJobs] PRIMARY KEY CLUSTERED
(
[UserId] ASC,
[JobId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[UserInJobs] WITH CHECK ADD CONSTRAINT [FK_UserInJobs_Employee] FOREIGN KEY([UserId])
REFERENCES [dbo].[Employee] ([UserId])
ALTER TABLE [dbo].[UserInJobs] CHECK CONSTRAINT [FK_UserInJobs_Employee]
ALTER TABLE [dbo].[UserInJobs] WITH CHECK ADD CONSTRAINT [FK_UserInJobs_Jobs] FOREIGN KEY([JobId])
REFERENCES [dbo].[Jobs] ([JobId])
ALTER TABLE [dbo].[UserInJobs] CHECK CONSTRAINT [FK_UserInJobs_Jobs]
CREATE TABLE [dbo].[Language](
[LanguageId] [uniqueidentifier] NOT NULL,
[LanguageName] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Language] PRIMARY KEY CLUSTERED
(
[LanguageId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[LanguageInEmployee](
[LanguageId] [uniqueidentifier] NOT NULL,
[UserId] [uniqueidentifier] NOT NULL,
[StartDate] [int] NULL,
[StopDate] [int] NULL,
[Experience] [int] NULL,
CONSTRAINT [PK_LanguageInEmployee] PRIMARY KEY CLUSTERED
(
[LanguageId] ASC,
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[LanguageInEmployee] WITH CHECK ADD CONSTRAINT [FK_LanguageInEmployee_Employee] FOREIGN KEY([UserId])
REFERENCES [dbo].[Employee] ([UserId])
ALTER TABLE [dbo].[LanguageInEmployee] CHECK CONSTRAINT [FK_LanguageInEmployee_Employee]
ALTER TABLE [dbo].[LanguageInEmployee] WITH CHECK ADD CONSTRAINT [FK_LanguageInEmployee_Language] FOREIGN KEY([LanguageId])
REFERENCES [dbo].[Language] ([LanguageId])
ALTER TABLE [dbo].[LanguageInEmployee] CHECK CONSTRAINT [FK_LanguageInEmployee_Language]
CREATE TABLE [dbo].[ProjectsData](
[ProjectId] [uniqueidentifier] NOT NULL,
[Status] [bit] NULL,
[ProjectName] [nvarchar](256) NOT NULL,
[startData] [date] NOT NULL,
[stopData] [date] NOT NULL,
[budget] [money] NOT NULL,
[ProjectDescription] [nvarchar](max) NULL,
[UserId] [uniqueidentifier] NULL,
[Result] [float] NULL,
CONSTRAINT [PK_ProjectsData] PRIMARY KEY CLUSTERED
(
[ProjectId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[ProjectInClient](
[ProjectId] [uniqueidentifier] NOT NULL,
[ClientId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_ProjectInClient] PRIMARY KEY CLUSTERED
(
[ProjectId] ASC,
[ClientId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[ProjectInClient] WITH CHECK ADD CONSTRAINT [FK_ProjectInClient_ClientData] FOREIGN KEY([ClientId])
REFERENCES [dbo].[ClientData] ([UserId])
ALTER TABLE [dbo].[ProjectInClient] CHECK CONSTRAINT [FK_ProjectInClient_ClientData]
ALTER TABLE [dbo].[ProjectInClient] WITH CHECK ADD CONSTRAINT [FK_ProjectInClient_ProjectsData] FOREIGN KEY([ProjectId])
REFERENCES [dbo].[ProjectsData] ([ProjectId])
ALTER TABLE [dbo].[ProjectInClient] CHECK CONSTRAINT [FK_ProjectInClient_ProjectsData]
CREATE TABLE [dbo].[LanguageInProject](
[LanguageId] [uniqueidentifier] NOT NULL,
[ProjectId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_LanguageInProject] PRIMARY KEY CLUSTERED
(
[LanguageId] ASC,
[ProjectId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[LanguageInProject] WITH CHECK ADD CONSTRAINT [FK_LanguageInProject_Language] FOREIGN KEY([LanguageId])
REFERENCES [dbo].[Language] ([LanguageId])
ALTER TABLE [dbo].[LanguageInProject] CHECK CONSTRAINT [FK_LanguageInProject_Language]
ALTER TABLE [dbo].[LanguageInProject] WITH CHECK ADD CONSTRAINT [FK_LanguageInProject_ProjectsData] FOREIGN KEY([ProjectId])
REFERENCES [dbo].[ProjectsData] ([ProjectId])
ALTER TABLE [dbo].[LanguageInProject] CHECK CONSTRAINT [FK_LanguageInProject_ProjectsData]
CREATE TABLE [dbo].[Phase](
[PhaseId] [uniqueidentifier] NOT NULL,
[PhaseName] [nvarchar](max) NOT NULL,
[StartDate] [date] NOT NULL,
[StopDate] [date] NOT NULL,
[Description] [nvarchar](max) NULL,
CONSTRAINT [PK_Phase] PRIMARY KEY CLUSTERED
(
[PhaseId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[PhaseInProject](
[ProjectId] [uniqueidentifier] NOT NULL,
[PhaseId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_PhaseInProject] PRIMARY KEY CLUSTERED
(
[ProjectId] ASC,
[PhaseId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[PhaseInProject] WITH CHECK ADD CONSTRAINT [FK_PhaseInProject_Phase] FOREIGN KEY([PhaseId])
REFERENCES [dbo].[Phase] ([PhaseId])
ALTER TABLE [dbo].[PhaseInProject] CHECK CONSTRAINT [FK_PhaseInProject_Phase]
ALTER TABLE [dbo].[PhaseInProject] WITH CHECK ADD CONSTRAINT [FK_PhaseInProject_ProjectsData] FOREIGN KEY([ProjectId])
REFERENCES [dbo].[ProjectsData] ([ProjectId])
ALTER TABLE [dbo].[PhaseInProject] CHECK CONSTRAINT [FK_PhaseInProject_ProjectsData]
CREATE TABLE [dbo].[Post](
[PostId] [uniqueidentifier] NOT NULL,
[Description] [nvarchar](max) NULL,
[PostName] [nvarchar](256) NOT NULL,
CONSTRAINT [PK_Post] PRIMARY KEY CLUSTERED
(
[PostId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[PostInEmployee](
[PostId] [uniqueidentifier] NOT NULL,
[UserId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_PostInEmployee] PRIMARY KEY CLUSTERED
([PostId] ASC,
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[PostInEmployee] WITH CHECK ADD CONSTRAINT [FK_PostInEmployee_Employee] FOREIGN KEY([UserId])
REFERENCES [dbo].[Employee] ([UserId])
ALTER TABLE [dbo].[PostInEmployee] CHECK CONSTRAINT [FK_PostInEmployee_Employee]
ALTER TABLE [dbo].[PostInEmployee] WITH CHECK ADD CONSTRAINT [FK_PostInEmployee_Post] FOREIGN KEY([PostId])
REFERENCES [dbo].[Post] ([PostId])
ALTER TABLE [dbo].[PostInEmployee] CHECK CONSTRAINT [FK_PostInEmployee_Post]
CREATE TABLE [dbo].[Tasks](
[TaskId] [uniqueidentifier] NOT NULL,
[TaskName] [nvarchar](256) NOT NULL,
[taskDescription] [nvarchar](256) NULL,
[startData] [date] NOT NULL,
[stopData] [date] NOT NULL,
[spentTime] [real] NULL,
[comment] [nvarchar](256) NULL,
CONSTRAINT [PK_Tasks] PRIMARY KEY CLUSTERED
(
[TaskId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[TaskInPhase](
[PhaseId] [uniqueidentifier] NOT NULL,
[TaskId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_TaskInPhase] PRIMARY KEY CLUSTERED
(
[PhaseId] ASC,
[TaskId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[TaskInPhase] WITH CHECK ADD CONSTRAINT [FK_TaskInPhase_Phase] FOREIGN KEY([PhaseId])
REFERENCES [dbo].[Phase] ([PhaseId])
ALTER TABLE [dbo].[TaskInPhase] CHECK CONSTRAINT [FK_TaskInPhase_Phase]
ALTER TABLE [dbo].[TaskInPhase] WITH CHECK ADD CONSTRAINT [FK_TaskInPhase_Tasks] FOREIGN KEY([TaskId])
REFERENCES [dbo].[Tasks] ([TaskId])
ALTER TABLE [dbo].[TaskInPhase] CHECK CONSTRAINT [FK_TaskInPhase_Tasks]
CREATE TABLE [dbo].[TasksInProject](
[TaskId] [uniqueidentifier] NOT NULL,
[ProjectId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_TasksInProject] PRIMARY KEY CLUSTERED
(
[TaskId] ASC,
[ProjectId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[TasksInProject] WITH CHECK ADD CONSTRAINT [FK_TasksInProject_Tasks] FOREIGN KEY([TaskId])
REFERENCES [dbo].[Tasks] ([TaskId])
ALTER TABLE [dbo].[TasksInProject] CHECK CONSTRAINT [FK_TasksInProject_Tasks]
CREATE TABLE [dbo].[Technology](
[TechnologyId] [uniqueidentifier] NOT NULL,
[TechnologyName] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Technology] PRIMARY KEY CLUSTERED
(
[TechnologyId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[TechnologyInEmployee](
[TechnologyId] [uniqueidentifier] NOT NULL,
[UserId] [uniqueidentifier] NOT NULL,
[StartDate] [int] NULL,
[StopDate] [int] NULL,
[Experience] [int] NULL,
CONSTRAINT [PK_TechnologyInEmployee] PRIMARY KEY CLUSTERED
(
[TechnologyId] ASC,
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[TechnologyInEmployee] WITH CHECK ADD CONSTRAINT [FK_TechnologyInEmployee_Employee] FOREIGN KEY([UserId])
REFERENCES [dbo].[Employee] ([UserId])
ALTER TABLE [dbo].[TechnologyInEmployee] CHECK CONSTRAINT [FK_TechnologyInEmployee_Employee]
ALTER TABLE [dbo].[TechnologyInEmployee] WITH CHECK ADD CONSTRAINT [FK_TechnologyInEmployee_Technology] FOREIGN KEY([TechnologyId])
REFERENCES [dbo].[Technology] ([TechnologyId])
ALTER TABLE [dbo].[TechnologyInEmployee] CHECK CONSTRAINT [FK_TechnologyInEmployee_Technology]
CREATE TABLE [dbo].[TexnologyInProject](
[TechnologyId] [uniqueidentifier] NOT NULL,
[ProjectId] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_TexnologyInProject] PRIMARY KEY CLUSTERED
(
[TechnologyId] ASC,
[ProjectId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[TexnologyInProject] WITH CHECK ADD CONSTRAINT [FK_TexnologyInProject_ProjectsData] FOREIGN KEY([ProjectId])
REFERENCES [dbo].[ProjectsData] ([ProjectId])
ALTER TABLE [dbo].[TexnologyInProject] CHECK CONSTRAINT [FK_TexnologyInProject_ProjectsData]
ALTER TABLE [dbo].[TexnologyInProject] WITH CHECK ADD CONSTRAINT [FK_TexnologyInProject_Technology] FOREIGN KEY([TechnologyId])
REFERENCES [dbo].[Technology] ([TechnologyId])
ALTER TABLE [dbo].[TexnologyInProject] CHECK CONSTRAINT [FK_TexnologyInProject_Technology]
Приложение А.2
Схемы представлений базы данных и листинги их создания
CREATE VIEW [dbo].[vw_Client]
WITH SCHEMABINDING
AS
SELECT dbo.aspnet_Users.UserName, dbo.aspnet_Users.UserId, dbo.ClientData.ClientName, dbo.ClientData.ClientDescription, dbo.aspnet_Membership.Email,
dbo.aspnet_Membership.CreateDate, dbo.aspnet_Membership.LastLoginDate, dbo.aspnet_Membership.LastPasswordChangedDate,
dbo.aspnet_Membership.Comment
FROM dbo.aspnet_Users INNER JOIN
dbo.ClientData ON dbo.aspnet_Users.UserId = dbo.ClientData.UserId INNER JOIN
dbo.aspnet_Membership ON dbo.aspnet_Users.UserId = dbo.aspnet_Membership.UserId
CREATE VIEW [dbo].[vw_Employee]
AS
SELECT dbo.Employee.UserId, dbo.Employee.LastName, dbo.Employee.FirstName, dbo.Employee.Patronumic, dbo.PostInEmployee.PostId, dbo.aspnet_Membership.Email,
dbo.aspnet_Users.UserName, dbo.aspnet_Membership.CreateDate, dbo.aspnet_Membership.LastLoginDate, dbo.aspnet_Membership.LastPasswordChangedDate,
dbo.aspnet_Membership.Comment, dbo.Employee.Salary, dbo.Employee.Status, dbo.Employee.Experience
FROM dbo.aspnet_Membership INNER JOIN
dbo.aspnet_Users ON dbo.aspnet_Membership.UserId = dbo.aspnet_Users.UserId INNER JOIN
dbo.Employee ON dbo.aspnet_Users.UserId = dbo.Employee.UserId INNER JOIN
dbo.PostInEmployee ON dbo.Employee.UserId = dbo.PostInEmployee.UserId
CREATE VIEW [dbo].[vw_Project]
AS
SELECT dbo.ProjectInClient.ClientId, dbo.ProjectsData.ProjectId, dbo.ProjectsData.Status, dbo.ProjectsData.ProjectName, dbo.ProjectsData.startData,
dbo.ProjectsData.stopData, dbo.ProjectsData.budget, dbo.ProjectsData.ProjectDescription, dbo.ProjectsData.UserId, dbo.ProjectsData.Result
FROM dbo.ProjectsData INNER JOIN
dbo.ProjectInClient ON dbo.ProjectsData.ProjectId = dbo.ProjectInClient.ProjectId
CREATE VIEW [dbo].[v_tasks]
AS
SELECT dbo.TaskInPhase.PhaseId, dbo.TasksInProject.ProjectId, dbo.EmployeeInTasks.UserId, dbo.Tasks.*
FROM dbo.Tasks INNER JOIN
dbo.TaskInPhase ON dbo.Tasks.TaskId = dbo.TaskInPhase.TaskId INNER JOIN
dbo.TasksInProject ON dbo.Tasks.TaskId = dbo.TasksInProject.TaskId INNER JOIN
dbo.EmployeeInTasks ON dbo.Tasks.TaskId = dbo.EmployeeInTasks.TaskId
Листинги создания хранимых процедур
CREATE PROCEDURE [dbo].[SaveClient]
-- Add the parameters for the stored procedure here
@UserId uniqueidentifier,
@ClientName nvarchar(256),
@ClientDescription nvarchar(256)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF (SELECT COUNT(*) FROM ClientData WHERE UserId=@UserId)>0
BEGIN
UPDATE ClientData SET ClientName = @ClientName,ClientDescription=@ClientDescription WHERE UserId=@UserId;
END
ELSE
BEGIN
INSERT INTO ClientData(UserId,ClientName,ClientDescription) VALUES(@UserId,@ClientName,@ClientDescription);
END
END
CREATE PROCEDURE [dbo].[SaveEmployee]
-- Add the parameters for the stored procedure here
@UserId uniqueidentifier,
@LastName nvarchar(256),
@FirstName nvarchar(256),
@Patronumic nvarchar(256),
@PostId uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF (SELECT COUNT(*) FROM Employee WHERE UserId=@UserId)>0
BEGIN
UPDATE Employee SET FirstName = @FirstName,LastName=@LastName,Patronumic = @Patronumic WHERE UserId=@UserId;
UPDATE PostInEmployee SET PostId = @PostId WHERE UserId = @UserId;
END
ELSE
BEGIN
INSERT INTO Employee(UserId,FirstName,LastName,Patronumic) VALUES(@UserId,@FirstName,@LastName,@Patronumic);
INSERT INTO PostInEmployee(PostId,UserId) VALUES(@PostId,@UserId);
END
END
CREATE PROCEDURE [dbo].[SaveJobs]
-- Add the parameters for the stored procedure here
@JobId uniqueidentifier,
@JobName nvarchar(256),
@Start date,
@Stop date,
@Post nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF (SELECT COUNT(*) FROM Jobs WHERE JobId = @JobId)>0
BEGIN
UPDATE Jobs SET JobName = @JobName, Start=@Start, Stop=@Stop, Post=@Post WHERE JobId =@JobId;
END
ELSE
BEGIN
INSERT INTO Jobs(JobId,JobName,Start,Stop,Post) VALUES(@JobId,@JobName,@Start,@Stop,@Post);
END
END
CREATE PROCEDURE [dbo].[SaveJobsInEmployee]
-- Add the parameters for the stored procedure here
@JobId uniqueidentifier,
@UserId uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO UserInJobs(UserId,JobId) VALUES(@UserId, @JobId);
END
CREATE PROCEDURE [dbo].[SaveLangInEmployee]
-- Add the parameters for the stored procedure here
@LanguageId uniqueidentifier,
@UserId uniqueidentifier,
@StartDate int,
@StopDate int,
@Experience int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO LanguageInEmployee(LanguageId,UserId,StartDate,StopDate,Experience) VALUES(@LanguageId,@UserId,@StartDate,@StopDate, @Experience);
END
CREATE PROCEDURE [dbo].[SaveLangInProject]
-- Add the parameters for the stored procedure here
@LanguageId uniqueidentifier,
@ProjectId uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO LanguageInProject(LanguageId,ProjectId) VALUES(@LanguageId,@ProjectId);
END
CREATE PROCEDURE [dbo].[SaveLanguage]
-- Add the parameters for the stored procedure here
@LanguageId uniqueidentifier,
@LanguageName nvarchar(256)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF (SELECT COUNT(*) FROM Language WHERE LanguageId = @LanguageId)>0
BEGIN
UPDATE Language SET LanguageName = @LanguageName WHERE LanguageId =@LanguageId;
END
ELSE
BEGIN
INSERT INTO Language(LanguageId,LanguageName) VALUES(@LanguageId,@LanguageName);
END
END
CREATE PROCEDURE [dbo].[SavePhase]
-- Add the parameters for the stored procedure here
@PhaseId uniqueidentifier,
@PhaseName nvarchar(256),
@StartDate date,
@StopDate date,
@Description nvarchar(256)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF (SELECT COUNT(*) FROM Phase WHERE PhaseId = @PhaseId)>0
BEGIN
UPDATE Phase SET PhaseName = @PhaseName,StartDate = @StartDate,StopDate = @StopDate,Description = @Description WHERE PhaseId =@PhaseId;
END
ELSE
BEGIN
INSERT INTO Phase(PhaseId,PhaseName,StartDate,StopDate,Description) VALUES(@PhaseId,@PhaseName,@StartDate,@StopDate,@Description);
END
END
CREATE PROCEDURE [dbo].[SavePhaseInProject]
-- Add the parameters for the stored procedure here
@ProjectId uniqueidentifier,
@PhaseId uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO PhaseInProject(ProjectId, PhaseId) VALUES(@ProjectId, @PhaseId);
END
CREATE PROCEDURE [dbo].[SavePost]
-- Add the parameters for the stored procedure here
@PostId uniqueidentifier,
@PostName nvarchar(256),
@Description nvarchar(MAX)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF (SELECT COUNT(*) FROM Post WHERE PostId = @PostId)>0
BEGIN
UPDATE Post SET PostName = @PostName,[Description]=@Description WHERE PostId =@PostId;
END
ELSE
BEGIN
INSERT INTO Post(PostId,PostName,[Description]) VALUES(@PostId,@PostName,@Description);
END
END
CREATE PROCEDURE [dbo].[SaveProject]
-- Add the parameters for the stored procedure here
@ProjectId uniqueidentifier,
@ClientId uniqueidentifier,
@ProjectName nvarchar(256),
@ProjectDescription nvarchar(256),
@startData date,
@stopData date,
@budget money,
@Status bit,
@UserId uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF (SELECT COUNT(*) FROM ProjectsData WHERE ProjectId=@ProjectId)>0
BEGIN
UPDATE ProjectsData SET ProjectName = @ProjectName,startData = @startData, stopData = @stopData, ProjectDescription=@ProjectDescription, Status=@Status,UserId=@UserId WHERE ProjectId=@ProjectId;
UPDATE ProjectInClient SET ClientId=@ClientId WHERE ProjectId=@ProjectId;
END
ELSE
BEGIN
INSERT INTO ProjectsData(ProjectId,Status,ProjectName,startData,stopData,budget,ProjectDescription) VALUES(@ProjectId,@Status,@ProjectName,@startData,@stopData,@budget,@ProjectDescription);
INSERT INTO ProjectInClient(ProjectId,ClientId) VALUES (@ProjectId,@ClientId);
END
END
CREATE PROCEDURE [dbo].[SaveTask]
-- Add the parameters for the stored procedure here
@TaskId uniqueidentifier,
@ProjectId uniqueidentifier,
@TaskName nvarchar(256),
@taskDescription nvarchar(256),
@start_data date,
@stop_data date,
@spentTime real,
@comment nvarchar(256),
@UserId uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF (SELECT COUNT(*) FROM Tasks WHERE TaskId=@TaskId)>0
BEGIN
UPDATE Tasks SET TaskName = @TaskName,startData = @start_data, stopData = @stop_data, taskDescription=@taskDescription, spentTime = @spentTime, comment = @comment WHERE TaskId=@TaskId;
UPDATE EmployeeInTasks SET UserId=@UserId WHERE TaskId=@TaskId;
END
ELSE
BEGIN
INSERT INTO Tasks(TaskId,TaskName,startData,stopData,taskDescription,spentTime,comment ) VALUES(@TaskId,@TaskName,@start_data,@stop_data,@taskDescription,@spentTime,@comment);
INSERT INTO EmployeeInTasks(TaskId,UserId) VALUES (@TaskId,@UserId);
INSERT INTO TasksInProject(ProjectId,TaskId) VALUES (@ProjectId,@TaskId);
END
END
CREATE PROCEDURE [dbo].[SaveTaskInPhase]
-- Add the parameters for the stored procedure here
@PhaseId uniqueidentifier,
@TaskId uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO TaskInPhase(PhaseId,TaskId) VALUES(@PhaseId,@TaskId);
END
CREATE PROCEDURE [dbo].[SaveTechInEmployee]
-- Add the parameters for the stored procedure here
@TechnologyId uniqueidentifier,
@UserId uniqueidentifier,
@StartDate int,
@StopDate int,
@Experience int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO TechnologyInEmployee(TechnologyId,UserId,StartDate,StopDate,Experience) VALUES(@TechnologyId,@UserId,@StartDate,@StopDate, @Experience);
END
CREATE PROCEDURE [dbo].[SaveTechInProject]
-- Add the parameters for the stored procedure here
@TechnologyId uniqueidentifier,
@ProjectId uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO TexnologyInProject(TechnologyId,ProjectId) VALUES(@TechnologyId,@ProjectId);
END
CREATE PROCEDURE [dbo].[SaveTechInProject]
-- Add the parameters for the stored procedure here
@TechnologyId uniqueidentifier,
@ProjectId uniqueidentifier
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO TexnologyInProject(TechnologyId,ProjectId) VALUES(@TechnologyId,@ProjectId);
END
CREATE PROCEDURE [dbo].[SaveTechnology]
-- Add the parameters for the stored procedure here
@TechnologyId uniqueidentifier,
@TechnologyName nvarchar(256)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF (SELECT COUNT(*) FROM Technology WHERE TechnologyId = @TechnologyId)>0
BEGIN
UPDATE Technology SET TechnologyName = @TechnologyName WHERE TechnologyId =@TechnologyId;
END
ELSE
BEGIN
INSERT INTO Technology(TechnologyId,TechnologyName) VALUES(@TechnologyId,@TechnologyName);
END
END
Листинги создания функций
CREATE FUNCTION [dbo].[V_JobsInEmployee] (@UserId uniqueidentifier)
RETURNS TABLE
AS
RETURN
SELECT dbo.Jobs.JobId, dbo.Employee.UserId, dbo.Jobs.JobName
FROM dbo.UserInJobs INNER JOIN
dbo.Jobs ON dbo.UserInJobs.JobId = dbo.Jobs.JobId INNER JOIN
dbo.Employee ON dbo.UserInJobs.UserId = dbo.Employee.UserId
WHERE (dbo.Employee.UserId = @UserId)
CREATE FUNCTION [dbo].[V_LanguagesInEmployee] (@UserId uniqueidentifier)
RETURNS TABLE
AS
RETURN
SELECT dbo.Language.LanguageId, dbo.Employee.UserId, dbo.Language.LanguageName, dbo.LanguageInEmployee.Experience
FROM dbo.LanguageInEmployee INNER JOIN
dbo.Language ON dbo.LanguageInEmployee.LanguageId = dbo.Language.LanguageId INNER JOIN
dbo.Employee ON dbo.LanguageInEmployee.UserId = dbo.Employee.UserId
WHERE (dbo.Employee.UserId = @UserId)
CREATE FUNCTION [dbo].[V_LanguagesInProject] (@ProjectId uniqueidentifier)
RETURNS TABLE
AS
RETURN
SELECT dbo.Language.LanguageId, dbo.ProjectsData.ProjectId, dbo.Language.LanguageName
FROM dbo.LanguageInProject INNER JOIN
dbo.Language ON dbo.LanguageInProject.LanguageId = dbo.Language.LanguageId INNER JOIN
dbo.ProjectsData ON dbo.LanguageInProject.ProjectId = dbo.ProjectsData.ProjectId
WHERE (dbo.ProjectsData.ProjectId = @ProjectId)
CREATE FUNCTION [dbo].[V_PhaseInProject] (@ProjectId uniqueidentifier)
RETURNS TABLE
AS
RETURN
SELECT dbo.Phase.*, dbo.ProjectsData.ProjectId
FROM dbo.PhaseInProject INNER JOIN
dbo.Phase ON dbo.PhaseInProject.PhaseId = dbo.Phase.PhaseId INNER JOIN
dbo.ProjectsData ON dbo.PhaseInProject.ProjectId = dbo.ProjectsData.ProjectId
WHERE (dbo.ProjectsData.ProjectId = @ProjectId)
CREATE FUNCTION [dbo].[V_ProjectInPhase] (@PhaseId uniqueidentifier)
RETURNS TABLE
AS
RETURN
SELECT dbo.vw_Project.*
FROM dbo.PhaseInProject INNER JOIN
dbo.vw_Project ON dbo.PhaseInProject.ProjectId = dbo.vw_Project.ProjectId
WHERE (dbo.PhaseInProject.PhaseId = @PhaseId)
CREATE FUNCTION [dbo].[V_TasksInPhase] (@PhaseId uniqueidentifier)
RETURNS TABLE
AS
RETURN
SELECT *
FROM v_tasks
WHERE v_tasks.PhaseId = @PhaseId
CREATE FUNCTION [dbo].[V_TechnologysInEmployee] (@UserId uniqueidentifier)
RETURNS TABLE
AS
RETURN
SELECT dbo.Employee.UserId, dbo.Technology.TechnologyName, dbo.Technology.TechnologyId,dbo.TechnologyInEmployee.Experience
FROM dbo.Technology INNER JOIN
dbo.TechnologyInEmployee ON dbo.Technology.TechnologyId = dbo.TechnologyInEmployee.TechnologyId INNER JOIN
dbo.Employee ON dbo.TechnologyInEmployee.UserId=dbo.Employee.UserId
WHERE dbo.Employee.UserId = @UserId;
CREATE FUNCTION [dbo].[V_TechnologysInProject] (@ProjectId uniqueidentifier)
RETURNS TABLE
AS
RETURN
SELECT dbo.ProjectsData.ProjectId, dbo.Technology.TechnologyName, dbo.Technology.TechnologyId
FROM dbo.Technology INNER JOIN
dbo.TexnologyInProject ON dbo.Technology.TechnologyId = dbo.TexnologyInProject.TechnologyId INNER JOIN
dbo.ProjectsData ON dbo.TexnologyInProject.ProjectId = dbo.ProjectsData.ProjectId
WHERE dbo.ProjectsData.ProjectId = @ProjectId;
Приложение В
Листинги классов приложения
Класс DBUtils
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
namespace Model.Helpers
{
class DBUtils
{
public delegate void TGenerateListFromReader<T>(SqlDataReader returnData, ref List<T> tempList);
/// <summary>
/// get connection string from web.config
/// </summary>
public static string ConnectionString
{
get
{
var conStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
if (string.IsNullOrEmpty(conStr))
throw (new NullReferenceException("ConnectionString configuration is in web.config. It should contain <connectionStrings> </connectionStrings>"));
return conStr;
}
}
protected static void TExecuteReaderCmd<T>(SqlCommand sqlCmd, TGenerateListFromReader<T> gcfr, ref List<T> List)
{
if (ConnectionString == string.Empty)
throw (new ArgumentOutOfRangeException("ConnectionString"));
if (sqlCmd == null)
throw (new ArgumentNullException("sqlCmd"));
using (SqlConnection cn = new SqlConnection(ConnectionString))
{
sqlCmd.Connection = cn;
cn.Open();
SqlDataReader sqlDataReader = sqlCmd.ExecuteReader();
gcfr(sqlDataReader, ref List);
cn.Close();
}
}
protected static bool TExecuteModifyCmd(SqlCommand sqlCmd )
{
if (string.IsNullOrEmpty(ConnectionString))
throw (new ArgumentOutOfRangeException("ConnectionString"));
if (sqlCmd == null)
throw (new ArgumentNullException("sqlCmd"));
int result;
using (SqlConnection cn = new SqlConnection(ConnectionString))
{
sqlCmd.Connection = cn;
try
{
sqlCmd.Connection.Open();
}
catch (Exception)
{
throw (new ArgumentOutOfRangeException("ConnectionError"));
}
try
{
result = sqlCmd.ExecuteNonQuery();
}
catch (Exception e)
{
result = 0;
}
}
return result != -1 }
public static void AddParameterToSql(SqlCommand sqlCmd, string parameterName, object value)
{
sqlCmd.Parameters.AddWithValue(parameterName, value ?? DBNull.Value);
}
public static string GetStringFromSql(SqlDataReader returnData, string parameterName)
{
if (!returnData[parameterName].Equals(DBNull.Value))
return returnData[parameterName].ToString();
return string.Empty;
}
public static int? GetInt32FromSql(SqlDataReader returnData, string parameterName)
{
if (!returnData[parameterName].Equals(DBNull.Value))
return Convert.ToInt32(returnData[parameterName]);
return null;
}
public static Guid? GetGuidFromSql(SqlDataReader returnData, string parameterName)
{
try
{
if (!returnData[parameterName].Equals(DBNull.Value) && IsGUID(returnData[parameterName].ToString()))
return new Guid(returnData[parameterName].ToString());
return null;
}
catch (Exception e)
{
var ex = e; }
return null;
}
private static bool IsGUID(string expression)
{
if (expression != null)
{
var guidRegEx = new Regex(@"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$");
return guidRegEx.IsMatch(expression);
}
return false;
}
public static bool? GetBooleanFromSql(SqlDataReader returnData, string ParameterName)
{
if (!returnData[ParameterName].Equals(DBNull.Value))
return Convert.ToBoolean(returnData[ParameterName].ToString());
return null;
}
public static DateTime? GetDateTimeFromSql(SqlDataReader returnData, string ParameterName)
{
if (!returnData[ParameterName].Equals(DBNull.Value))
try
{
return Convert.ToDateTime(returnData[ParameterName].ToString());
}
catch (FormatException)
{
return null;
}
return null;
}
public static Decimal? GetDecimalFromSql(SqlDataReader returnData, string ParameterName)
{
if (!returnData[ParameterName].Equals(DBNull.Value))
return Convert.ToDecimal(returnData[ParameterName]);
return null;
} }}
Класс ClientDB
namespace Model.Helpers
{
class ClientDB:DBUtils
{
private static void GenerateClientList(SqlDataReader returnData, ref List<Client> list)
{
while (returnData.Read())
{
var client = new Client();
var guidFromSql = GetGuidFromSql(returnData, "UserId");
if (guidFromSql != null) client.Id = guidFromSql.Value;
client.Name = GetStringFromSql(returnData, "ClientName");
client.Mail = GetStringFromSql(returnData, "Email");
client.Login = GetStringFromSql(returnData, "UserName");
client.Description = GetStringFromSql(returnData, "ClientDescription");
var dateTimeFromSql = GetDateTimeFromSql(returnData, "CreateDate");
if (dateTimeFromSql != null)
client.CreateDt = dateTimeFromSql.Value;
dateTimeFromSql = GetDateTimeFromSql(returnData, "LastLoginDate");
if (dateTimeFromSql.HasValue)
client.LastLoginDt = dateTimeFromSql.Value;
dateTimeFromSql = GetDateTimeFromSql(returnData, "LastPasswordChangedDate");
if (dateTimeFromSql.HasValue)
client.LastPasswordChangedDt = dateTimeFromSql.Value;
client.Comment = GetStringFromSql(returnData, "Comment");
list.Add(client);
}
}
public static Client GetClientById(Guid Id)
{
var sqlCmd = new SqlCommand("select * from vw_Client where UserId=@UserId ");
AddParameterToSql(sqlCmd, "@UserId", Id);
var clList = new List<Client>();
TExecuteReaderCmd(sqlCmd, GenerateClientList, ref clList);
return clList.Count > 0 ? clList[0] : null;
}
public static List<Client> GetClients()
{
var sqlCmd = new SqlCommand("select * from vw_Client");
var clList = new List<Client>();
TExecuteReaderCmd(sqlCmd, GenerateClientList, ref clList);
return clList;
}
/// <summary>
/// Сохранение данных о клиенте. Выполнение хранимой процедуры на сервере.
/// </summary>
/// <param name="client"></param>
public static void SaveClient(Client client)
{
var sqlCmd = new SqlCommand("SaveClient");
Подобные документы
Сущность управления проектами, этапы его реализации и необходимые для этого знания, порядок составления и назначение Плана управления проектом. Концепция тройственной ограниченности. Использование программы MS Oficce Project в управлении проектами.
реферат [24,9 K], добавлен 16.11.2009Разработка системы управления проектами для компании ЗАО "Диакон". Экономические параметры разработки и внедрения электронной информационной системы. Технология разработки программного обеспечения. Выбор типа графического интерфейса, его составляющие.
дипломная работа [1,4 M], добавлен 10.06.2014Проект программного продукта, представляющего собой веб-приложение в виде системы управления веб-контентом и предназначенного для быстрого создания простых сайтов. Функциональные требования в рамках языка UML. Разработка визуальных интерфейсов системы.
дипломная работа [5,0 M], добавлен 11.07.2012Необходимая терминология и основные программные продукты для управления проектами. Краткое ознакомление с системами: Project, Primavera, Spider Protect и Open Plan. Корпоративное управление проектами. Отличительные черты программного обеспечения СКПК.
контрольная работа [1,3 M], добавлен 13.09.2010Обзор рынка Информационных технологий. Современные автоматизированные системы управления проектами и их классификация. Open Plan (Welcom Software) - система, предлагающая решение по управлению проектами масштаба корпорации. Основные модули Open Plan.
курсовая работа [630,9 K], добавлен 24.02.2010Разработка методов сетевого планирования как способа управления проектами. Характеристика компьютерных программ Microsoft Project Server, Time Line and Sure Trak Project Manager, Open Plan, Primavera и Spider Project для автоматизации работы предприятий.
реферат [152,4 K], добавлен 10.02.2012Сущность логистического бизнес-процесса. Функциональная, инфологическая и даталогическая модели предметной области. Выбор языка и средства программирования. Разработка и описание программного обеспечения для автоматизации закупок на предприятии.
дипломная работа [4,8 M], добавлен 29.06.2012Использование офисного пакета Microsoft Project для управления проектами. Связь задач с помощью зависимостей, определяющих порядок выполнения задач относительно друг друга. Разбиение проекта на фазы. Представление плана работ с помощью диаграммы Ганта.
контрольная работа [40,4 K], добавлен 22.03.2012Общие принципы управления проектами как процесс планирования, организации и контроля за состоянием его задач и ресурсов. Инструменты управления проектами от Microsoft. Описание ресурсов и затрат. Контроль хода выполнения, технология подготовки отчетов.
лекция [1,6 M], добавлен 15.03.2014Принцип работы и задачи информационных систем управления проектами. Методы критического пути, анализа и оценки планов. Сетевые модель и график, виды путей. Информационный обмен между предприятиями, классификация информационных систем и их рынки сбыта.
контрольная работа [17,0 K], добавлен 18.11.2009