Browse Source

Added Sell GL Code to Customers and Invoices
Added Customer creation / linking to V6 Import
BOM and Requi "Create PO" functions now pass unit costs through

frogsoftware 1 year ago
parent
commit
35428cc6ea

+ 5 - 1
prs.classes/Entities/Customer/Customer.cs

@@ -101,7 +101,11 @@ namespace Comal.Classes
         [EditorSequence("Accounts", 4)]
         [LookupDefinition(typeof(AccountsReceivablePaymentTermsLookup<Customer>))]
         public PaymentTermsLink Terms { get; set; }
-
+        
+        [EditorSequence("Accounts", 5)]
+        [LookupDefinition(typeof(AccountsReceivablePaymentTermsLookup<Customer>))]
+        public SalesGLCodeLink GLCode { get; set; }
+        
         [EditorSequence("Accounts", 5)]
         [CurrencyEditor(Editable = Editable.Disabled, Summary = Summary.Sum)]
         [Aggregate(typeof(CustomerSales))]

+ 4 - 0
prs.classes/Entities/Customer/CustomerLink.cs

@@ -47,5 +47,9 @@ namespace Comal.Classes
         [NullEditor]
         [RequiredColumn]
         public PaymentTermsLink Terms { get; set; }
+        
+        [NullEditor]
+        [RequiredColumn]
+        public SalesGLCodeLink GLCode { get; set; }
     }
 }

+ 4 - 0
prs.classes/Entities/Invoice/Invoice.cs

@@ -111,6 +111,9 @@ namespace Comal.Classes
         [DateEditor(Visible = Visible.Default, TodayVisible = true)]
         public DateTime DueDate { get; set; }
         
+        [EditorSequence(15)]
+        public SalesGLCodeLink SellGL { get; set; }
+        
         [NullEditor]
         [LoggableProperty]
         [RequiredColumn]
@@ -194,6 +197,7 @@ namespace Comal.Classes
             LinkedProperties.Register<Invoice,PaymentTermsLink,String>(x=>x.CustomerLink.Terms,x=>x.Code, x=>x.Terms.Code);
             LinkedProperties.Register<Invoice,PaymentTermsLink,String>(x=>x.CustomerLink.Terms,x=>x.Description, x=>x.Terms.Description);
             LinkedProperties.Register<Invoice,PaymentTermsLink,String>(x=>x.CustomerLink.Terms,x=>x.Calculation, x=>x.Terms.Calculation);
+            LinkedProperties.Register<Invoice,SalesGLCodeLink,Guid>(x=>x.CustomerLink.GLCode,x=>x.ID, x=>x.SellGL.ID);
         }
         
     }

+ 27 - 3
prs.classes/Entities/V6/V6Quote.cs

@@ -28,13 +28,29 @@ namespace Comal.Classes
         [TextBoxEditor(Visible = Visible.Hidden)]
         [EditorSequence(4)]
         public string ClientName { get; set; }
-    
+        
         [TextBoxEditor]
         [EditorSequence(5)]
         public string Title { get; set; }
+        
+        [MemoEditor(Visible = Visible.Hidden)]
+        [EditorSequence(6)]
+        public string Street { get; set; }
+        
+        [TextBoxEditor]
+        [EditorSequence(7)]
+        public string City { get; set; }
+                
+        [TextBoxEditor]
+        [EditorSequence(8)]
+        public string State { get; set; }
+                
+        [TextBoxEditor]
+        [EditorSequence(9)]
+        public string PostCode { get; set; }
   
         [CurrencyEditor]
-        [EditorSequence(6)]
+        [EditorSequence(10)]
         public double SellPrice {get; set; }
 
         public override void ValidateQuery(string sql, List<string> errors)
@@ -46,6 +62,10 @@ namespace Comal.Classes
             ValidateField(sql, nameof(ClientID), errors);
             ValidateField(sql, nameof(ClientName), errors);
             ValidateField(sql, nameof(Title), errors);
+            ValidateField(sql, nameof(Street), errors);
+            ValidateField(sql, nameof(City), errors);
+            ValidateField(sql, nameof(State), errors);
+            ValidateField(sql, nameof(PostCode), errors);
             ValidateField(sql, nameof(SellPrice), errors);
         }
         
@@ -57,15 +77,19 @@ namespace Comal.Classes
             + $"  q.quote_num_suff as {nameof(Variation)}, \n" 
             + $"  c.cust_code as {nameof(ClientID)}, \n" 
             + $"  c.cust_name as {nameof(ClientName)}, \n" 
+            + $"  concat_ws(a.addr_1,chr(13),a.addr_2) as {nameof(Street)}, \n"
+            + $"  a.addr_3 as {nameof(City)}, \n"
+            + $"  a.addr_4 as {nameof(State)}, \n"
+            + $"  a.addr_5 as {nameof(PostCode)}, \n"
             + $"  q.quote_title as {nameof(Title)}, \n"
             + $"  q.nett_sell_price + q.nett_sell_prc_lab as {nameof(SellPrice)} \n" 
             + "from quote q \n" 
             + "  left outer join customer c on q.cust_id = c.cust_id \n" 
+            + "  left outer join addr a on quote.cust_addr_id = a.addr_id \n"
             + "where  \n"
             + "  q.quote_vers = (select max(quote_vers) from quote where quote_id = q.quote_id) \n"
             + "order by \n"
             + "  q.quote_num, \n"
             + "  q.quote_num_suff";
-
     }
 }

+ 2 - 0
prs.desktop/Panels/Jobs/BillOfMaterials/JobBillOfMaterialsItemsGrid.cs

@@ -90,6 +90,7 @@ public class JobBillOfMaterialsItemGrid : DynamicDataGrid<JobBillOfMaterialsItem
         HiddenColumns.Add(x => x.PurchaseOrderItem.PurchaseOrderLink.PONumber);
         HiddenColumns.Add(x => x.PurchaseOrderItem.ReceivedDate);
         HiddenColumns.Add(x => x.Packet.ID);
+        HiddenColumns.Add(x=>x.UnitCost);
 
         CreateRequiButton = AddButton("Create Requi", null, CreateRequi);
         AddButton("Create PO", null, CreatePO);
@@ -316,6 +317,7 @@ public class JobBillOfMaterialsItemGrid : DynamicDataGrid<JobBillOfMaterialsItem
             POItem.Job.ID = BOMItem.Job.ID;
             POItem.Dimensions.UnitSize = BOMItem.Dimensions.UnitSize;
             POItem.Description = BOMItem.Product.Name + " (" + BOMItem.Dimensions.ToString() + ")";
+            POItem.Cost = BOMItem.UnitCost;
             items.Add(POItem);
         }
         result.LoadRows(items);

+ 2 - 0
prs.desktop/Panels/Jobs/Requisitions/JobRequisitionItemGrid.cs

@@ -62,6 +62,7 @@ internal class JobRequisitionItemGrid : DynamicDataGrid<JobRequisitionItem>, IMa
         HiddenColumns.Add(x=>x.Dimensions.Weight);        
         HiddenColumns.Add(x=>x.Dimensions.Value);        
         HiddenColumns.Add(x=>x.Dimensions.UnitSize);
+        HiddenColumns.Add(x=>x.UnitCost);
         
         HiddenColumns.Add(x=>x.PickRequested);
         
@@ -121,6 +122,7 @@ internal class JobRequisitionItemGrid : DynamicDataGrid<JobRequisitionItem>, IMa
                     _poi.Job.ID = _jri.Job.ID;
                     _poi.Dimensions.UnitSize = _jri.Dimensions.UnitSize;
                     _poi.Description = _jri.Product.Name + " (" + _jri.Dimensions.ToString() + ")";
+                    _poi.Cost = _jri.UnitCost;
                     _pois[_jri.ID] = _poi;
                 }
                 Client.Save(_pois.Values, "Created From Requisition Screen");

+ 2 - 0
prs.desktop/Panels/Reservation Management/ReservationManagementItemGrid.cs

@@ -168,6 +168,7 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
         HiddenColumns.Add(x => x.Dimensions.Unit.Format);
         HiddenColumns.Add(x => x.Dimensions.Unit.Code);
         HiddenColumns.Add(x => x.Dimensions.Unit.Description);
+        HiddenColumns.Add(x=>x.UnitCost);
 
         AddDoubleColumn(x => x.Qty, "Qty.");
         InStockColumn = AddDoubleColumn(x => x.InStock, "Stk.");
@@ -362,6 +363,7 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
                     _poi.Job.ID = _jri.Job.ID;
                     _poi.Dimensions.UnitSize = _jri.Dimensions.UnitSize;
                     _poi.Description = _jri.Product.Name + " (" + _jri.Dimensions.ToString() + ")";
+                    _poi.Cost = _jri.UnitCost;
                     _pois[_jri.ID] = _poi;
                 }
                 Client.Save(_pois.Values, "Created From Requisition Screen");

+ 32 - 1
prs.desktop/Utils/MicrosoftSQL/V6Utils/V6ProjectImport.xaml.cs

@@ -542,16 +542,47 @@ public partial class V6ProjectImport : Window
             new Filter<Job>(x=>x.JobNumber).IsEqualTo(_jobno),
             Columns.Required<Job>().Add(x=>x.DefaultScope.ID)
         );
+        if (!string.IsNullOrWhiteSpace(quote.ClientID))
+        {
+            query.Add(
+                new Filter<Customer>(x => x.Code).IsEqualTo(quote.ClientID),
+                Columns.Required<Customer>()
+            );
+        }
         query.Query();
         
         var _scope = new JobScope();
-        var _job = query.Get<Job>().ToObjects<Job>()?.FirstOrDefault();
+        
+        var _job = query.Get<Job>().ToObjects<Job>().FirstOrDefault();
+        
+        var _customer = !string.IsNullOrWhiteSpace(quote.ClientID)
+            ? query.Get<Customer>().ToObjects<Customer>().FirstOrDefault()
+            : null;
+        
         if (_job == null)
         {
+            
+            if (!string.IsNullOrWhiteSpace(quote.ClientID) && _customer == null)
+            {
+                _customer = new Customer();
+                _customer.Code = quote.ClientID;
+                _customer.Name = quote.ClientName;
+                _customer.Delivery.Street = quote.Street;
+                _customer.Delivery.City = quote.City;
+                _customer.Delivery.State = quote.State;
+                _customer.Delivery.PostCode = quote.PostCode;
+                Client.Save(_customer,"Imported From V6");
+            }
+            
             _job = new Job();
             _job.JobNumber = _jobno;
             _job.Name = quote.Title;
             _job.JobStatus.CopyFrom(status);
+            if (_customer != null)
+            {
+                _job.Customer.CopyFrom(_customer);
+                _job.Account.CopyFrom(_customer);
+            }
             Client.Save(_job,"Imported From V6");
             _scope.ID = _job.DefaultScope.ID;
             _scope.CommitChanges();