浏览代码

Added RaisedBy and IssuedBy handling to Purchase Orders
Job Requisition Item Status codes now take include Dimesniosn.Value in calculations

frogsoftware 1 年之前
父节点
当前提交
e07c277730

+ 47 - 1
prs.classes/Entities/Job/Requisitions/JobRequisitionItemPurchaseOrderItem.cs

@@ -6,6 +6,52 @@ using System.Text;
 
 namespace Comal.Classes
 {
+    
+    public class JobRequisitionItemPurchaseOrderLink : EntityLink<PurchaseOrder>
+    {
+        
+        [NullEditor]
+        public override Guid ID { get; set; }
+        
+        [NullEditor]
+        public string PONumber { get; set; }
+        
+        [NullEditor]
+        public DateTime ClosedDate { get; set; }
+        
+    }
+    
+    public class JobRequisitionItemProductLink : EntityLink<Product>
+    {
+        [NullEditor]
+        public override Guid ID { get; set; }
+        
+        [NullEditor]
+        public String Code { get; set; }
+    }
+    
+    public class JobRequisitionItemPurchaseOrderItemLink : EntityLink<PurchaseOrderItem>
+    {
+        [NullEditor]
+        public override Guid ID { get; set; }
+        
+        [NullEditor]
+        public JobRequisitionItemPurchaseOrderLink PurchaseOrderLink { get; set; }
+        
+        [NullEditor]
+        public JobRequisitionItemProductLink Product { get; set; }
+
+        [NullEditor]
+        public StockDimensions Dimensions { get; set; }
+
+        [NullEditor]
+        public double Qty { get; set; }
+
+        [NullEditor]
+        public DateTime ReceivedDate { get; set; }
+        
+    }
+    
     public class JobRequisitionItemPurchaseOrderItem : Entity, IRemotable, IPersistent, IOneToMany<JobRequisitionItem>, ILicense<ProjectManagementLicense>
     {
         [NullEditor]
@@ -34,6 +80,6 @@ namespace Comal.Classes
         }
         [LookupDefinition(typeof(PurchaseOrderItemLookup))]
         [EntityRelationship(DeleteAction.Cascade)]
-        public PurchaseOrderItemLink PurchaseOrderItem { get; set; }
+        public JobRequisitionItemPurchaseOrderItemLink PurchaseOrderItem { get; set; }
     }
 }

+ 1 - 0
prs.classes/Entities/PurchaseOrder/PurchaseOrderItemLink.cs

@@ -3,6 +3,7 @@ using InABox.Core;
 
 namespace Comal.Classes
 {
+    
     public class PurchaseOrderItemLink : EntityLink<PurchaseOrderItem>
     {
         [PopupEditor(typeof(PurchaseOrderItem), "PurchaseOrderLink.PONumber", "Product.Code", "Description", "Qty", "ExTax", "TaxCode.ID", "TaxCode.Rate", "Tax", "IncTax", "CostCentre.ID", "PurchaseGL.ID")]

+ 7 - 4
prs.classes/Entities/PurchaseOrder/PurchaseOrderLink.cs

@@ -3,15 +3,19 @@ using InABox.Core;
 
 namespace Comal.Classes
 {
+    
     public class PurchaseOrderLink : EntityLink<PurchaseOrder>
     {
+        
         [LookupEditor(typeof(PurchaseOrder))]
         public override Guid ID { get; set; }
-
+        
         [CodeEditor(Visible = Visible.Default, Editable = Editable.Hidden)]
-        //[NullEditor]
         public string PONumber { get; set; }
-
+        
+        [NullEditor]
+        public DateTime ClosedDate { get; set; }
+        
         [CodeEditor(Visible = Visible.Default, Editable = Editable.Hidden)]
         //[NullEditor]
         public string SupplierCode { get; set; }
@@ -21,6 +25,5 @@ namespace Comal.Classes
         [NullEditor]
         public PurchaseOrderCategoryLink Category { get; set; }
 
-        public DateTime ClosedDate { get; set; }
     }
 }

+ 1 - 1
prs.desktop/Panels/Requisitions/RequisitionItemGrid.cs

@@ -87,7 +87,7 @@ namespace PRSDesktop
             if (item.IsChanged())
             {
                 Client.Save(item, item.Picked.IsEmpty() ? "Item Unpicked" : "Item Picked", (o,e) => { });
-                Data.LoadRow(row, item);
+                Data.FillRow(row, item);
                 InvalidateRow(row);
                 return false;
             }

+ 9 - 0
prs.stores/BaseStore.cs

@@ -201,5 +201,14 @@ namespace Comal.Stores
 
             FindSubStore<Notification>().Save(notification, "");
         }
+
+        protected Guid GetEmployeeIDFromUserGuid()
+        {
+            return Provider.Query(
+                    new Filter<Employee>(x => x.UserLink.ID).IsEqualTo(UserGuid),
+                    new Columns<Employee>(x => x.ID)
+                ).Rows.FirstOrDefault()?
+                .Get<Employee, Guid>(x => x.ID) ?? Guid.Empty;
+        }
     }
 }

+ 11 - 8
prs.stores/JobRequisitionItemStore.cs

@@ -142,6 +142,7 @@ public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
             x => x.Style.ID,
             x => x.Product.ID,
             x => x.Qty,
+            x => x.Dimensions.Value,
             x => x.Notes);
     }
 
@@ -164,28 +165,29 @@ public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
             // However, we do include transfers out of this requi, since then the stuff ain't actually been allocated.
             var stockMovements = GetNotIssued(store, item.ID,
                 new Columns<StockMovement>(x => x.Units)
-                    .Add(x => x.Style.ID));
+                    .Add(x => x.Style.ID)
+                    .Add(x=>x.Dimensions.Value));
             var styleTotal = 0.0;
             var total = 0.0;
             foreach (var mvt in stockMovements)
             {
                 if (mvt.Style.ID == item.Style.ID)
                 {
-                    styleTotal += mvt.Units;
+                    styleTotal += mvt.Units * mvt.Dimensions.Value;
                 }
                 total += mvt.Units;
             }
 
-            var remStyle = item.Qty - styleTotal;
-            var remTotal = item.Qty - total;
+            var remStyle = (item.Qty * item.Dimensions.Value) - styleTotal;
+            var remTotal = (item.Qty * item.Dimensions.Value) - total;
 
             if (remStyle <= 0)
             {
                 // Now, we care about what's actually been issued.
-                var issued = GetIssued(store, item.ID, new Columns<StockMovement>(x => x.Units));
+                var issued = GetIssued(store, item.ID, new Columns<StockMovement>(x => x.Units).Add(x=>x.Dimensions.Value));
 
                 // If everything has been issued, the issued total will be a negative value to balance the Qty.
-                if(item.Qty + issued.Sum(x => x.Units) <= 0)
+                if(item.Qty + issued.Sum(x => x.Units * x.Dimensions.Value) <= 0)
                 {
                     item.Status = JobRequisitionItemStatus.Issued;
                 }
@@ -214,13 +216,14 @@ public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
                     new Filter<JobRequisitionItemPurchaseOrderItem>(x => x.JobRequisitionItem.ID).IsEqualTo(item.ID)
                         .And(x => x.PurchaseOrderItem.ReceivedDate).IsEqualTo(DateTime.MinValue),
                     new Columns<JobRequisitionItemPurchaseOrderItem>(x => x.PurchaseOrderItem.Product.ID)
-                        .Add(x => x.PurchaseOrderItem.Qty))
+                        .Add(x => x.PurchaseOrderItem.Qty)
+                        .Add(x=>x.PurchaseOrderItem.Dimensions.Value))
                     .ToObjects<JobRequisitionItemPurchaseOrderItem>()
                     .ToList();
                 var stockOrders = jriPois.Where(x => x.PurchaseOrderItem.Product.ID == item.Product.ID).ToList();
                 var treatmentOrders = jriPois.Where(x => x.PurchaseOrderItem.Product.ID != item.Product.ID).ToList();
 
-                remTotal -= stockOrders.Sum(x => x.PurchaseOrderItem.Qty);
+                remTotal -= stockOrders.Sum(x => x.PurchaseOrderItem.Qty * x.PurchaseOrderItem.Dimensions.Value);
                 if (remTotal <= 0)
                 {
                     if (stockOrders.Count > 0)

+ 16 - 0
prs.stores/PurchaseOrderStore.cs

@@ -10,6 +10,22 @@ namespace Comal.Stores
 {
     public class PurchaseOrderStore : BaseStore<PurchaseOrder>
     {
+        protected override void BeforeSave(PurchaseOrder entity)
+        {
+            base.BeforeSave(entity);
+            Guid? empid = null;
+            if (entity.HasOriginalValue(x => x.IssuedDate) && entity.GetOriginalValue(x => x.IssuedDate).IsEmpty())
+            {
+                empid ??= GetEmployeeIDFromUserGuid();
+                entity.IssuedBy.ID = empid.Value;
+            }
+            if (entity.ID == Guid.Empty)
+            {
+                empid ??= GetEmployeeIDFromUserGuid();
+                entity.RaisedBy.ID = empid.Value;
+            }
+        }
+
         protected override void AfterSave(PurchaseOrder entity)
         {
             base.AfterSave(entity);