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.AssignedDiplomProjects.FirstOrDefault(x => x.DiplomProjectId == 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.AssignedDiplomProjects.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.AssignedDiplomProjects.Remove(studentAssignment); } if (assignment == null) { assignment = new AssignedDiplomProject { DiplomProjectId = projectId }; Context.AssignedDiplomProjects.Add(assignment); } assignment.StudentId = studentId == 0 ? assignment.StudentId : studentId; assignment.ApproveDate = isLecturer ? (DateTime?)DateTime.Now : null; var dp = Context.DiplomProjects.FirstOrDefault(x => x.DiplomProjectId == projectId); dp.DateStart = isLecturer ? (DateTime?)DateTime.Now : null; Context.SaveChanges(); }
private static XmlDocument DiplomProjectToXml(AssignedDiplomProject awork, CultureInfo cultureInfo) { var doc = new XmlDocument(); var root = doc.CreateElement("YearlyWorks"); root.SetAttribute("DiplomProjectId", awork.DiplomProject.DiplomProjectId.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.DiplomProject.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.InnerText = awork.DiplomProject.Univer; children.Add(univer); var faculty = doc.CreateElement("item"); faculty.SetAttribute("name", "Faculty"); faculty.InnerText = awork.DiplomProject.Faculty; children.Add(faculty); var head = doc.CreateElement("item"); head.SetAttribute("name", "HeadCathedra"); head.InnerText = awork.DiplomProject.HeadCathedra; children.Add(head); children.AddRange(CreateStringNodes(doc, "InputData", awork.DiplomProject.InputData, 439, 638, 13)); children.AddRange(CreateStringNodes(doc, "RPZContent", awork.DiplomProject.RpzContent, 331, 638, 15)); children.AddRange(CreateStringNodes(doc, "DrawMaterials", awork.DiplomProject.DrawMaterials, 403, 638, 5)); children.AddRange(CreateStringNodes(doc, "Consultants", awork.DiplomProject.Consultants, 271, 638, 6)); var pd = doc.CreateElement("item"); pd.SetAttribute("name", "PublishData"); pd.InnerText = awork.DiplomProject.DateStart.HasValue ? awork.DiplomProject.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.DiplomProject.DateEnd.HasValue ? awork.DiplomProject.DateEnd.Value.ToString("d' 'MMMM' 'yyyy'г.'", cultureInfo.DateTimeFormat) : string.Empty; children.Add(ed); //SubjectGroup sg = work.Subject.Groups.GetByGroupId(work.Student.GroupId); var percentageGraph = new StringBuilder(); var pgs = awork.Student.Group.Secretary != null ? awork.Student.Group.Secretary.DiplomPercentagesGraphs : new List<DiplomPercentagesGraph>(); 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 DiplomProjectToDocView(AssignedDiplomProject work) { var sb = new StringBuilder(); var cinfo = CultureInfo.CreateSpecificCulture("ru-ru"); var doc = DiplomProjectToXml(work, cinfo); var xslt = new XslTransform(); var url = string.Format("{0}.Export.tasklist.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(); }