Browse Source

Fixed BillApproval system

Kenric Nugteren 4 weeks ago
parent
commit
d357ef47df
2 changed files with 23 additions and 3 deletions
  1. 2 2
      prs.classes/Entities/Bill/Bill.cs
  2. 21 1
      prs.stores/BillStore.cs

+ 2 - 2
prs.classes/Entities/Bill/Bill.cs

@@ -206,10 +206,10 @@ namespace Comal.Classes
         [EditorSequence("Issues", 1)]
         public ManagedProblem Problem { get; set; }
         
-        public static BillApprovalStatus CalculateApprovalStatus(BillApprovalStatus[] statuses)
+        public static BillApprovalStatus CalculateApprovalStatus(IList<BillApprovalStatus> statuses)
         {
             BillApprovalStatus _result = BillApprovalStatus.NotYetApproved;
-            if (!statuses.Any() || statuses.All(x=>x == BillApprovalStatus.Approved))
+            if (!statuses.Any() || statuses.All(x => x == BillApprovalStatus.Approved))
                 _result = BillApprovalStatus.Approved;
             else if (statuses.Contains(BillApprovalStatus.Rejected))
                 _result = BillApprovalStatus.Rejected;

+ 21 - 1
prs.stores/BillStore.cs

@@ -51,7 +51,13 @@ internal class BillStore : BaseStore<Bill>
                 .And(x => x.IsCustom).IsEqualTo(false),
             Columns.Required<BillApproval>().Add(x => x.ID))
             .ToList<BillApproval>();
-        Provider.Delete(approvals, UserID);
+
+        if(approvals.Count > 0)
+        {
+            Provider.Delete(approvals, UserID);
+            bill.ApprovalStatus = BillApprovalStatus.Approved;
+            Provider.Save(bill);
+        }
     }
 
     private void UpdateBillApprovals(Bill bill)
@@ -111,6 +117,8 @@ internal class BillStore : BaseStore<Bill>
             var toAdd = new List<BillApproval>();
             var toRemove = new List<BillApproval>();
 
+            var statuses = new List<BillApprovalStatus>();
+
             var newList = customApprovals.ToList();
             foreach(var approval in autoApprovals)
             {
@@ -118,6 +126,7 @@ internal class BillStore : BaseStore<Bill>
                 if (!approvals.Any(x => x.Employee.ID == approval.Employee.ID))
                 {
                     toAdd.Add(approval);
+                    statuses.Add(approval.Status);
                 }
             }
             foreach(var approval in approvals)
@@ -126,6 +135,10 @@ internal class BillStore : BaseStore<Bill>
                 {
                     toRemove.Add(approval);
                 }
+                else
+                {
+                    statuses.Add(approval.Status);
+                }
             }
             foreach(var approval in toAdd)
             {
@@ -133,6 +146,13 @@ internal class BillStore : BaseStore<Bill>
             }
             Provider.Save(toAdd);
             Provider.Delete(toRemove, UserID);
+
+            var status = Bill.CalculateApprovalStatus(statuses);
+            if(status != bill.ApprovalStatus)
+            {
+                bill.ApprovalStatus = status;
+                Provider.Save(bill);
+            }
         }
         catch(Exception e)
         {