public void AssignProject(int userId, int projectId, int studentId) { var isLecturer = AuthorizationHelper.IsLecturer(Context, userId); var isStudent = AuthorizationHelper.IsStudent(Context, userId); studentId = isStudent ? userId : studentId; var assignment = Context.AssignedCourseProjects.FirstOrDefault(x => x.CourseProjectId == projectId); if ((isLecturer && assignment != null && assignment.ApproveDate.HasValue) || (isStudent && assignment != null)) { throw new ApplicationException("The selected Diplom Project has already been assigned!"); } var studentAssignments = Context.AssignedCourseProjects.Where(x => x.StudentId == studentId); if (isStudent && studentAssignments.Any(x => x.ApproveDate.HasValue)) { throw new ApplicationException("You already have an assigned project!"); } foreach (var studentAssignment in studentAssignments) { Context.AssignedCourseProjects.Remove(studentAssignment); } if (assignment == null) { assignment = new AssignedCourseProject { CourseProjectId = projectId }; Context.AssignedCourseProjects.Add(assignment); } assignment.StudentId = studentId == 0 ? assignment.StudentId : studentId; assignment.ApproveDate = isLecturer ? (DateTime?)DateTime.Now : null; Context.SaveChanges(); }
private static XmlDocument CourseProjectToXml(AssignedCourseProject awork, CultureInfo cultureInfo) { var doc = new XmlDocument(); var root = doc.CreateElement("YearlyWorks"); root.SetAttribute("DiplomProjectId", awork.CourseProject.CourseProjectId.ToString()); root.SetAttribute("year", awork.ApproveDate.HasValue ? awork.ApproveDate.Value.ToString("yyyy'г.'", cultureInfo.DateTimeFormat) : string.Empty); var children = new List<XmlElement>(); children.AddRange(CreateStringNodes(doc, "Theme", awork.CourseProject.Theme, 523, 638, 5)); var student = doc.CreateElement("item"); student.SetAttribute("name", "Student"); student.InnerText = string.Format("{0} {1} {2}", awork.Student.LastName, awork.Student.FirstName, awork.Student.MiddleName); children.Add(student); var group = doc.CreateElement("item"); group.SetAttribute("name", "Group"); group.InnerText = awork.Student.Group.Name; children.Add(group); var specialty = doc.CreateElement("item"); specialty.SetAttribute("name", "Specialty"); // specialty.InnerText = awork.Student.Group.Speciality.Specialty; TODO children.Add(specialty); var specialtyShifr = doc.CreateElement("item"); specialtyShifr.SetAttribute("name", "SpecialtyShifr"); // specialtyShifr.InnerText = awork.Student.Group.Speciality.SpecialtyShifr; children.Add(specialtyShifr); var specializationShifr = doc.CreateElement("item"); specializationShifr.SetAttribute("name", "SpecializationShifr"); // specializationShifr.InnerText = awork.Student.Group.Speciality.SpecializationShifr; children.Add(specializationShifr); var specialization = doc.CreateElement("item"); specialization.SetAttribute("name", "Specialization"); // specialization.InnerText = awork.Student.Group.Speciality.Specialization; children.Add(specialization); var univer = doc.CreateElement("item"); univer.SetAttribute("name", "Univer"); univer.InnerXml = awork.CourseProject.Univer; children.Add(univer); var faculty = doc.CreateElement("item"); faculty.SetAttribute("name", "Faculty"); faculty.InnerText = awork.CourseProject.Faculty; children.Add(faculty); var head = doc.CreateElement("item"); head.SetAttribute("name", "HeadCathedra"); head.InnerText = awork.CourseProject.HeadCathedra; children.Add(head); children.AddRange(CreateStringNodes(doc, "InputData", awork.CourseProject.InputData, 439, 638, 8)); children.AddRange(CreateStringNodes(doc, "RPZContent", awork.CourseProject.RpzContent, 331, 638, 15)); children.AddRange(CreateStringNodes(doc, "DrawMaterials", awork.CourseProject.DrawMaterials, 403, 638, 7)); children.AddRange(CreateStringNodes(doc, "Consultants", awork.CourseProject.Consultants, 271, 638, 6)); var pd = doc.CreateElement("item"); pd.SetAttribute("name", "PublishData"); pd.InnerText = awork.CourseProject.DateStart.HasValue ? awork.CourseProject.DateStart.Value.ToString("d' 'MMMM' 'yyyy'г.'", cultureInfo.DateTimeFormat) : string.Empty; children.Add(pd); var ed = doc.CreateElement("item"); ed.SetAttribute("name", "EndData"); ed.InnerText = awork.CourseProject.DateEnd.HasValue ? awork.CourseProject.DateEnd.Value.ToString("d' 'MMMM' 'yyyy'г.'", cultureInfo.DateTimeFormat) : string.Empty; children.Add(ed); var percentageGraph = new StringBuilder(); var pgs = awork.CourseProject.Subject.CoursePersentagesGraphs; var i = 1; foreach (var pg in pgs) { percentageGraph.AppendFormat(CultureInfo.CreateSpecificCulture("ru-RU"), "{3}. {0} \t{1}% \t{2:d MMMM yyyy} г.\n", pg.Name, pg.Percentage, pg.Date, i++); } children.AddRange(CreateStringNodes(doc, "Workflow", percentageGraph.ToString(), 638, 638, 14)); foreach (var item in children) { root.AppendChild(item); } doc.AppendChild(root); return doc; }
public static string CourseProjectToDocView(AssignedCourseProject work) { var sb = new StringBuilder(); var cinfo = CultureInfo.CreateSpecificCulture("ru-ru"); var doc = CourseProjectToXml(work, cinfo); var xslt = new XslTransform(); var url = string.Format("{0}.Export.cptasklist.xslt", Assembly.GetExecutingAssembly().GetName().Name); var xsltFile = Assembly.GetExecutingAssembly().GetManifestResourceStream(url); xsltFile.Seek(0, SeekOrigin.Begin); using (var xmlr = XmlReader.Create(xsltFile)) { xslt.Load(xmlr); using (TextWriter tw = new StringWriter(sb)) { var result = new XsltArgumentList(); xslt.Transform(doc, result, tw); } } return sb.ToString(); }