This commit is contained in:
2021-01-13 00:42:47 +00:00
parent f3a619f16d
commit fb2fc7adf2
9 changed files with 121 additions and 1 deletions

View File

@@ -128,7 +128,10 @@ namespace AyaNova.Biz
[CoreBizObject]
TravelRate = 63,
[CoreBizObject]
TaxCode = 64
TaxCode = 64,
[CoreBizObject]
PartAssembly = 65

View File

@@ -48,6 +48,8 @@ namespace AyaNova.Biz
return await ct.Memo.AnyAsync(z => z.Id == id);
case AyaType.Part:
return await ct.Part.AnyAsync(z => z.Id == id);
case AyaType.PartAssembly:
return await ct.PartAssembly.AnyAsync(z => z.Id == id);
case AyaType.PM:
return await ct.PM.AnyAsync(z => z.Id == id);
case AyaType.PMItem:

View File

@@ -49,6 +49,8 @@ namespace AyaNova.Biz
return new LoanUnitBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Part:
return new PartBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.PartAssembly:
return new PartAssemblyBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.PM:
return new PMBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);

View File

@@ -145,6 +145,22 @@ namespace AyaNova.Biz
Select = AuthorizationRoles.All
});
////////////////////////////////////////////////////////////
//Part assembly
//
roles.Add(AyaType.PartAssembly, new BizRoleSet()
{
Change = AuthorizationRoles.InventoryFull
| AuthorizationRoles.BizAdminFull
| AuthorizationRoles.AccountingFull,
ReadFullRecord = AuthorizationRoles.DispatchFull
| AuthorizationRoles.InventoryLimited
| AuthorizationRoles.BizAdminLimited
| AuthorizationRoles.DispatchLimited,
Select = AuthorizationRoles.All
});
/////////////////////////////////////////////////////////////////
//PurchaseOrder
// this is also effectively part warehouse inventory control

View File

@@ -40,6 +40,8 @@ namespace AyaNova.Models
public virtual DbSet<Notification> Notification { get; set; }
public virtual DbSet<NotifyDeliveryLog> NotifyDeliveryLog { get; set; }
public virtual DbSet<Part> Part { get; set; }
public virtual DbSet<PartAssembly> PartAssembly { get; set; }
public virtual DbSet<PartAssemblyItem> PartAssemblyItem { get; set; }
public virtual DbSet<PM> PM { get; set; }
public virtual DbSet<PMItem> PMItem { get; set; }
public virtual DbSet<PMTemplate> PMTemplate { get; set; }

View File

@@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using AyaNova.Biz;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
namespace AyaNova.Models
{
//NOTE: Any non required field (nullable in DB) sb nullable here, i.e. decimal? not decimal,
//otherwise the server will call it an invalid record if the field isn't sent from client
public class PartAssembly : ICoreBizObjectModel
{
public long Id { get; set; }
public uint Concurrency { get; set; }
[Required]
public string Name { get; set; }
public bool Active { get; set; }
public string Notes { get; set; }
public string Wiki { get; set; }
public string CustomFields { get; set; }
public List<string> Tags { get; set; }
public PartAssembly()
{
Tags = new List<string>();
}
[NotMapped, JsonIgnore]
public AyaType AyaType { get => AyaType.PartAssembly; }
}//eoc
}//eons
// CREATE TABLE [dbo].[APARTASSEMBLY](
// [AID] [uniqueidentifier] NOT NULL,
// [ACREATED] [datetime] NULL,
// [AMODIFIED] [datetime] NULL,
// [AACTIVE] [bit] NOT NULL,
// [ACREATOR] [uniqueidentifier] NULL,
// [AMODIFIER] [uniqueidentifier] NULL,
// [ANAME] [nvarchar](255) NULL,
// [ADESCRIPTION] [nvarchar](255) NULL,

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using AyaNova.Biz;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
namespace AyaNova.Models
{
//NOTE: Any non required field (nullable in DB) sb nullable here, i.e. decimal? not decimal,
//otherwise the server will call it an invalid record if the field isn't sent from client
public class PartAssemblyItem
{
public long Id { get; set; }
public uint Concurrency { get; set; }
//Principle
[Required]
public long PartAssemblyId { get; set; }//fk
// public PartAssembly PartAssembly { get; set; } //FOR NOW COMMENTINGH OUT THESE CONVENIENCE REFERENCES UNCOMMENT IF NEED LATER COULD BE YAGNI
public long PartId { get; set; }//fk
//public Part Part { get; set; }
public PartAssemblyItem()
{
}
}//eoc
}//eons

View File

@@ -392,6 +392,7 @@ BEGIN
when 62 then aytable = 'aservicerate';
when 63 then aytable = 'atravelrate';
when 64 then aytable = 'ataxcode';
when 65 then aytable = 'apartassembly';
else
RETURN format('??PUBLIC.AYGETNAME-UNKNOWN_TYPE:%S',ayobjecttype);-- This should not happen unless dev forgot to update this
end case;
@@ -684,6 +685,18 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
await ExecQueryAsync("CREATE UNIQUE INDEX apart_name_id_idx ON apart (id, name);");
await ExecQueryAsync("CREATE INDEX apart_tags ON apart using GIN(tags)");
//PARTASSEMBLY
await ExecQueryAsync("CREATE TABLE apart (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name text not null unique, active bool not null, " +
"notes text, wiki text, customfields text, tags varchar(255) ARRAY )");
await ExecQueryAsync("CREATE UNIQUE INDEX apart_name_id_idx ON apart (id, name);");
await ExecQueryAsync("CREATE INDEX apart_tags ON apart using GIN(tags)");
//PARTASSEMBLYITEM
await ExecQueryAsync("CREATE TABLE apartassemblyitem (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, partassemblyid bigint not null REFERENCES apartassembly, " +
"key text not null, display text not null)");
//PROJECT
await ExecQueryAsync("CREATE TABLE aproject (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name text not null unique, active bool not null, " +
"notes text, wiki text, customfields text, tags varchar(255) ARRAY, " +