Skip to content

Commit

Permalink
PartTemplate work (#293)
Browse files Browse the repository at this point in the history
* Add new Part Template Repo/response processor. Allow to search by ID back end work.

* partstemplate fixes/formatting

* add put/post integration tests

* typo in string

* parttemplate facadeservice tests

* parttemplate test updates

* additional minor change for PartTemplate test

Co-authored-by: rosss <rosss@PC1329>
  • Loading branch information
RossStewart and rosss authored Nov 19, 2021
1 parent d4c77b9 commit 184491d
Show file tree
Hide file tree
Showing 24 changed files with 659 additions and 7 deletions.
6 changes: 6 additions & 0 deletions src/Domain.LinnApps/Parts/PartTemplate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ public class PartTemplate

public int? NextNumber { get; set; }

public string AllowVariants { get; set; }

public string Variants { get; set; }

public string AccountingCompany { get; set; }

public string ProductCode { get; set; }
Expand All @@ -22,6 +26,8 @@ public class PartTemplate

public string BomType { get; set; }

public string RmFg { get; set; }

public string AssemblyTechnology { get; set; }

public string AllowPartCreation { get; set; }
Expand Down
12 changes: 11 additions & 1 deletion src/Facade/ResourceBuilders/PartTemplateResourceBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
namespace Linn.Stores.Facade.ResourceBuilders
{
using System.Collections.Generic;
using Linn.Common.Facade;
using Linn.Common.Resources;
using Linn.Stores.Domain.LinnApps.Parts;
using Linn.Stores.Resources.Parts;

Expand All @@ -15,10 +17,13 @@ public PartTemplateResource Build(PartTemplate model)
HasDataSheet = model.HasDataSheet,
HasNumberSequence = model.HasNumberSequence,
NextNumber = model.NextNumber,
AllowVariants = model.AllowVariants,
Variants = model.Variants,
AccountingCompany = model.AccountingCompany,
ProductCode = model.ProductCode,
StockControlled = model.StockControlled,
LinnProduced = model.LinnProduced,
RmFg = model.RmFg,
BomType = model.BomType,
AssemblyTechnology = model.AssemblyTechnology,
AllowPartCreation = model.AllowPartCreation,
Expand All @@ -30,7 +35,12 @@ public PartTemplateResource Build(PartTemplate model)

public string GetLocation(PartTemplate model)
{
throw new System.NotImplementedException();
return $"/inventory/part-templates/{model.PartRoot}";
}

private IEnumerable<LinkResource> BuildLinks(PartTemplate model)
{
yield return new LinkResource { Rel = "self", Href = this.GetLocation(model) };
}
}
}
39 changes: 37 additions & 2 deletions src/Facade/Services/PartTemplateService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,47 @@ public PartTemplateService(IRepository<PartTemplate, string> repository, ITransa

protected override PartTemplate CreateFromResource(PartTemplateResource resource)
{
throw new NotImplementedException();
var partTemplate = new PartTemplate
{
PartRoot = resource.PartRoot,
Description = resource.Description,
HasDataSheet = resource.HasDataSheet,
HasNumberSequence = resource.HasNumberSequence,
NextNumber = resource.NextNumber,
AllowVariants = resource.AllowVariants,
Variants = resource.Variants,
AccountingCompany = resource.AccountingCompany,
ProductCode = resource.ProductCode,
StockControlled = resource.StockControlled,
LinnProduced = resource.LinnProduced,
BomType = resource.BomType,
RmFg = resource.RmFg,
AssemblyTechnology = resource.AssemblyTechnology,
AllowPartCreation = resource.AllowPartCreation,
ParetoCode = resource.ParetoCode
};

return partTemplate;
}

protected override void UpdateFromResource(PartTemplate entity, PartTemplateResource updateResource)
{
throw new NotImplementedException();
entity.PartRoot = updateResource.PartRoot;
entity.Description = updateResource.Description;
entity.HasDataSheet = updateResource.HasDataSheet;
entity.HasNumberSequence = updateResource.HasNumberSequence;
entity.NextNumber = updateResource.NextNumber;
entity.AllowVariants = updateResource.AllowVariants;
entity.Variants = updateResource.Variants;
entity.AccountingCompany = updateResource.AccountingCompany;
entity.ProductCode = updateResource.ProductCode;
entity.StockControlled = updateResource.StockControlled;
entity.LinnProduced = updateResource.LinnProduced;
entity.BomType = updateResource.BomType;
entity.RmFg = updateResource.RmFg;
entity.AssemblyTechnology = updateResource.AssemblyTechnology;
entity.AllowPartCreation = updateResource.AllowPartCreation;
entity.ParetoCode = updateResource.ParetoCode;
}

protected override Expression<Func<PartTemplate, bool>> SearchExpression(string searchTerm)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ public PartTemplate FindById(string key)
{
return this.serviceDbContext
.PartTemplates
.AsNoTracking()
.Where(p => p.PartRoot == key)
.ToList()
.FirstOrDefault();
Expand All @@ -35,7 +34,7 @@ public IQueryable<PartTemplate> FindAll()

public void Add(PartTemplate entity)
{
throw new NotImplementedException();
this.serviceDbContext.PartTemplates.Add(entity);
}

public void Remove(PartTemplate entity)
Expand Down
3 changes: 3 additions & 0 deletions src/Persistence.LinnApps/ServiceDbContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -686,11 +686,14 @@ private void BuildPartTemplates(ModelBuilder builder)
e.Property(p => p.StockControlled).HasColumnName("STOCK_CONTROLLED").HasMaxLength(1);
e.Property(p => p.LinnProduced).HasColumnName("LINN_PRODUCED").HasMaxLength(1);
e.Property(p => p.BomType).HasColumnName("BOM_TYPE").HasMaxLength(1);
e.Property(p => p.RmFg).HasColumnName("RM_FG").HasMaxLength(1);
e.Property(p => p.ParetoCode).HasColumnName("PARETO_CODE").HasMaxLength(2);
e.Property(p => p.AssemblyTechnology).HasColumnName("ASSEMBLY_TECHNOLOGY");
e.Property(p => p.HasDataSheet).HasColumnName("HAS_DATASHEET").HasMaxLength(1);
e.Property(p => p.HasNumberSequence).HasColumnName("NUMBER_SEQUENCE").HasMaxLength(1);
e.Property(p => p.NextNumber).HasColumnName("NEXT_NUMBER");
e.Property(p => p.AllowVariants).HasColumnName("ALLOW_VARIANTS").HasMaxLength(1);
e.Property(p => p.Variants).HasColumnName("VARIANTS").HasMaxLength(255);
e.Property(p => p.ProductCode).HasColumnName("PRODUCT_CODE").HasMaxLength(10);
e.Property(p => p.AllowPartCreation).HasColumnName("ALLOW_PART_CREATION").HasMaxLength(1);
e.Property(p => p.AccountingCompany).HasColumnName("ACCOUNTING_COMPANY");
Expand Down
6 changes: 6 additions & 0 deletions src/Resources/Parts/PartTemplateResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ public class PartTemplateResource

public int? NextNumber { get; set; }

public string AllowVariants { get; set; }

public string Variants { get; set; }

public string AccountingCompany { get; set; }

public string ProductCode { get; set; }
Expand All @@ -22,6 +26,8 @@ public class PartTemplateResource

public string BomType { get; set; }

public string RmFg { get; set; }

public string AssemblyTechnology { get; set; }

public string AllowPartCreation { get; set; }
Expand Down
2 changes: 2 additions & 0 deletions src/Service.Host/client/src/actions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ export const rootProductsActionTypes = makeActionTypes(itemTypes.rootProducts.ac

export const partCategoriesActionTypes = makeActionTypes(itemTypes.partCategories.actionType);

export const partTemplateActionTypes = makeActionTypes(itemTypes.partTemplate.actionType);

export const partTemplatesActionTypes = makeActionTypes(itemTypes.partTemplates.actionType);

export const partLiveTestActionTypes = makeActionTypes(itemTypes.partLiveTest.actionType);
Expand Down
12 changes: 12 additions & 0 deletions src/Service.Host/client/src/actions/partTemplateActions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { UpdateApiActions } from '@linn-it/linn-form-components-library';
import { partTemplateActionTypes as actionTypes } from './index';
import * as itemTypes from '../itemTypes';
import config from '../config';

export default new UpdateApiActions(
itemTypes.partTemplate.item,
itemTypes.partTemplate.actionType,
itemTypes.partTemplate.uri,
actionTypes,
config.appRoot
);
4 changes: 3 additions & 1 deletion src/Service.Host/client/src/containers/parts/Part.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ import partCategoriesSelectors from '../../selectors/partCategoriesSelectors';
import sernosSequencesSelectors from '../../selectors/sernosSequencesSelectors';
import suppliersSelectors from '../../selectors/suppliersSelectors';
import unitsOfMeasureSelectors from '../../selectors/unitsOfMeasureSelectors';
import partTemplateActions from '../../actions/partTemplateActions';
import partTemplatesActions from '../../actions/partTemplatesActions';
import partTemplateSelectors from '../../selectors/partTemplatesSelectors';
import partTemplatesSelectors from '../../selectors/partTemplatesSelectors';
import { getPrivileges, getUserName, getUserNumber } from '../../selectors/userSelectors';
import * as itemTypes from '../../itemTypes';
import partLiveTestSelectors from '../../selectors/partLiveTestSelectors';
Expand Down Expand Up @@ -49,7 +51,7 @@ const mapStateToProps = (state, { match, location }) => ({
userName: getUserName(state),
userNumber: getUserNumber(state),
templateName: queryString.parse(location?.search)?.template,
partTemplates: partTemplateSelectors.getItems(state),
partTemplates: partTemplatesSelectors.getItems(state),
liveTest: creating(match) ? null : partLiveTestSelectors.getItem(state),
partsSearchResults: partsSelectors.getSearchItems(state),
previousPaths: getPreviousPaths(state)
Expand Down
4 changes: 3 additions & 1 deletion src/Service.Host/client/src/containers/parts/Parts.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ import partsSelectors from '../../selectors/partsSelectors';
import { getPrivileges } from '../../selectors/userSelectors';
import partTemplatesActions from '../../actions/partTemplatesActions';
import partTemplatesSelectors from '../../selectors/partTemplatesSelectors';
import partTemplateSelectors from '../../selectors/partTemplateSelectors';

const mapStateToProps = (state, { match }) => ({
linkToSources: match?.url?.endsWith('/sources'),
items: partsSelectors.getSearchItems(state),
loading: partsSelectors.getSearchLoading(state),
privileges: getPrivileges(state),
partTemplates: partTemplatesSelectors.getItems(state)
partTemplates: partTemplatesSelectors.getItems(state),
partTemplate: partTemplateSelectors.getItem(state)
});

const initialise = () => dispatch => {
Expand Down
6 changes: 6 additions & 0 deletions src/Service.Host/client/src/itemTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ export const partCategories = new ItemType(
'/inventory/part-categories'
);

export const partTemplate = new ItemType(
'partTemplate',
'PART_TEMPLATE',
'/inventory/part-templates'
);

export const partTemplates = new ItemType(
'partTemplates',
'PART_TEMPLATES',
Expand Down
2 changes: 2 additions & 0 deletions src/Service.Host/client/src/reducers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import accountingCompanies from './accountingCompanies';
import nominal from './nominal';
import parts from './parts/parts';
import part from './parts/part';
import partTemplate from './parts/partTemplate';
import partTemplates from './parts/partTemplates';
import partLiveTest from './parts/partLiveTest';
import partCategories from './partCategories';
Expand Down Expand Up @@ -203,6 +204,7 @@ const rootReducer = history =>
partLiveTest,
parts,
partStorageTypes,
partTemplate,
partTemplates,
pickItemsAllocation,
ports,
Expand Down
14 changes: 14 additions & 0 deletions src/Service.Host/client/src/reducers/parts/partTemplate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { collectionStoreFactory } from '@linn-it/linn-form-components-library';
import { partTemplateActionTypes as actionTypes } from '../../actions';
import * as itemTypes from '../../itemTypes';

const defaultState = {
loading: false,
items: []
};

export default collectionStoreFactory(
itemTypes.partTemplate.actionType,
actionTypes,
defaultState
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { ItemSelectors } from '@linn-it/linn-form-components-library';
import * as itemTypes from '../itemTypes';

export default new ItemSelectors(itemTypes.partTemplate.item);
26 changes: 26 additions & 0 deletions src/Service/Modules/PartsModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ public PartsModule(

this.partTemplateService = partTemplateService;
this.Get("/inventory/part-templates", _ => this.GetPartTemplates());
this.Get("/inventory/part-templates/{id}", parameters => this.GetPartTemplate(parameters.id));
this.Put("/inventory/part-templates/{id}", parameters => this.UpdatePartTemplate(parameters.id));
this.Post("/inventory/part-templates", parameters => this.AddPartTemplate());

this.productAnalysisCodeService = productAnalysisCodeService;
this.Get("inventory/product-analysis-codes", _ => this.GetProductAnalysisCodes());
Expand Down Expand Up @@ -226,6 +229,29 @@ private object GetPartCategories()
.WithMediaRangeModel("text/html", ApplicationSettings.Get);
}

private object AddPartTemplate()
{
this.RequiresAuthentication();
var resource = this.Bind<PartTemplateResource>();
var result = this.partTemplateService.Add(resource);
return this.Negotiate.WithStatusCode(HttpStatusCode.Created).WithModel(result);
}

private object GetPartTemplate(string id)
{
var result = this.partTemplateService.GetById(id);
return this.Negotiate.WithModel(result)
.WithMediaRangeModel("text/html", ApplicationSettings.Get);
}

private object UpdatePartTemplate(string id)
{
this.RequiresAuthentication();
var resource = this.Bind<PartTemplateResource>();
var result = this.partTemplateService.Update(id, resource);
return this.Negotiate.WithModel(result);
}

private object GetPartTemplates()
{
var result = this.partTemplateService.GetAll();
Expand Down
15 changes: 15 additions & 0 deletions src/Service/ResponseProcessors/PartTemplateResponseProcessor.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace Linn.Stores.Service.ResponseProcessors
{
using System.Collections.Generic;
using Linn.Common.Facade;
using Linn.Common.Nancy.Facade;
using Linn.Stores.Domain.LinnApps.Parts;

public class PartTemplateResponseProcessor : JsonResponseProcessor<PartTemplate>
{
public PartTemplateResponseProcessor(IResourceBuilder<PartTemplate> resourceBuilder)
: base(resourceBuilder, "linnapps-part-template", 1)
{
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ public void EstablishContext()
with.ResponseProcessor<AssemblyTechnologiesResponseProcessor>();
with.ResponseProcessor<DecrementRulesResponseProcessor>();
with.ResponseProcessor<ProductAnalysisCodesResponseProcessor>();
with.ResponseProcessor<PartTemplateResponseProcessor>();
with.ResponseProcessor<PartTemplatesResponseProcessor>();
with.ResponseProcessor<PartLiveTestResponseProcessor>();
with.ResponseProcessor<MechPartSourceResponseProcessor>();
Expand Down
Loading

0 comments on commit 184491d

Please sign in to comment.