From 4dd2df03cf36e94a5c4d6f2754822f2da1a4b9e8 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 11 Jul 2022 20:58:50 +0000 Subject: [PATCH] --- AyaNovaQBI/AyaNovaQBI.csproj | 5 + AyaNovaQBI/InvoiceTemplateBuilder.Designer.cs | 4 +- AyaNovaQBI/WorkOrderItem.cs | 8 +- AyaNovaQBI/WorkOrderItemPartRequest.cs | 47 ++++++++ AyaNovaQBI/WorkOrderItemScheduledUser.cs | 27 +++++ AyaNovaQBI/WorkOrderItemTask.cs | 34 ++++++ AyaNovaQBI/WorkOrderItemTaskCompletionType.cs | 27 +++++ AyaNovaQBI/WorkOrderItemUnit.cs | 32 +++++ AyaNovaQBI/util.cs | 112 +++++++++--------- 9 files changed, 233 insertions(+), 63 deletions(-) create mode 100644 AyaNovaQBI/WorkOrderItemPartRequest.cs create mode 100644 AyaNovaQBI/WorkOrderItemScheduledUser.cs create mode 100644 AyaNovaQBI/WorkOrderItemTask.cs create mode 100644 AyaNovaQBI/WorkOrderItemTaskCompletionType.cs create mode 100644 AyaNovaQBI/WorkOrderItemUnit.cs diff --git a/AyaNovaQBI/AyaNovaQBI.csproj b/AyaNovaQBI/AyaNovaQBI.csproj index 056c16d..1ba06c8 100644 --- a/AyaNovaQBI/AyaNovaQBI.csproj +++ b/AyaNovaQBI/AyaNovaQBI.csproj @@ -250,7 +250,12 @@ + + + + + Form diff --git a/AyaNovaQBI/InvoiceTemplateBuilder.Designer.cs b/AyaNovaQBI/InvoiceTemplateBuilder.Designer.cs index aa395ee..81d4766 100644 --- a/AyaNovaQBI/InvoiceTemplateBuilder.Designer.cs +++ b/AyaNovaQBI/InvoiceTemplateBuilder.Designer.cs @@ -561,8 +561,8 @@ // this.workOrderItemTypeToolStripMenuItem.Name = "workOrderItemTypeToolStripMenuItem"; this.workOrderItemTypeToolStripMenuItem.Size = new System.Drawing.Size(231, 22); - this.workOrderItemTypeToolStripMenuItem.Tag = "~ITEM_TYPE~"; - this.workOrderItemTypeToolStripMenuItem.Text = "Work order item type"; + this.workOrderItemTypeToolStripMenuItem.Tag = "~ITEM_TAGS~"; + this.workOrderItemTypeToolStripMenuItem.Text = "Work order item TAGS"; // // workOrderItemRequestDateToolStripMenuItem // diff --git a/AyaNovaQBI/WorkOrderItem.cs b/AyaNovaQBI/WorkOrderItem.cs index e6e5d51..926e1d0 100644 --- a/AyaNovaQBI/WorkOrderItem.cs +++ b/AyaNovaQBI/WorkOrderItem.cs @@ -47,11 +47,11 @@ namespace AyaNovaQBI public List Labors { get; set; } = new List(); public List Loans { get; set; } = new List(); public List Parts { get; set; } = new List(); - // public List PartRequests { get; set; } = new List(); - // public List ScheduledUsers { get; set; } = new List(); - // public List Tasks { get; set; } = new List(); + public List PartRequests { get; set; } = new List(); + public List ScheduledUsers { get; set; } = new List(); + public List Tasks { get; set; } = new List(); public List Travels { get; set; } = new List(); - // public List Units { get; set; } = new List(); + public List Units { get; set; } = new List(); public List OutsideServices { get; set; } = new List(); } } diff --git a/AyaNovaQBI/WorkOrderItemPartRequest.cs b/AyaNovaQBI/WorkOrderItemPartRequest.cs new file mode 100644 index 0000000..c6c2d39 --- /dev/null +++ b/AyaNovaQBI/WorkOrderItemPartRequest.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AyaNovaQBI +{ + public class WorkOrderItemPartRequest + { + public long Id { get; set; } + public uint Concurrency { get; set; } + + public long WorkOrderItemId { get; set; } + + public long PartId { get; set; } + + public long PartWarehouseId { get; set; } + + public decimal Quantity { get; set; } + public long? PurchaseOrderItemId { get; set; } + public long? RequestedByUserId { get; set; } + + public decimal Received { get; set; } + + public DateTime RequestDate { get; set; } = DateTime.UtcNow; + + public string PartNameViz { get; set; } + + public string PartDescriptionViz { get; set; } + + public string UpcViz { get; set; } + + public string RequestedByUserViz { get; set; } + + public string PurchaseOrderViz { get; set; } + + public long? PurchaseOrderIdViz { get; set; } + + public DateTime? PurchaseOrderDateViz { get; set; } + + public DateTime? PurchaseOrderExpectedDateViz { get; set; } + + public string PartWarehouseViz { get; set; } + + } +} diff --git a/AyaNovaQBI/WorkOrderItemScheduledUser.cs b/AyaNovaQBI/WorkOrderItemScheduledUser.cs new file mode 100644 index 0000000..32d8f5f --- /dev/null +++ b/AyaNovaQBI/WorkOrderItemScheduledUser.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AyaNovaQBI +{ + public class WorkOrderItemScheduledUser + { + public long Id { get; set; } + public uint Concurrency { get; set; } + public long? UserId { get; set; } + + public string UserViz { get; set; } + + public decimal EstimatedQuantity { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? StopDate { get; set; } + public long? ServiceRateId { get; set; } + + public string ServiceRateViz { get; set; } + + public long WorkOrderItemId { get; set; } + + }//eoc +} diff --git a/AyaNovaQBI/WorkOrderItemTask.cs b/AyaNovaQBI/WorkOrderItemTask.cs new file mode 100644 index 0000000..7e6e963 --- /dev/null +++ b/AyaNovaQBI/WorkOrderItemTask.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AyaNovaQBI +{ + public class WorkOrderItemTask + { + + public long Id { get; set; } + public uint Concurrency { get; set; } + + public int Sequence { get; set; } + + + public string Task { get; set; } + + public WorkOrderItemTaskCompletionType Status { get; set; } = WorkOrderItemTaskCompletionType.Incomplete; + + public string StatusViz { get; set; } + public long? CompletedByUserId { get; set; } + + public string CompletedByUserViz { get; set; } + public DateTime? CompletedDate { get; set; } + + + + + public long WorkOrderItemId { get; set; } + + }//eoc +} diff --git a/AyaNovaQBI/WorkOrderItemTaskCompletionType.cs b/AyaNovaQBI/WorkOrderItemTaskCompletionType.cs new file mode 100644 index 0000000..aae4724 --- /dev/null +++ b/AyaNovaQBI/WorkOrderItemTaskCompletionType.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AyaNovaQBI +{/// + /// Indicates status of task + /// + public enum WorkOrderItemTaskCompletionType : int + { + /// + /// Not finished + /// + Incomplete = 1, + /// + /// Finished + /// + Complete = 2, + /// + /// Not relevant + /// + NotApplicable = 3, + Failed = 4 + } +} diff --git a/AyaNovaQBI/WorkOrderItemUnit.cs b/AyaNovaQBI/WorkOrderItemUnit.cs new file mode 100644 index 0000000..a20a7ad --- /dev/null +++ b/AyaNovaQBI/WorkOrderItemUnit.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace AyaNovaQBI +{ + public class WorkOrderItemUnit + { + + public long Id { get; set; } + public uint Concurrency { get; set; } + public string Notes { get; set; } + public string Wiki { get; set; } + public string CustomFields { get; set; } + public List Tags { get; set; } = new List(); + + public long UnitId { get; set; } + public string UnitViz { get; set; } + public long WorkOrderItemId { get; set; } + public string UnitModelNameViz { get; set; } + public string UnitModelVendorViz { get; set; } + public string UnitDescriptionViz { get; set; } + public bool UnitMeteredViz { get; set; } + + //PHYSICAL ADDRESS + public string AddressViz { get; set; } + public string CityViz { get; set; } + public string RegionViz { get; set; } + public string CountryViz { get; set; } + public decimal? LatitudeViz { get; set; } + public decimal? LongitudeViz { get; set; } + + }//eoc +} diff --git a/AyaNovaQBI/util.cs b/AyaNovaQBI/util.cs index e88b2d6..da848d4 100644 --- a/AyaNovaQBI/util.cs +++ b/AyaNovaQBI/util.cs @@ -6118,6 +6118,8 @@ namespace AyaNovaQBI throw new Exception($"util.Invoice: WorkOrder with record id {SelectedWorkOrderId} was not found in AyaNova and may have just been deleted.\r\nUnable to invoice this wo."); + var OrderedWorkOrderItems = w.Items.OrderBy(z => z.Sequence).ToList(); + if (bFirstLoop) { bFirstLoop = false; @@ -6214,7 +6216,7 @@ namespace AyaNovaQBI #endregion header text #region Part charges - foreach (var it in w.Items) + foreach (var it in OrderedWorkOrderItems) { foreach (var p in it.Parts) { @@ -6229,7 +6231,7 @@ namespace AyaNovaQBI #endregion part charges #region Service charges - foreach (var it in w.Items) + foreach (var it in OrderedWorkOrderItems) { foreach (var l in it.Labors) { @@ -6250,7 +6252,7 @@ namespace AyaNovaQBI #endregion Service charges #region Travel charges - foreach (var it in w.Items) + foreach (var it in OrderedWorkOrderItems) { foreach (var l in it.Travels) { @@ -6263,7 +6265,7 @@ namespace AyaNovaQBI #endregion Travel charges #region MiscExpense charges - foreach (var it in w.Items) + foreach (var it in OrderedWorkOrderItems) { foreach (var l in it.Expenses) { @@ -6277,7 +6279,7 @@ namespace AyaNovaQBI #endregion MiscExpense charges #region Loaner charges - foreach (var it in w.Items) + foreach (var it in OrderedWorkOrderItems) { foreach (var l in it.Loans) { @@ -6288,7 +6290,7 @@ namespace AyaNovaQBI #endregion Loaner charges #region OutsideService charges - foreach (var it in w.Items) + foreach (var it in OrderedWorkOrderItems) { foreach (var os in it.OutsideServices) { @@ -6304,7 +6306,7 @@ namespace AyaNovaQBI //inserting descriptive text as required if (QDat.HasAnyInvoiceFooterTemplateFields) { - foreach (var it in w.Items) + foreach (var it in OrderedWorkOrderItems) { #region Item (footer) fields if (!string.IsNullOrWhiteSpace(QDat.InvoiceFooterTemplate)) @@ -6313,7 +6315,7 @@ namespace AyaNovaQBI if (s.IndexOf("~ITEM_SUMMARY~") != -1) { - s = s.Replace("~ITEM_SUMMARY~", it.Summary); + s = s.Replace("~ITEM_SUMMARY~", it.Notes); } if (s.IndexOf("~ITEM_SERVICE_NOTES~") != -1) @@ -6321,12 +6323,9 @@ namespace AyaNovaQBI s = s.Replace("~ITEM_SERVICE_NOTES~", it.TechNotes); } - if (s.IndexOf("~ITEM_TYPE~") != -1) + if (s.IndexOf("~ITEM_TAGS~") != -1) { - if (it.TypeID == Guid.Empty) - s = s.Replace("~ITEM_TYPE~", ""); - else - s = s.Replace("~ITEM_TYPE~", NameFetcher.GetItem("aWorkorderItemType", "aName", it.TypeID).RecordName); + s = s.Replace("~ITEM_TAGS~", String.Join(",", it.Tags)); } if (s.IndexOf("~ITEM_REQUEST_DATE~") != -1) @@ -6336,10 +6335,7 @@ namespace AyaNovaQBI if (s.IndexOf("~ITEM_STATUS~") != -1) { - if (it.WorkorderStatusID == Guid.Empty) - s = s.Replace("~ITEM_STATUS~", ""); - else - s = s.Replace("~ITEM_STATUS~", NameFetcher.GetItem("aWorkorderStatus", "aName", it.WorkorderStatusID).RecordName); + s = s.Replace("~ITEM_STATUS~", it.WorkOrderItemStatusNameViz); } InvoiceAddText(i, s); @@ -6349,48 +6345,50 @@ namespace AyaNovaQBI #region Unit fields if (!string.IsNullOrWhiteSpace(QDat.InvoiceUnitTemplate)) { - TODO: LOOPIFY THIS BLOCK TO NEW STANDARD - - string s = QDat.InvoiceUnitTemplate; - - UnitPickList up = UnitPickList.GetListOfOneSpecificUnit(it.UnitID); - - - if (s.IndexOf("~AYAFORMAT~") != -1) + foreach (var u in it.units) { - s = s.Replace("~AYAFORMAT~", up[0].UnitName()); + + string s = QDat.InvoiceUnitTemplate; + + UnitPickList up = UnitPickList.GetListOfOneSpecificUnit(it.UnitID); + + + if (s.IndexOf("~AYAFORMAT~") != -1) + { + s = s.Replace("~AYAFORMAT~", up[0].UnitName()); + } + + + if (s.IndexOf("~UNIT_SN~") != -1) + { + s = s.Replace("~UNIT_SN~", up[0].Serial); + } + + if (s.IndexOf("~UNIT_METER~") != -1) + { + if (!up[0].Metered) + s = s.Replace("~UNIT_METER~", ""); + else + s = s.Replace("~UNIT_METER~", Unit.LastMeterReading(up[0].ID).ToString()); + } + + if (s.IndexOf("~UNIT_MAKE~") != -1) + { + s = s.Replace("~UNIT_MAKE~", up[0].VendorName); + } + + if (s.IndexOf("~UNIT_MODEL_NAME~") != -1) + { + s = s.Replace("~UNIT_MODEL_NAME~", up[0].ModelName); + } + + if (s.IndexOf("~UNIT_MODEL_NUMBER~") != -1) + { + s = s.Replace("~UNIT_MODEL_NUMBER~", up[0].ModelNumber); + } + + InvoiceAddText(i, s); } - - - if (s.IndexOf("~UNIT_SN~") != -1) - { - s = s.Replace("~UNIT_SN~", up[0].Serial); - } - - if (s.IndexOf("~UNIT_METER~") != -1) - { - if (!up[0].Metered) - s = s.Replace("~UNIT_METER~", ""); - else - s = s.Replace("~UNIT_METER~", Unit.LastMeterReading(up[0].ID).ToString()); - } - - if (s.IndexOf("~UNIT_MAKE~") != -1) - { - s = s.Replace("~UNIT_MAKE~", up[0].VendorName); - } - - if (s.IndexOf("~UNIT_MODEL_NAME~") != -1) - { - s = s.Replace("~UNIT_MODEL_NAME~", up[0].ModelName); - } - - if (s.IndexOf("~UNIT_MODEL_NUMBER~") != -1) - { - s = s.Replace("~UNIT_MODEL_NUMBER~", up[0].ModelNumber); - } - - InvoiceAddText(i, s); } #endregion unit