diff --git a/server/AyaNova/Controllers/SearchController.cs b/server/AyaNova/Controllers/SearchController.cs index f5787f51..77a7a4a3 100644 --- a/server/AyaNova/Controllers/SearchController.cs +++ b/server/AyaNova/Controllers/SearchController.cs @@ -139,6 +139,8 @@ namespace AyaNova.Api.Controllers case AyaType.WorkOrderItemScheduledUser: case AyaType.WorkOrderItemTask: case AyaType.WorkOrderItemTravel: + case AyaType.WorkOrderItemOutsideService: + case AyaType.WorkOrderItemUnit: AyaTypeId TypeId = await WorkOrderBiz.GetAncestor(ayaType, id, ct); return Ok(ApiOkResponse.Response(new { AyaType = TypeId.ATypeAsInt, Id = TypeId.ObjectId })); default: diff --git a/server/AyaNova/biz/AyaType.cs b/server/AyaNova/biz/AyaType.cs index c3f625a0..0d3f1740 100644 --- a/server/AyaNova/biz/AyaType.cs +++ b/server/AyaNova/biz/AyaType.cs @@ -138,7 +138,8 @@ namespace AyaNova.Biz PartInventoryRestock = 69,//for list only, synthetic object PartInventoryRequest = 70,//for list only not, synthetic object WorkOrderStatus = 71, - TaskGroup = 72 + TaskGroup = 72, + WorkOrderItemOutsideService = 73 diff --git a/server/AyaNova/biz/BizObjectExistsInDatabase.cs b/server/AyaNova/biz/BizObjectExistsInDatabase.cs index c56ba33d..e743b8cf 100644 --- a/server/AyaNova/biz/BizObjectExistsInDatabase.cs +++ b/server/AyaNova/biz/BizObjectExistsInDatabase.cs @@ -101,6 +101,8 @@ namespace AyaNova.Biz return await ct.WorkOrderItemTravel.AnyAsync(z => z.Id == id); case AyaType.WorkOrderItemUnit: return await ct.WorkOrderItemUnit.AnyAsync(z => z.Id == id); + case AyaType.WorkOrderItemOutsideService: + return await ct.WorkOrderItemOutsideService.AnyAsync(z => z.Id == id); //--- case AyaType.WorkOrderTemplate: return await ct.WorkOrderTemplate.AnyAsync(z => z.Id == id); diff --git a/server/AyaNova/biz/BizObjectFactory.cs b/server/AyaNova/biz/BizObjectFactory.cs index aab3a497..fd747e25 100644 --- a/server/AyaNova/biz/BizObjectFactory.cs +++ b/server/AyaNova/biz/BizObjectFactory.cs @@ -91,6 +91,7 @@ namespace AyaNova.Biz case AyaType.WorkOrderItemTask: case AyaType.WorkOrderItemTravel: case AyaType.WorkOrderItemUnit: + case AyaType.WorkOrderItemOutsideService: return new WorkOrderBiz(ct, userId, translationId, roles); //--- case AyaType.WorkOrderTemplate: diff --git a/server/AyaNova/biz/BizRoles.cs b/server/AyaNova/biz/BizRoles.cs index f949b94c..6390caa6 100644 --- a/server/AyaNova/biz/BizRoles.cs +++ b/server/AyaNova/biz/BizRoles.cs @@ -550,6 +550,14 @@ namespace AyaNova.Biz AuthorizationRoles.SalesLimited | AuthorizationRoles.SubContractorLimited | AuthorizationRoles.TechLimited, Select = AuthorizationRoles.All }); + + roles.Add(AyaType.WorkOrderItemOutsideService, new BizRoleSet() + { + Change = AuthorizationRoles.BizAdminFull | AuthorizationRoles.DispatchFull | AuthorizationRoles.TechFull | AuthorizationRoles.SubContractorFull | AuthorizationRoles.AccountingFull, + ReadFullRecord = AuthorizationRoles.BizAdminLimited | AuthorizationRoles.DispatchLimited | AuthorizationRoles.SalesFull | + AuthorizationRoles.SalesLimited | AuthorizationRoles.SubContractorLimited | AuthorizationRoles.TechLimited, + Select = AuthorizationRoles.All + }); //--- diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index fdc674aa..7aa4829b 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -273,6 +273,12 @@ namespace AyaNova.Biz case AyaType.WorkOrderItemTravel: woitemid = await ct.WorkOrderItemTravel.Where(z => z.Id == id).Select(z => z.WorkOrderItemId).SingleOrDefaultAsync(); break; + case AyaType.WorkOrderItemOutsideService: + woitemid = await ct.WorkOrderItemOutsideService.Where(z => z.Id == id).Select(z => z.WorkOrderItemId).SingleOrDefaultAsync(); + break; + case AyaType.WorkOrderItemUnit: + woitemid = await ct.WorkOrderItemUnit.Where(z => z.Id == id).Select(z => z.WorkOrderItemId).SingleOrDefaultAsync(); + break; default: throw new System.NotSupportedException($"WorkOrderBiz::GetAncestor -> AyaType {ayaType.ToString()} is not supported"); } diff --git a/server/AyaNova/models/AyContext.cs b/server/AyaNova/models/AyContext.cs index 75a9b231..dc7cd293 100644 --- a/server/AyaNova/models/AyContext.cs +++ b/server/AyaNova/models/AyContext.cs @@ -86,6 +86,7 @@ namespace AyaNova.Models public virtual DbSet WorkOrderItemTask { get; set; } public virtual DbSet WorkOrderItemTravel { get; set; } public virtual DbSet WorkOrderItemUnit { get; set; } + public virtual DbSet WorkOrderItemOutsideService { get; set; } public virtual DbSet WorkOrderStatus { get; set; } //WorkOrderTemplate diff --git a/server/AyaNova/models/WorkOrderItemExpense.cs b/server/AyaNova/models/WorkOrderItemExpense.cs index 9444da60..f4927d0a 100644 --- a/server/AyaNova/models/WorkOrderItemExpense.cs +++ b/server/AyaNova/models/WorkOrderItemExpense.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Newtonsoft.Json; diff --git a/server/AyaNova/models/WorkOrderItemOutsideService.cs b/server/AyaNova/models/WorkOrderItemOutsideService.cs new file mode 100644 index 00000000..b9b9a552 --- /dev/null +++ b/server/AyaNova/models/WorkOrderItemOutsideService.cs @@ -0,0 +1,60 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Newtonsoft.Json; +using AyaNova.Biz; + + +namespace AyaNova.Models +{ + public class WorkOrderItemOutsideService : ICoreBizObjectModel + { + public long Id { get; set; } + public uint Concurrency { get; set; } + public string Notes { get; set; } + + public long? UnitId { get; set; } + public long? VendorSentToId { get; set; } + public long? VendorSentViaId { get; set; } + public string RMANumber { get; set; } + public string TrackingNumber { get; set; } + public decimal RepairCost { get; set; } + public decimal ShippingCost { get; set; } + public decimal ShippingPrice { get; set; } + public DateTime? SentDate { get; set; } + public DateTime? ETADate { get; set; } + public DateTime? ReturnDate { get; set; } + + + [Required] + public long WorkOrderItemId { get; set; } + [JsonIgnore] + public WorkOrderItem WorkOrderItem { get; set; } + + [NotMapped, JsonIgnore] + public AyaType AyaType { get => AyaType.WorkOrderItemOutsideService; } + + }//eoc +}//eons +/* +CREATE TABLE [dbo].[AWORKORDERITEMOUTSIDESERVICE]( + [AID] [uniqueidentifier] NOT NULL, + [AWORKORDERITEMID] [uniqueidentifier] NOT NULL, + [ACREATOR] [uniqueidentifier] NOT NULL, + [AMODIFIER] [uniqueidentifier] NOT NULL, + [ACREATED] [datetime] NOT NULL, + [AMODIFIED] [datetime] NOT NULL, + [ANOTES] [ntext] NULL, + [AVENDORSENTTOID] [uniqueidentifier] NULL, + [AVENDORSENTVIAID] [uniqueidentifier] NULL, + [ARMANUMBER] [nvarchar](255) NULL, + [ATRACKINGNUMBER] [nvarchar](255) NULL, + [AREPAIRCOST] [decimal](19, 5) NULL, + [AREPAIRPRICE] [decimal](19, 5) NULL, + [ASHIPPINGCOST] [decimal](19, 5) NULL, + [ASHIPPINGPRICE] [decimal](19, 5) NULL, + [ADATESENT] [datetime] NULL, + [ASENDERUSERID] [uniqueidentifier] NULL, + [ADATEETA] [datetime] NULL, + [ADATERETURNED] [datetime] NUL +*/ \ No newline at end of file diff --git a/server/AyaNova/models/WorkOrderItemUnit.cs b/server/AyaNova/models/WorkOrderItemUnit.cs index b7610ea3..27d3c762 100644 --- a/server/AyaNova/models/WorkOrderItemUnit.cs +++ b/server/AyaNova/models/WorkOrderItemUnit.cs @@ -8,12 +8,18 @@ namespace AyaNova.Models { public class WorkOrderItemUnit : ICoreBizObjectModel { - + public long Id { get; set; } public uint Concurrency { get; set; } public string Notes { get; set; } -//after much to and fro just code this as planned but definitely consider custom fields adn tags for this and possibly all other grandchildren as well? - + public string Wiki { get; set; } + public string CustomFields { get; set; } + public List Tags { get; set; } = new List(); + + + [Required] + public long UnitId { get; set; } + [Required] public long WorkOrderItemId { get; set; } [JsonIgnore] @@ -41,7 +47,7 @@ CREATE TABLE [dbo].[AWORKORDERITEM]( [ASUMMARY] [nvarchar](255) NULL, [ATYPEID] [uniqueidentifier] NULL, [AUNITID] [uniqueidentifier] NULL,//<--------UNIT - [AWORKORDERITEMUNITSERVICETYPEID] [uniqueidentifier] NULL,//<--------UNIT + [AWORKORDERITEMUNITSERVICETYPEID] [uniqueidentifier] NULL,//<--------UNIT//NOW TAGS HMMM [AWARRANTYSERVICE] [bit] NOT NULL, [ACUSTOM1] [ntext] NULL, [ACUSTOM2] [ntext] NULL, diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 9e9b4949..e42dde4c 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -827,10 +827,17 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); + "manualdiscountpct DECIMAL(8,5) NOT NULL default 0 " + ")"); - - + //WORKORDERITEM UNIT await ExecQueryAsync("CREATE TABLE aworkorderitemunit (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, workorderitemid BIGINT NOT NULL REFERENCES aworkorderitem (id), " - + "notes TEXT, customfields TEXT, tags VARCHAR(255) ARRAY)"); + + "notes TEXT, customfields TEXT, tags VARCHAR(255) ARRAY, unitid BIGINT NOT NULL REFERENCES aunit" + + ")"); + + //WORKORDERITEM OUTSIDE SERVICE + await ExecQueryAsync("CREATE TABLE aworkorderitemoutsideservice (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, workorderitemid BIGINT NOT NULL REFERENCES aworkorderitem (id), " + + "unitid BIGINT REFERENCES aunit, vendorsenttoid BIGINT REFERENCES avendor, vendorsentviaid BIGINT REFERENCES avendor, rmanumber text, trackingnumber text, " + + "repaircost DECIMAL(38,18) NOT NULL default 0, shippingcost DECIMAL(38,18) NOT NULL default 0, shippingprice DECIMAL(38,18) NOT NULL default 0, " + + "SentDate TIMESTAMP, etadate TIMESTAMP, returndate TIMESTAMP" + + ")"); //POITEM LINK await ExecQueryAsync("ALTER TABLE apurchaseorderitem ADD column workorderitempartrequestid BIGINT REFERENCES aworkorderitempartrequest");