Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ списками Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π‘Π£Π‘Π” для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π‘Π” Π² ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° Π‘Π£Π‘Π” Microsoft SQL Server. Π­Ρ‚Π° Π‘Π£Π‘Π” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΠ΅ΠΉ Microsoft ΠΈ ΠΏΠΎΠ΄Π΄Ρ€Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ модСль Π‘Π”. Основной ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ язык запросов — Transact-SQL, созданный совмСстно Microsoft ΠΈ Sybase. Transact-SQL являСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ стандарта ANSI/ISO структурированного языка запросов (SQL) с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ. Π‘Π£Π‘Π” SQL Server… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ списками Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ государствСнноС Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ‡Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ образования ΠΠ°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ унивСрситСт «ΠœΠ­Π˜»

ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΊ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ «Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…»

Π’Π΅ΠΌΠ°: «Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ списками Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ»

Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ Π³Ρ€ΡƒΠΏΠΏΡ‹ А-16−09:

Π§Π°ΠΏΠ»Ρ‹Π³ΠΈΠ½ Π”.И.

ΠŸΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΡŒ:

Π΄ΠΎΡ†., ΠΊ.Ρ‚.Π½. Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²Π° Н.П.

Москва 2013 Π³.

ОглавлСниС Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для выполнСния курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° БокращСния Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. Анализ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области

2. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

2.1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ER-ΠΌΠΎΠ΄Π΅Π»ΠΈ

2.2. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ» цСлостности Π‘Π”

2.3. Анализ рСляционной ΠΌΠΎΠ΄Π΅Π»ΠΈ

3. РСализация Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ рСализация

4.1 ADO .NET ΠΈ Entity Framework

4.2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ экранных Ρ„ΠΎΡ€ΠΌ интСрфСйса Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, содСрТащий Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ взаимодСйствия с Π‘Π”.

Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ПО, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ элСмСнтов Π‘Π” для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π² ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… завСдСниях Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΈ ΡΡ€Π΅Π΄Π½Π΅Π³ΠΎ-ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ образования.

Π‘Π” Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

Β· Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список заявок ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, содСрТащих Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ для систСмы ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΊΠ°ΡΠ°ΡŽΡ‰ΡƒΡŽΡΡ самого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ завСдСния), Π½Π°Π±ΠΎΡ€Π° Π΅Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ.

Β· ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ интСрфСйс с ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π‘Π” (связи ΠΏΠΎ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ).

Β· ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы.

Β· Π˜ΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΈ (ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ) ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² систСмы ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ… ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… оформлСния заявок.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для выполнСния курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π‘Ρ€Π΅Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: Microsoft Visual Studio 2010;

Π‘Π£Π‘Π”: Microsoft SQL;

Π‘Π΅Ρ€Π²Π΅Ρ€ ASP.NET MVC, .Net 4.0 IIS;

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π”: Entity Framework, LinQ;

Π‘Ρ€Π΅Π΄Π° проСктирования Π‘Π”: Allfusion ERWin.

БокращСния

Π‘Π” — Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…

3НЀ — Ρ‚Ρ€Π΅Ρ‚ΡŒΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Π‘Π£Π‘Π” — систСма управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π€Π— — Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ЀИБ Π•Π“Π­ ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ°, систСма — Π€Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½Π°Ρ информационная слуТба Рособрнадзора ΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π•Π΄ΠΈΠ½ΠΎΠ³ΠΎ ГосударствСнного Π­ΠΊΠ·Π°ΠΌΠ΅Π½Π° ΠΈ ΠΏΠΎΡ€ΡΠ΄ΠΊΠ° ΠΏΡ€ΠΈΡ‘ΠΌΠ°.

Π£Π— — ΡƒΡ‡Π΅Π±Π½ΠΎΠ΅ Π·Π°Π²Π΅Π΄Π΅Π½ΠΈΠ΅ (соотв. Π’Π£Π— ΠΈ Π‘Π‘Π£Π— — Π’Ρ‹ΡΡˆΠ΅Π΅ Π£Π— ΠΈ Π‘Ρ€Π΅Π΄Π½Π΅Π΅ спСиальноС Π£Π—), ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ систСмы ЀИБ.

ЦСлью курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° являСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Π‘Π”) ΠΈ ΠΈΠ½Ρ‚СрфСйсных срСдств для выполнСния ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² Π·Π°Π΄Π°Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘Π” ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚авляСт собой ΠΏΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ описания, хранСния ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π‘Π” ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ модСлью ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ поставлСнныС Π·Π°Π΄Π°Ρ‡ΠΈ.

Π­Ρ‚Π°ΠΏΡ‹ выполнСния курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

Β· ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области;

Β· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π‘Π”;

Β· рСализация Π‘Π” срСдствами Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π‘Π£Π‘Π”;

Β· программная рСализация интСрфСйса с Π‘Π”.

Для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ CASE-срСдство AllFusion Process Modeler, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠΎΡΡ‚Π°Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π° AllFusion Modeler Suite. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π‘Π” выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CASE-срСдства AllFusion ERwin Data Modeler, входящий Π² ΡΠΎΡΡ‚Π°Π² этого ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

РСализация Π‘Π” проводится Π² ΡΡ€Π΅Π΄Π΅ Microsoft SQL Server. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ языка Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ C# Π² ΡΡ€Π΅Π΄Π΅ Microsoft Visual Studio.

1. Анализ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области

1.1 ОписаниС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ списками Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… направлСниями: для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π£Π·Π° прСдусмотрСн список Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ студСнтов для ΠΈΡ… ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡ. Π’ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ эти направлСния Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно Π£Π—ΠΎΠΌ, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ администраторами систСмы ЀИБ.

РСализация общСния ΠΌΠ΅ΠΆΠ΄Ρƒ Π£Π·Π°ΠΌΠΈ ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ построСна Π½Π° Π·Π°ΡΠ²ΠΊΠ°Ρ…, содСрТащих всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ Ρ…ранящихся Π² Π‘Π”. Заявки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π² ΡΠΏΠΈΡΠΎΠΊ, Ρ‚Π°ΠΊΠΈ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΡ….

ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½Ρ‹ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ добавлСния/удалСния (ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΏΡ€ΠΈΠΊΠ°Π·), Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ администраторов Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΎΡ‚ΠΊΠ°Π·Π° выполнСния заявки. Доступ ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ариям Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ заявки.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎ.

Π£ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π£Π—Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Π·Π°ΡΠ²ΠΊΠ΅ тСорСтичСски Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ направлСния, ΡƒΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅ для этого Π£Π—Π° ΠΈ, ΠΏΡ€ΠΈ этом, Π½Π΅ Π²Ρ…одящиС Π² ΠΊΠΎΠ½ΠΊΡƒΡ€ΡΠ½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π΅Π³ΠΎ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‘ΠΌΠ½Ρ‹Ρ… ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΠΉ.

1.2 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ Анализ построСнных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€Π΅Π΄ΠΌΡ‚Π΅Π½ΠΎΠΉ области. Бостав ΠΈ Ρ…арактСристика ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ‚Π°Π±Π». 1.

Π’Π°Π±Π»ΠΈΡ†Π° 1. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΈΡ… ΡΠ²ΠΎΠΉΡΡ‚Π²Π°

Имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ОписаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Бвойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Запрос Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ списка.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ произвСсти.

НомСр запроса НомСр направлСния Π’ΠΈΠ΄ Π½Π°Π±ΠΎΡ€Π° ДСйствиС Бтатус заявки Π”Π°Ρ‚Π° созданиС заявки Π”Π°Ρ‚Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ статуса заявки

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ Π·Π°ΡΠ²ΠΊΠ΅

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π²Π΅Ρ‚Π²ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ института. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚.

НомСр коммСнтария ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€ Π”Π°Ρ‚Π° создания коммСнтария НомСр интститута НомСр направлСния

2. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π‘Π” ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²:

Β· МодСль «ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ — связь», которая строится Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ связСй ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

Β· РСляционная модСль, которая формируСтся Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ «ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ — связь».

2.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ER-ΠΌΠΎΠ΄Π΅Π»ΠΈ

Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ На ΠΎΡΠ½ΠΎΠ²Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² срСдствами Microsoft Visio Π±Ρ‹Π»Π° построСна модСль «ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ — связь» (рис. 2.1.).

Рис. 2.1. МодСль «ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ-связь» для Π‘Π” ОписаниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «Π—аявка»:

НомСр заявки — Ρ†Π΅Π»ΠΎΠ΅ число, Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Ρ‚ΠΈΠΏ, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, являСтся внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π˜Π½ΡΡ‚ΠΈΡ‚ΡƒΡ‚ — НомСр института),

НомСр направлСния — Ρ†Π΅Π»ΠΎΠ΅ число, Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Ρ‚ΠΈΠΏ, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, являСтся внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ НаправлСниС ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ — НомСр направлСния),

ДСйствиС — строка, нСнулСвая, Π΄Π»ΠΈΠ½Π° — 3,

Бтатус — строка, нСнулСвая, Π΄Π»ΠΈΠ½Π° — 1,

Π’ΠΈΠΏ ΠΏΡ€ΠΈΡ‘ΠΌΠ° Π½Π°Π±ΠΎΡ€Π° — Ρ†Π΅Π»ΠΎΠ΅ число, Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅, Π”Π°Ρ‚Π° создания заявки — Π΄Π°Ρ‚Π°, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, Π”Π°Ρ‚Π° измСнСния заявки — Π΄Π°Ρ‚Π°, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚.

ОписаниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ»:

НомСр коммСнтария — Ρ†Π΅Π»ΠΎΠ΅ число, Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Ρ‚ΠΈΠΏ, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, НомСр направлСния — Ρ†Π΅Π»ΠΎΠ΅ число, Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Ρ‚ΠΈΠΏ, являСтся внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Заявка — НомСр направлСния),

НомСр института — Ρ†Π΅Π»ΠΎΠ΅ число, Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Ρ‚ΠΈΠΏ, являСтся внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Заявка — НомСр заявки),

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€ — строка, нСнулСвая, ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ — строка, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, Π”Π°Ρ‚Π° добавлСния коммСнтария — Π΄Π°Ρ‚Π°, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.

2.2 ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ» цСлостности Π‘Π”

ПолС

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ цСлостности

ДСйствиС

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния 'ADD' ΠΈΠ»ΠΈ `DEL'

Бтатус

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния 'A', 'D' ΠΈΠ»ΠΈ 'W'

НомСр направлСния

Π‘ΠΎΠ»ΡŒΡˆΠ΅ нуля

НомСр коммСнтария

Π‘ΠΎΠ»ΡŒΡˆΠ΅ нуля

НомСр заявки

Π‘ΠΎΠ»ΡŒΡˆΠ΅ нуля

Π’ΠΈΠΏ ΠΏΡ€ΠΈΡ‘ΠΌΠ° Π½Π°Π±ΠΎΡ€Π°

Число ΠΎΡ‚ 1 Π΄ΠΎ 10

ВсС поля Ρ‚ΠΈΠΏΠ° Date

НС Ρ€Π°Π½Π΅Π΅ 01.01.2013

2.3 Анализ рСляционной ΠΌΠΎΠ΄Π΅Π»ΠΈ

Рис. 2.2 РСляционная модСль Π‘Π” Для получСния Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… характСристик Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π”, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² 3НЀ. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ зависимости (Π€Π—) ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅ΡΡ‚ΠΈ ΠΈΡ… Π°Π½Π°Π»ΠΈΠ·.

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Request Direction, ΠΊΠ»ΡŽΡ‡ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ:

Request ID — Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Institution, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ InstitutionID,

DirectionID — Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ отноСния Direction, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ DirectionID.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ зависимости:

Request ID, DirectionID > Activity,

Request ID, DirectionID > Action,

Request ID, DirectionID > ChangedDate,

Request ID, DirectionID > CreationDate,

DirectionID > AdmissionItemType.

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ RequestComments, ΠΊΠ»ΡŽΡ‡ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ:

Comment ID.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ зависимости:

CommentID > Commentor,

CommentID > Comment,

CommentID > Date,

CommentID > DirectionID,

CommentID > InstitutionID.

Π”Ρ€ΡƒΠ³ΠΈΡ… Π€Π— для ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ Π½Π΅ Π²Ρ‹ΡΠ²Π»Π΅Π½ΠΎ. ОбоснованиС нахоТдСния Π‘Π” Π² 3НЀ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² 3НЀ.

1. ВсС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π‘Π” находятся Π² 1НЀ, ΠΈΡ… ΠΏΠΎΠ»Ρ содСрТат Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ значСния.

2. Полная Π€Π— Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π° для RequestComments обСспСчиваСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ Π² ΡΡ‚ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ простой.

3. Для ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ RequestDirection полная Π€Π— ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΈ ΡΠΎΡΡ‚Π°Π²Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ сущСствуСт.

4. Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ… ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π‘Π” Π½Π°Ρ…одится Π² 3НЀ.

3. РСализация Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π‘Π£Π‘Π” для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π‘Π” Π² ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° Π‘Π£Π‘Π” Microsoft SQL Server. Π­Ρ‚Π° Π‘Π£Π‘Π” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΠ΅ΠΉ Microsoft ΠΈ ΠΏΠΎΠ΄Π΄Ρ€Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ модСль Π‘Π”. Основной ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ язык запросов — Transact-SQL, созданный совмСстно Microsoft ΠΈ Sybase. Transact-SQL являСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ стандарта ANSI/ISO структурированного языка запросов (SQL) с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ. Π‘Π£Π‘Π” SQL Server ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΡ€Π΅Π΄Π½ΠΈΠΌΠΈ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠΌΠΈ Π‘Π”. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ описаниС Π‘Π” срСдствами Transact-SQL.

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo]. RequestDirection](

[Direction ID] [int] NOT NULL,

[Request ID] [int] NOT NULL,

[Activity] [varchar](1) NOT NULL,

[Action] [varchar](10) NOT NULL,

[AdmissionItemType] [int] NOT NULL,

[CreationDate] [datetime] NULL,

[ChangeDate] [datetime] NULL,

CONSTRAINT [PK_RequestDirection] PRIMARY KEY CLUSTERED

(

[Direction ID] ASC,

[Request ID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

ALTER TABLE [dbo]. RequestDirection] WITH CHECK ADD CONSTRAINT [FK_RequestDirection_Request] FOREIGN KEY ([Request ID])

REFERENCES [dbo]. Institution] ([InstitutionID])

GO

ALTER TABLE [dbo]. RequestDirection] CHECK CONSTRAINT [FK_RequestDirection_Request]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo]. RequestComments](

[Comment ID] [int] NOT NULL,

[Commentor] [varchar](5) NOT NULL,

[Comment] [text] NULL,

[Date] [datetime] NULL,

[DirectionID] [int] NOT NULL,

[InstitutionID] [int] NOT NULL,

CONSTRAINT [PK_RequestComments] PRIMARY KEY CLUSTERED

(

[Comment ID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

ALTER TABLE [dbo]. RequestComments] WITH NOCHECK ADD CONSTRAINT [FK_RequestComments_RequestDirection] FOREIGN KEY ([DirectionID], [InstitutionID])

REFERENCES [dbo]. RequestDirection] ([Direction ID], [Request ID])

GO

ALTER TABLE [dbo]. RequestComments] NOCHECK CONSTRAINT [FK_RequestComments_RequestDirection]

GO

4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ рСализация

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния с Π‘Π” Π²Ρ‹Π±Ρ€Π°Π½ язык Π‘# ΠΈ Ρ‚Схнология ADO.NET Entity Framework.

4.1 ADO .NET ΠΈ Entity Framework

ADO.NET являСтся Π½Π°Π±ΠΎΡ€ΠΎΠΌ классов, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ интСрфСйсы для облСгчСния ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π” ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, нСзависимо ΠΎΡ‚ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π‘Π£Π‘Π”. ADO .NET ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ web-программирования с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ASP .NET для доступа ΠΊ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… со ΡΡ‚ΠΎΡ€ΠΎΠ½Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль ADO .NET Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ отсоСдинСнный доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. ΠŸΡ€ΠΈ этом Π² Visual Studio .NET сущСствуСт мноТСство встроСнных мастСров ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ доступа ΠΊ Π‘Π” Π΅Ρ‰Π΅ Π½Π° ΡΡ‚Π°ΠΏΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π·Π°Π΄Π°Ρ‡Π° получСния доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Π° нСпосрСдствСнно Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния прилоТСния.

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² ADO .NET основана Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

* Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… (прСдставляСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса DataSet) со ΡΡ‚ΠΎΡ€ΠΎΠ½Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ локальноС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…;

* ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… (прСдставляСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса DataProvider). Π­Ρ‚ΠΎ посрСдник, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ взаимодСйствиС прилоТСния ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… со ΡΡ‚ΠΎΡ€ΠΎΠ½Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Π² Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… прилоТСниях — со ΡΡ‚ΠΎΡ€ΠΎΠ½Ρ‹ сСрвСра).

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль ADO .NET ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ сущСствованиС (ΠΏΡ€ΠΈ написании прилоТСния для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… — использованиС) Π΄Π²ΡƒΡ… мноТСств классов, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Entity Framework позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ прилоТСния для доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ модСлью прилоТСния, Π° Π½Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ схСмой хранСния. ЦСль состоит Π² ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ объСма ΠΊΠΎΠ΄Π° ΠΈ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Entity Framework ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСимущСства.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ модСлью Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области — Π² Ρ‚ΠΎΠΌ числС с Π½Π°ΡΠ»Π΅Π΄ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, слоТными элСмСнтами ΠΈ ΡΠ²ΡΠ·ΡΠΌΠΈ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΆΠ΅ΡΡ‚ΠΊΠΈΡ… зависимостСй ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ядра Π‘Π£Π‘Π” ΠΈΠ»ΠΈ схСмы хранСния.

БопоставлСния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ модСлью ΠΈ ΡΡ…Π΅ΠΌΠΎΠΉ, спСцифичной для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π±Π΅Π· измСнСния ΠΊΠΎΠ΄Π° прилоТСния.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠΉ модСлью ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² прилоТСния, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сопоставлСна с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ схСмами хранСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… систСмах управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

НСсколько ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сопоставлСны с Π΅Π΄ΠΈΠ½ΠΎΠΉ схСмой хранСния.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° запросов LINQ обСспСчиваСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ синтаксиса Π²ΠΎ Π²Ρ€Π΅ΠΌΡ компиляции для запросов ΠΊ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Entity Framework Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появилась ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET Framework ΠΈ Π²Ρ‹ΠΏΡƒΡΠΊΠ΅ Microsoft Visual Studio. Начиная с Entity Framework вСрсии 4.1 ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Entity Framework Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ‡Π°ΡΡ‚ΡŒΡŽ .NET Framework, Π½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½Π° Π½Π° Π΅Π΅ ΠΎΡΠ½ΠΎΠ²Π΅.

4.2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ экранных Ρ„ΠΎΡ€ΠΌ интСрфСйса

Рис. 4.1 Π€ΠΎΡ€ΠΌΠ° добавлСния коммСнтария Администратором систСмы Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΎΡ‚ΠΊΠ°Π·Π° выполнСния заявки Рис. 4.2 Π’Π°Π±Π»ΠΈΡ†Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² Π·Π°ΡΠ²ΠΊΠ΅ Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ ОУ Рис. 4.3 Бписок ОУ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ заявки Рис. 4.4 Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ добавлСния Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ Π² Π·Π°ΡΠ²ΠΊΡƒ Рис. 4.5 Кнопка Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ интСрфСйс заполнСния заявки Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля Рис. 4.6 Бписок Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ Π² Π·Π°ΡΠ²ΠΊΠ΅ (интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ) Рис. 4.7 Бписок Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ послС выполнСния заявки

1. Microsoft Development network http://msdn.microsoft.com/en-US/

2. Н. П. Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²Π°. Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ пособиС ΠΊ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. — Πœ.: Изд-Π²ΠΎ МЭИ, 2010. — 40 с.

3. Π ΠΈΡ…Ρ‚Π΅Ρ€ Π”ΠΆ. CLR via C#. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Microsoft .NET Framework 4.0 Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C#. — ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ: Π Π°Π΄Ρ‡Π΅Π½ΠΊΠΎ И., Π ΡƒΠ·ΠΌΠ°ΠΉΠΊΠΈΠ½Π° И., «ΠŸΠΈΡ‚Π΅Ρ€», 2012 — 928 с.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, содСрТащий Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ взаимодСйствия с Π‘Π”

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Ρ‘Ρ€Ρ‹ — ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠžΠ£:

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public AjaxResultModel RequestDisabled ()

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

return new AjaxResultModel { Data = (dbContext.RequestDirection.Any (x => x. Activity == «A»)) };

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult CancelRequest (string directionID)

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

int dir = Convert. ToInt32(directionID);

//IQueryable tlist = dbContext.Request.Where (x => x. InstitutionID == InstitutionID).Select (x => x. ID_Request);

RequestDirection toCancel = dbContext.RequestDirection.Where (x => x. Direction_ID == dir && x. Request_ID == InstitutionID).First ();

if (toCancel.Activity == «W»)

{

dbContext.DeleteObject (toCancel);

dbContext.SaveChanges ();

// TODO: Finish Comment Deleting

return new AjaxResultModel ();

}

else

return new AjaxResultModel («Π”Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ обрабатываСтся администратором.»);

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult AllowedDirectionsGetAvailableEdu (AllowedDirectionAddViewModel model)

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

return dbContext. GetRemainedAvailableAllowedDirections (model, InstitutionID);

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult AllowedDirectionsGetExistingEdu (AllowedDirectionAddViewModel model)

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

return dbContext. GetAllowedDirections (model, InstitutionID);

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult RequestDirectionListDenied ()

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

return dbContext. GetDeniedDirections (InstitutionID);

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult ClearAllDenied ()

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

return dbContext. DeleteDenied (InstitutionID);

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult AllowedDirectionsDeleteEdu ()

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

var model = dbContext. FillAllowedDirectionAddModel ();

return PartialView («Admission/DeleteAllowedDirectionEdu», model);

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult RequestDirectionListToAdd ()

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

return dbContext. GetRequestedToAddDirections (InstitutionID);

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult RequestDirectionListToDelete ()

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

return dbContext. GetRequestedToDeleteDirections (InstitutionID);

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult DeleteDirectionRequest (int? directionid, string comment, int? admissiontype)

{

int DirID = directionid ?? 0;

int AdType = admissiontype ?? 0;

if (DirID == 0) return new AjaxResultModel (««);

if (AdType == 0) return new AjaxResultModel (««);

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

using (EntrantsEntities dbContext1 = new EntrantsEntities ())

{

if (dbContext1.IsInCompetitiveGroup (InstitutionID, DirID, AdType))

{

string s = dbContext.Direction.Where (x => x. DirectionID == DirID).Select (x => x.Name).Single ().ToString ();

//return new AjaxResultModel (@" НСльзя ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ «» «+ s + @» «» Ρ‚.ΠΊ. ΠΎΠ½ΠΎ содСрТится Π² ΠΊΠΎΠ½ΠΊΡƒΡ€ΡΠ½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ….");

return new AjaxResultModel (s);

}

}

try

{

RequestDirection req = Model.Institutions.RequestDirection.CreateRequestDirection (DirID, InstitutionID, «W», «Delete», AdType);

dbContext.RequestDirection.AddObject (req);

dbContext.SaveChanges ();

int y;

/*try

{*/

y = dbContext.RequestComments.Select (x => x. Comment_ID).Count ();

/*}

catch (System.InvalidOperationException)

{ y = 0; }*/

RequestComments rc = Model.Institutions.RequestComments.CreateRequestComments (y + 1, «U», DirID, InstitutionID);;

rc.Comment = comment;

dbContext.RequestComments.AddObject (rc);

dbContext.SaveChanges ();

}

catch (System.Data.UpdateException)

{

return new AjaxResultModel ();

}

return new AjaxResultModel ();

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult AddDirectionRequest (int? directionid, string comment, int? admissiontype)

{

if (directionid == null) return new AjaxResultModel ();

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

try

{

RequestDirection req = Model.Institutions.RequestDirection.CreateRequestDirection (directionid ?? 0, InstitutionID, «W», «Add», admissiontype ?? 0);

dbContext.RequestDirection.AddObject (req);

//dbContext.SaveChanges ();

int y;

/*try

{*/

y = dbContext.RequestComments.Count ();

/*}

catch (System.InvalidOperationException)

{ y = 0; }*/

RequestComments rc = Model.Institutions.RequestComments.CreateRequestComments (y + 1, «U», directionid ?? 0, InstitutionID);

rc.Comment = comment;

dbContext.RequestComments.AddObject (rc);

dbContext.SaveChanges ();

}

catch (System.Data.UpdateException)

{

}

return new AjaxResultModel ();

}

}

[HttpPost]

[Authorize (Roles = UserRole. EduAdmin)]

public ActionResult AllowedDirectionsAddEdu ()

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

var model = dbContext. FillAllowedDirectionAddModel ();

return PartialView («Admission/AddAllowedDirectionEdu», model);

}

}

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ:

public static AjaxResultModel GetAllowedDirections (this InstitutionsEntities dbContext, AllowedDirectionAddViewModel model, int institutionID)

{

var existing = dbContext. AllowedDirections

.Where (x => x. InstitutionID == institutionID && x. AdmissionItemTypeID == model. EducationLevelID && x.Direction.ParentID == model. ParentDirectionID)

.Select (x => x. DirectionID);

List qualCodes = new List ();

// Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зависит ΠΎΡ‚ ΡƒΡ€ΠΎΠ²Π½Ρ образования

if (model.EducationLevelID == EDLevelConst. Bachelor)

qualCodes.Add («62»);

if (model.EducationLevelID == EDLevelConst. BachelorShort)

qualCodes.Add («62»);

if (model.EducationLevelID == EDLevelConst. Magistracy)

qualCodes.Add («68»);

if (model.EducationLevelID == EDLevelConst. SPO)

{

qualCodes.Add («51»);

qualCodes.Add («52»);

}

if (model.EducationLevelID == EDLevelConst. Speciality)

qualCodes.Add («65»);

var avail =

dbContext.Direction.Where (x => x. ParentID == model. ParentDirectionID && existing. Contains (x.DirectionID))

.OrderBy (x => x. Code)

.Select (x => new { ID = x. DirectionID, Code = x. Code, Name = x.Name, Period = x. PERIOD, x. QUALIFICATIONCODE }).ToArray ()

.Where (x => qualCodes. Contains ((x.QUALIFICATIONCODE ?? «»).Trim ()))

.Select (x => new { ID = x. ID, Code = x. Code, QualificationCode = x. QUALIFICATIONCODE, Name = x.Name, Period = (x.Period ?? «»).Trim () }).ToArray ();

return new AjaxResultModel { Data = avail };

}

/// Бписок Π½Π°ΠΏΡ€Π²Π°Π»Π΅Π½ΠΈΠΉ ΠΎΡ‚Ρ€Π°ΠΆΡ‘Π½Π½Ρ‹Ρ… Π² Π·Π°ΡΠ²ΠΊΠ΅ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅

public static AjaxResultModel GetRequestedToAddDirections (this InstitutionsEntities dbContext, int institutionID)

{

List temp1;

temp1 = dbContext.RequestDirection.Where (y => y. Activity == «W» && y. Request_ID == institutionID && y. Action == «Add»).Select (n => n. Direction_ID).ToList ();

List temp2 = new List ();

foreach (int intro in temp1)

{

temp2.Add (Convert.ToInt32(intro));

}

var avail =

dbContext.Direction.Where (x => x. DirectionID > 0 && temp2. Contains (x.DirectionID))

.OrderBy (x => x. Code)

.Select (x => new { ID = x. DirectionID, Code = x. Code, Name = x.Name, Period = x. PERIOD, x. QUALIFICATIONCODE }).ToArray ()

//.Where (x => qualCodes. Contains ((x.QUALIFICATIONCODE ?? «»).Trim ()))

.Select (x => new { ID = x. ID, Code = x. Code, QualificationCode = x. QUALIFICATIONCODE, Name = x.Name, Period = (x.Period ?? «»).Trim () }).ToArray ();

return new AjaxResultModel { Data = avail };

}

/// Бписок Π½Π°ΠΏΡ€Π²Π°Π»Π΅Π½ΠΈΠΉ ΠΎΡ‚Ρ€Π°ΠΆΡ‘Π½Π½Ρ‹Ρ… Π² Π·Π°ΡΠ²ΠΊΠ΅ Π½Π° udalenie

public static AjaxResultModel GetRequestedToDeleteDirections (this InstitutionsEntities dbContext, int institutionID)

{

List temp1;

temp1 = dbContext.RequestDirection.Where (y => y. Activity == «W» && y. Request_ID == institutionID && y. Action == «Delete»).Select (n => n. Direction_ID).ToList ();

List temp2 = new List ();

foreach (int intro in temp1)

{

temp2.Add (Convert.ToInt32(intro));

}

var avail =

dbContext.Direction.Where (x => x. DirectionID > 0 && temp2. Contains (x.DirectionID))

.OrderBy (x => x. Code)

.Select (x => new { ID = x. DirectionID, Code = x. Code, Name = x.Name, Period = x. PERIOD, x. QUALIFICATIONCODE }).ToArray ()

//.Where (x => qualCodes. Contains ((x.QUALIFICATIONCODE ?? «»).Trim ()))

.Select (x => new { ID = x. ID, Code = x. Code, QualificationCode = x. QUALIFICATIONCODE, Name = x.Name, Period = (x.Period ?? «»).Trim () }).ToArray ();

return new AjaxResultModel { Data = avail };

}

public static AjaxResultModel GetDeniedDirections (this InstitutionsEntities dbContext, int institutionID)

{

List temp1;

temp1 = dbContext.RequestDirection.Where (y => y. Activity == «D» && y. Request_ID == institutionID).Select (n => n. Direction_ID).ToList ();

List temp2 = new List ();

foreach (int intro in temp1)

{

temp2.Add (Convert.ToInt32(intro));

}

var avail =

dbContext.Direction.Where (x => x. DirectionID > 0 && temp2. Contains (x.DirectionID))

.OrderBy (x => x. Code)

.Select (x => new { ID = x. DirectionID, Code = x. Code, Name = x.Name, Period = x. PERIOD, x. QUALIFICATIONCODE }).ToArray ()

//.Where (x => qualCodes. Contains ((x.QUALIFICATIONCODE ?? «»).Trim ()))

.Select (x => new { ID = x. ID, Code = x. Code, QualificationCode = x. QUALIFICATIONCODE, Name = x.Name, Period = (x.Period ?? «»).Trim () }).ToArray ();

var query1 = dbContext. RequestComments

Where (x => temp1. Contains (x.RequestDirection.Direction_ID)

&& x. InstitutionID == institutionID

&& x. Commentor == «A»)

.OrderByDescending (x => x. Date);

List rlist = new List ();

foreach (RequestComments rq in query1)

{

if (!rlist.Select (x => x. DirectionID).Contains (rq.DirectionID))

{

rlist.Add (rq);

}

}

var comment = rlist

.Select (x => new { ID = x. DirectionID, Comment = x. Comment });

return new AjaxResultModel { Data = new { Direction = avail, Comment = comment } };

}

/// УдаляСм ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹Π΅ направлСния Π² Π·Π°ΡΠ²ΠΊΠ΅

public static AjaxResultModel DeleteDenied (this InstitutionsEntities dbContext, int instid)

{

var db = dbContext.RequestDirection.Where (x => x. Request_ID == instid && x. Activity == «D»);

foreach (RequestDirection rd in db)

{

dbContext.RequestDirection.DeleteObject (rd);

}

dbContext.SaveChanges ();

return new AjaxResultModel ();

}

/// ДобавляСм Π½ΠΎΠ²ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π±Π°Π·Ρƒ

public static AjaxResultModel AddAllowedDirection (this EntrantsEntities dbContext, AllowedDirectionAddViewModel model, int institutionID)

{

//ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ. Битуация Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ

if (!dbContext.AdmissionItemType.Any (x => x. ItemTypeID == model. EducationLevelID && x. ItemLevel == 2))

return new AjaxResultModel ();

foreach (var directionID in (model.DirectionIDs ?? new int[0]))

{

// Ссли Π½Π΅Ρ‚ Π΅Ρ‰Ρ‘, Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ

if (!dbContext.AllowedDirections.Any (x => x. DirectionID == directionID && x. AdmissionItemTypeID == model. EducationLevelID && x. InstitutionID == institutionID))

{

AllowedDirections ad = new AllowedDirections ();

ad.InstitutionID = institutionID;

ad.AdmissionItemTypeID = (short)model.EducationLevelID;

ad.DirectionID = directionID;

dbContext.AllowedDirections.AddObject (ad);

}

dbContext.SaveChanges ();

}

return new AjaxResultModel ();

}

/// УдаляСм Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· Π±Π°Π·Ρ‹. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΌ Ρ‡Ρ‚ΠΎ это допустимо.

public static AjaxResultModel DeleteAllowedDirection (this EntrantsEntities dbContext, int educationLevelID, int directionID, int institutionID)

{

//ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ. Битуация Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ

if (!dbContext.AdmissionItemType.Any (x => x. ItemTypeID == educationLevelID && x. ItemLevel == 2))

return new AjaxResultModel ();

if (dbContext.CompetitiveGroupItem.Any (x => x.CompetitiveGroup.InstitutionID == institutionID && x. DirectionID == directionID

&& x. EducationLevelID == educationLevelID))

return new AjaxResultModel («ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠΎΠ½ΠΊΡƒΡ€ΡΠ½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ….»);

var ad = dbContext.AllowedDirections.FirstOrDefault (x => x. DirectionID == directionID && x. AdmissionItemTypeID == educationLevelID && x. InstitutionID == institutionID);

if (ad ≠ null)

{

// Π΄ΠΎ ΠΊΡƒΡ‡ΠΈ удаляСм ΠΎΠ±ΡŠΡ‘ΠΌ ΠΏΡ€ΠΈΡ‘ΠΌΠ°, ΠΎΠ½ ΡƒΠΆΠ΅ большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½ (ΠšΠ“ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ, Π½Π΅Ρ‚)

dbContext.AdmissionVolume

.Where (x => x. DirectionID == directionID && x. InstitutionID == institutionID && x. AdmissionItemTypeID == educationLevelID)

.ToList ().ForEach (dbContext.AdmissionVolume.DeleteObject);

dbContext.AllowedDirections.DeleteObject (ad);

dbContext.SaveChanges ();

}

return new AjaxResultModel ();

}

public static bool IsInCompetitiveGroup (this EntrantsEntities dbContext, int institution, int direction, int admtype)

{

return (dbContext.CompetitiveGroupItem.Any (x => x.CompetitiveGroup.InstitutionID == institution && x. DirectionID == direction && x. EducationLevelID == (short)admtype))

;

}

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Ρ‘Ρ€Ρ‹ — администратор ЀИБ:

[Authorize (Roles = UserRole. FBDAdmin)]

public ActionResult ReqList ()

{

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

return View («./Admission/RequestList», dbContext. InitialFillRequestListViewModel (InstitutionID));

}

}

[Authorize]

[HttpPost]

public AjaxResultModel MakeEditable (int? institutionid)

{

if (institutionid == null)

return new AjaxResultModel («Invalid value of Institution ID.»);

using (InstitutionsEntities dbContext = new InstitutionsEntities ())

{

return dbContext. AtoU (institutionid ?? 0);

}

}

[Authorize (Roles = UserRole. FBDAdmin)]

[HttpPost]

public AjaxResultModel GetRequestList (RequestListViewModel model)

{

using (var dbContext = new InstitutionsEntities ())

{

return dbContext. GetRequestList (model);

}

}

[Authorize (Roles = UserRole. FBDAdmin)]

[HttpPost]

public AjaxResultModel GetRequest (int? institutionid)

{

using (var dbContext = new InstitutionsEntities ())

{

return dbContext. FillRequestList (institutionid ?? 0);

}

}

[Authorize (Roles = UserRole. FBDAdmin)]

[HttpPost]

public AjaxResultModel AddDirection (int? did, int? inid, int? adtype)

{

using (var dbContext = new InstitutionsEntities ())

{

return dbContext. AcceptRequest (did ?? 0, inid ?? 0, adtype ?? 0);

}

}

[Authorize (Roles = UserRole. FBDAdmin)]

[HttpPost]

public AjaxResultModel DenyRequest (int? did, string comment, int? inid)

{

using (var dbContext = new InstitutionsEntities ())

{

return dbContext. DenyRequestAdmin (did ?? 0, inid ?? 0, comment);

}

}

public ActionResult Index ()

{

return View ();

}

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ:

public static RequestListViewModel InitialFillRequestListViewModel (this InstitutionsEntities dbContext, int currentInstitutionID)

{

RequestListViewModel model = new RequestListViewModel ();

model.CurrentInstitutionID = currentInstitutionID;

return model;

}

public static AjaxResultModel FillRequestList (this InstitutionsEntities dbContext, int InstID)

{

var query = dbContext.RequestDirection.Where (x => x. Request_ID == InstID && x. Activity == «W»).Select (x => x. Direction_ID);

var current = dbContext.Direction.Where (x => query. Contains (x.DirectionID)).OrderBy (x => x. DirectionID)

.Select (x => new { ID = x. DirectionID, Code = x. Code, Name = x.Name, Period = x. PERIOD, x. QUALIFICATIONCODE}).ToArray ()

.Select (x => new { ID = x. ID, Code = x. Code, QualificationCode = x. QUALIFICATIONCODE, Name = x.Name, Period = (x.Period ?? «»).Trim () }).ToArray ();;

var query1 = dbContext.RequestComments.Include (x => x. RequestDirection).Where (x => x. InstitutionID == InstID && x. Commentor == «U»).OrderByDescending (x => x. Date);

List rlist = new List ();

foreach (RequestComments rq in query1)

{

if (!rlist.Select (x => x. DirectionID).Contains (rq.DirectionID))

{

rlist.Add (rq);

}

}

foreach (RequestDirection rd in dbContext.RequestDirection.Where (x => x. Request_ID == InstID && x. Activity == «W»))

{

rd.Activity = «A» ;

}

dbContext.SaveChanges ();

RequestThread rt = new RequestThread (InstID);

return new AjaxResultModel { Data = new { Request = current, Comment = rlist. OrderBy (x => x. DirectionID).Select (x => new { DirectionID = x. DirectionID, Comment = x. Comment, Action = x.RequestDirection.Action, admissionType = x.RequestDirection.AdmissionItemType}) } };

}

public static AjaxResultModel GetInstitutionList (this InstitutionsEntities dbContext, InstitutionListViewModel model)

{

var query = dbContext. Institution

.Include (x => x. RegionType)

.Include (x => x. FormOfLaw)

.Include (x => x. UserPolicy);

//sorting

if ((model.SortID ?? 0) == 0)

model.SortID = 1;

if (model.SortID == 1) query = query. OrderBy (x => x. FullName);

if (model.SortID == -1) query = query. OrderByDescending (x => x. FullName);

if (model.SortID == 2) query = query. OrderBy (x => x. InstitutionTypeID);

if (model.SortID == -2) query = query. OrderByDescending (x => x. InstitutionTypeID);

if (model.SortID == 3) query = query. OrderBy (x => x.RegionType.Name);

if (model.SortID == -3) query = query. OrderByDescending (x => x.RegionType.Name);

if (model.SortID == 4) query = query. OrderBy (x => x. OwnerDepartment);

if (model.SortID == -4) query = query. OrderByDescending (x => x. OwnerDepartment);

if (model.SortID == 5) query = query. OrderBy (x => x.UserPolicy.Count ());

if (model.SortID == -5) query = query. OrderByDescending (x => x.UserPolicy.Count ());

model.TotalItemCount = query. Count ();

if (model.Filter ≠ null)

{

if (!String.IsNullOrEmpty (model.Filter.ShortName))

query = query. Where (x => x.BriefName.Contains (model.Filter.ShortName));

if (!String.IsNullOrEmpty (model.Filter.FullName))

query = query. Where (x => x.FullName.Contains (model.Filter.FullName));

if (!String.IsNullOrEmpty (model.Filter.Owner))

query = query. Where (x => x.OwnerDepartment.Contains (model.Filter.Owner));

if (model.Filter.InstitutionTypeID > 0)

query = query. Where (x => x. InstitutionTypeID == model.Filter.InstitutionTypeID);

if (model.Filter.FormOfLawID > 0)

query = query. Where (x => x. FormOfLawID == model.Filter.FormOfLawID);

if (model.Filter.RegionID > 0)

query = query. Where (x => x. RegionID == model.Filter.RegionID);

if (!String.IsNullOrEmpty (model.Filter.OGRN))

query = query. Where (x => x. OGRN == model.Filter.OGRN);

if (!String.IsNullOrEmpty (model.Filter.INN))

query = query. Where (x => x. OGRN == model.Filter.INN);

}

var pageNumber = model. PageNumber;

if (!pageNumber.HasValue || pageNumber < 0) pageNumber = 0;

int totalCount = query. Count ();

model.TotalItemFilteredCount = totalCount;

model.TotalPageCount = ((Math.Max (totalCount, 1) — 1) / InstitutionListPageSize) + 1;

var filtQuery = query

.Skip (pageNumber.Value * InstitutionListPageSize)

.Take (InstitutionListPageSize);

model.Institutions = filtQuery. ToArray ().Select (x => new InstitutionListViewModel. InstitutionData

{

InstitutionID = x. InstitutionID,

ShortName = x. BriefName ?? x. FullName ?? «» ,

FullName = x. FullName ?? «» ,

InstitutionTypeName = x. InstitutionTypeID == 1? «Π’Π£Π—»: (x.InstitutionTypeID == 2? «Π‘Π‘Π£Π—»: «»),

FormOfLawName = x. FormOfLaw ≠ null? x.FormOfLaw.Name: «» ,

Owner = x. OwnerDepartment ?? «» ,

RegionName = x. RegionType ≠ null? x.RegionType.Name: «» ,

UserCount = x.UserPolicy.Count ()

}).ToArray ();

return new AjaxResultModel { Data = model };

}

/// Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ интституты ΠΈ ΠΈΡ… Π·Π°ΡΠ²ΠΊΠΈ

public static AjaxResultModel GetRequestList (this InstitutionsEntities dbContext, RequestListViewModel model)

{

//var query = from request in dbContext. RequestDirection

// join institute in dbContext. Institution on request. Request_ID equals institute. InstitutionID

// select new { InstId = institute. InstitutionID, /*Date = request. ChangeDate,*/ name = institute. FullName, /*DirId = request. Direction_ID */};

//query = query. Distinct ();

var query2 = dbContext.RequestDirection.Where (x => x. Activity == «W»).Include (x => x. Institution);

List query1 = query2. Select (x => x.Institution.InstitutionID).Distinct ().ToList ();

List queryL = new List ();

foreach (RequestDirection q in query2)

{

if (query1.Contains (q.Request_ID))

{

queryL.Add (q);

query1.Remove (q.Institution.InstitutionID);

}

}

var query = queryL. AsEnumerable ();

//sorting

if ((model.SortID ?? 0) == 0)

model.SortID = 1;

if (model.SortID == 1) query = query. OrderBy (x => x.Institution.FullName);

if (model.SortID == -1) query = query. OrderByDescending (x => x.Institution.FullName);

if (model.SortID == 3) query = query. OrderBy (x => x. ChangeDate);

if (model.SortID == -3) query = query. OrderByDescending (x => x. ChangeDate);

if (model.SortID == 2) query = query. OrderBy (x => dbContext.RequestDirection.Where (z => z.Institution.InstitutionID == x. Request_ID && z. Activity == «W»).Count ());

if (model.SortID == -2) query = query. OrderByDescending (x => dbContext.RequestDirection.Where (z => z.Institution.InstitutionID == x. Request_ID && z. Activity == «W»).Count ());

model.TotalItemCount = query. Count ();

/*

if (model.Filter ≠ null)

{

if (!String.IsNullOrEmpty (model.Filter.ShortName))

query = query. Where (x => x.BriefName.Contains (model.Filter.ShortName));

if (!String.IsNullOrEmpty (model.Filter.FullName))

query = query. Where (x => x.FullName.Contains (model.Filter.FullName));

if (!String.IsNullOrEmpty (model.Filter.Owner))

query = query. Where (x => x.OwnerDepartment.Contains (model.Filter.Owner));

if (model.Filter.InstitutionTypeID > 0)

query = query. Where (x => x. InstitutionTypeID == model.Filter.InstitutionTypeID);

if (model.Filter.FormOfLawID > 0)

query = query. Where (x => x. FormOfLawID == model.Filter.FormOfLawID);

if (model.Filter.RegionID > 0)

query = query. Where (x => x. RegionID == model.Filter.RegionID);

if (!String.IsNullOrEmpty (model.Filter.OGRN))

query = query. Where (x => x. OGRN == model.Filter.OGRN);

if (!String.IsNullOrEmpty (model.Filter.INN))

query = query. Where (x => x. OGRN == model.Filter.INN);

}

*/

var pageNumber = model. PageNumber;

if (!pageNumber.HasValue || pageNumber < 0) pageNumber = 0;

int totalCount = query. Count ();

model.TotalItemFilteredCount = totalCount;

model.TotalPageCount = ((Math.Max (totalCount, 1) — 1) / InstitutionListPageSize) + 1;

var filtQuery = query

.Skip (pageNumber.Value * InstitutionListPageSize)

.Take (InstitutionListPageSize);

model.Institutions = filtQuery. ToArray ().Select (x => new RequestListViewModel. InstitutionData

{

InstitutionID = x. Request_ID,

FullName = x.Institution.FullName,

RequestNumber = dbContext.RequestDirection.Where (z => z.Institution.InstitutionID == x. Request_ID && z. Activity == «W»).Count (),

Date = x.ChangeDate.ToString ()

}).ToArray ();

return new AjaxResultModel { Data = model };

}

public static AjaxResultModel DenyRequestAdmin (this InstitutionsEntities dbContext, int DirectionID, int InstitutionID, string Comment)

{

if (DirectionID * InstitutionID == 0) return new AjaxResultModel («Data sending error. Try again later.»);

RequestDirection rq = dbContext.RequestDirection.Where (x => x. Direction_ID == DirectionID && x. Request_ID == InstitutionID).Single ();

rq.Activity = «D» ;

RequestComments rc = Model.Institutions.RequestComments.CreateRequestComments (dbContext.RequestComments.Count () + 1, «A», DirectionID, InstitutionID);

rc.Comment = Comment;

dbContext.AddToRequestComments (rc);

dbContext.SaveChanges ();

return new AjaxResultModel ();

}

public static AjaxResultModel AcceptRequest (this InstitutionsEntities dbContext, int DirID, int InstId, int adType)

{

RequestDirection rd = dbContext.RequestDirection.Where (x => x. Direction_ID == DirID && x. Request_ID == InstId && x. AdmissionItemType == adType).Single ();

using (EntrantsEntities dbContextE = new EntrantsEntities ())

{

if (rd.Action == «Add»)

{

GVUZ.Model.Entrants.AllowedDirections ad = new GVUZ.Model.Entrants.AllowedDirections ();

ad.InstitutionID = InstId;

ad.AdmissionItemTypeID = (short)adType;

ad.DirectionID = DirID;

dbContextE.AllowedDirections.AddObject (ad);

}

if (rd.Action == «Delete»)

{

GVUZ.Model.Entrants.AllowedDirections ad = dbContextE.AllowedDirections.Where (x =>

x.InstitutionID == InstId &&

x.AdmissionItemTypeID == (short)adType &&

x.DirectionID == DirID).First ();

dbContextE.AllowedDirections.DeleteObject (ad);

}

dbContextE.SaveChanges ();

}

dbContext.RequestDirection.DeleteObject (rd);

dbContext.SaveChanges ();

return new AjaxResultModel ();

}

public static AjaxResultModel AtoU (this InstitutionsEntities dbContext, int instid)

{

foreach (RequestDirection rd in dbContext.RequestDirection.Where (x => x. Activity == «A» && x. Request_ID == instid))

{

rd.Activity = «W» ;

}

dbContext.SaveChanges ();

return new AjaxResultModel ();

}

class RequestThread

{

System.Threading.Thread thread;

InstitutionsEntities dbContext;

public RequestThread (int instID)

{

thread = new System.Threading.Thread (this.func);

thread.Start (instID);

dbContext = new InstitutionsEntities ();

}

void func (object instID)

{

int id = Convert. ToInt32(instID);

System.Threading.Thread.Sleep (900 000);

foreach (RequestDirection rd in dbContext.RequestDirection.Where (x => x. Activity == «A» && x. Request_ID == id))

{

rd.Activity = «W» ;

}

dbContext.SaveChanges ();

}

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ