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