Exemplo n.º 1
0
 async void EditItem_Click(object sender, RoutedEventArgs e)
 {
     if (StatementsLV.SelectedItem != null)
     {
         await EditStatementDialog.Show((Statement)StatementsLV.SelectedItem, false, false, false);
     }
 }
Exemplo n.º 2
0
 async Task <Statement> AddStatement(bool generatedComplexMode, bool generatedTotalMode, bool background = false)
 {
     if (!(generatedComplexMode && generatedTotalMode))
     {
         var statement = new Statement();
         //Attention                    'HERE. It cannot be optimized that way, you thought about.
         statement.StatementNumber = statement.ID = int.Parse(await NetworkUtils.ExecuteDataAction <Statement>(background ? null : this, statement, DataAction.Save));
         statement.IsLocal         = false;
         if (!background)
         {
             await EditStatementDialog.Show(statement, true, generatedComplexMode, generatedTotalMode);
         }
         return(statement);
     }
     else
     {
         return(null);
     }
 }
Exemplo n.º 3
0
        async Task GenerateStatement(bool complexMode, bool totalMode, int strangeThreshold)
        {
            if (StatementsLV.SelectedItems.Count > 0)
            {
                if (StatementsLV.SelectedItems.Count > strangeThreshold ||
                    MessageBox.Show($"Имеет ли смысл? Меньше {strangeThreshold + 1} ведомостей.", "Странная операция", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                {
                    var statement = await AddStatement(complexMode, totalMode, true);

                    if (statement != null && statement.ID != -1)
                    {
                        Cursor = Cursors.Wait;

                        var data = new List <StatementResult>();
                        foreach (Statement current in StatementsLV.SelectedItems)
                        {
                            data.AddRange(await NetworkUtils.RequestData <StatementResult>(this, strict: true, orAll: true, preserveContext: true, column: null,
                                                                                           whereParams: (name: nameof(StatementResult.StatementID), value: current.ID)));
                        }
                        var distinctor = new DistinctByStudentAndSubject();
                        //Latest - at the end
                        data.Sort((c1, c2) => c1.StatementResultDate > c2.StatementResultDate ? 1 : c1.StatementResultDate < c2.StatementResultDate ? -1 : 0);

                        //Get empty student-subject intersections, fill with blanks.
                        //Get last student-subject couples, distinct by distinctor(student-subject)->
                        //set owner as just created statement->
                        //make 'local' to tell the system to re-create it on server side->
                        //save on server->
                        //update data in opened by adding new statement->
                        var studentIDs = data.Select(c => c.StudentID).Distinct();
                        var subjectIDs = data.Select(c => c.SubjectID).Distinct();

                        foreach (var studentID in studentIDs)
                        {
                            foreach (var subjectID in subjectIDs)
                            {
                                if (!data.Any(c => c.StudentID == studentID && c.SubjectID == subjectID))
                                {
                                    await NetworkUtils.ExecuteDataAction <StatementResult>(null, new StatementResult
                                    {
                                        StatementID         = statement.ID,
                                        StudentID           = studentID,
                                        SubjectID           = subjectID,
                                        MarkValue           = (sbyte)TechnicalMarkValue.Blank,
                                        StatementResultDate = null,
                                        TicketNumber        = -1
                                    }, DataAction.Save);
                                }
                            }
                        }

                        foreach (var current in data.Select(c => (studentID: c.StudentID, subjectID: c.SubjectID))
                                 .Select(c => data.LastOrDefault(currentResult => currentResult.StudentID == c.studentID &&
                                                                 currentResult.SubjectID == c.subjectID))
                                 .Distinct(distinctor))
                        {
                            current.StatementID = statement.ID;
                            current.IsLocal     = true;
                            await NetworkUtils.ExecuteDataAction <StatementResult>(null, current, DataAction.Save);
                        }

                        Cursor = Cursors.Arrow;

                        await EditStatementDialog.Show(statement, true, complexMode, totalMode);

                        await EditStatementDialog.UpdateData();
                    }
                    await UpdateData();
                }
            }
        }