1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Threading.Tasks;
6: using Microsoft.EntityFrameworkCore;
7:
8: namespace Ia.Islamic.Cl.Model.Ui
9: {
10: ////////////////////////////////////////////////////////////////////////////
11:
12: /// <summary publish="true">
13: /// Koran Reference Network Class Library support functions: UI model
14: /// </summary>
15: /// <value>
16: /// https://msdn.microsoft.com/en-us/library/z1hkazw7(v=vs.100).aspx
17: /// </value>
18: /// <remarks>
19: /// Copyright © 2001-2015 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
20: ///
21: /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
22: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
23: ///
24: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
25: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
26: ///
27: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
28: ///
29: /// Copyright notice: This notice may not be removed or altered from any source distribution.
30: /// </remarks>
31: public class VerseTopicUi
32: {
33: public string Id { get; set; }
34: public int Number { get; set; }
35: public int ChapterNumber { get; set; }
36: public int? TopicId { get; set; }
37: public int? NumberOfVerses { get; set; }
38:
39: public string Content { get; set; }
40:
41: public string ChapterVerseNumber
42: {
43: get
44: {
45: return ChapterNumber + ":" + Number;
46: }
47: }
48:
49: ////////////////////////////////////////////////////////////////////////////
50:
51: /// <summary>
52: ///
53: /// </summary>
54: public static List<VerseTopicUi> ReturnVerseTopicListUsingLanguageSymbolAndChapter(string languageSymbol, int chapterNumber, out int op, out string result)
55: {
56: List<VerseTopicUi> verseTopicList;
57:
58: op = 0;
59: result = "";
60: verseTopicList = null;
61:
62: try
63: {
64: using (var db = new Ia.Islamic.Cl.Model.Context.Koran())
65: {
66: var query = from q in db.VerseTopics
67: //join q2 in db.Verses on q.VerseNumber equals q2.Number
68: where /*q2.Chapter.Koran.Language.Symbol == languageSymbol &&*/ q.ChapterNumber == chapterNumber
69: select new VerseTopicUi
70: {
71: Id = q.Id,
72: Number = q.VerseNumber,
73: ChapterNumber = q.ChapterNumber,
74: NumberOfVerses = q.NumberOfVerses,
75: TopicId = q.TopicId,
76: Content = "" //q2.Content
77: };
78:
79: verseTopicList = (query).OrderBy(p => p.Id).ToList();
80:
81: // below: a single content
82: VerseTopicUi tempVerseTopicUI;
83:
84: foreach (VerseTopicUi vt in verseTopicList)
85: {
86: tempVerseTopicUI = VerseTopic(new Ia.Cl.Model.Language("ar"), chapterNumber, vt.Number, vt.NumberOfVerses, out op, out result);
87:
88: if (tempVerseTopicUI.Content != null) vt.Content = tempVerseTopicUI.Content;
89: }
90:
91: if (verseTopicList.Count() > 0) op = 1;
92: }
93: }
94: catch (Exception ex)
95: {
96: op = -1;
97: result = "Exception: " + ex.Message + ". ";
98: verseTopicList = null;
99: }
100:
101: return verseTopicList;
102: }
103:
104: ////////////////////////////////////////////////////////////////////////////
105:
106: /// <summary>
107: ///
108: /// </summary>
109: public static VerseTopicUi VerseTopic(Ia.Cl.Model.Language language, int chapterNumber, int verseNumber, int? numberOfVerses, out int op, out string result)
110: {
111: VerseTopicUi verse;
112: List<VerseTopicUi> verseList;
113:
114: op = 0;
115: result = "";
116: verse = new VerseTopicUi();
117:
118: try
119: {
120: using (var db = new Ia.Islamic.Cl.Model.Context.Koran())
121: {
122: verseList = (from q in db.Verses
123: where q.Chapter.Koran.LanguageIso == language.Id
124: && q.Chapter.Number == chapterNumber
125: && q.Number >= verseNumber
126: && q.Number <= verseNumber + (numberOfVerses - 1)
127: select new VerseTopicUi
128: {
129: Id = q.Id,
130: Number = q.Number,
131: ChapterNumber = q.Chapter.Number,
132: Content = q.Content
133: }).OrderBy(p => p.Id).ToList();
134:
135: if (verseList.Count() > 0)
136: {
137: verse.Number = verseList[0].Number;
138: verse.ChapterNumber = verseList[0].ChapterNumber;
139: verse.NumberOfVerses = numberOfVerses;
140:
141: foreach (VerseTopicUi v in verseList)
142: {
143: verse.Content += v.Content + " ";
144: }
145:
146: op = 1;
147: }
148: else
149: {
150: //op = -1;
151: //result = "Error: ReturnTopicVerseUsingLanguageAndChapterNumberAndVerseNumberAndNumberOfVerses()";
152: }
153: }
154: }
155: catch (Exception ex)
156: {
157: op = -1;
158: result = "Exception: " + ex.Message + ". ";
159: verse = null;
160: }
161:
162: return verse;
163: }
164:
165: ////////////////////////////////////////////////////////////////////////////
166: ////////////////////////////////////////////////////////////////////////////
167: }
168:
169: ////////////////////////////////////////////////////////////////////////////
170: ////////////////////////////////////////////////////////////////////////////
171: }