private async Task <bool> IsRepeated(string BarrackId, PreOrderInput input) { var OFAtt = await Queries.GetOFAttributes(input.OrderFolderId); var rs = OFAtt.FirstOrDefault(); var idPE = rs["IdPhenologicalEvent"]; var idAT = rs["IdApplicationTarget"]; var idSP = rs["IdSpecie"]; // obtiene los order folder que coinciden con los filtros var similarOF = await Queries.GetSimilarOF(idPE, idAT, idSP); foreach (var item in similarOF) { var aB = await Queries.GetBarracksFromOrderFolderId(item); var manyBarracks = aB.SelectMany(s => s).ToList(); var isRepeated = manyBarracks.Contains(BarrackId); if (isRepeated) { throw new CustomException("El barrack ya existe en la order folder"); } } return(false); }
public async override Task Validate(PreOrderInput input) { await base.Validate(input); if (!input.BarrackIds.Any()) { throw new CustomException("No se puede ingresar una pre orden sin un barrack asociado"); } bool isUnique = input.BarrackIds.Distinct().Count() == input.BarrackIds.Count(); if (!isUnique) { throw new CustomException("No se pueden ingresar barracks duplicados"); } var OFBarracks = await Queries.GetOFBarracks(input.Id); var OFBarracksGroup = OFBarracks.SelectMany(s => s).ToList(); // identificador de la especie de un order folder. var OFSpecie = await Queries.GetOFSpecie(input.OrderFolderId); List <string> newBarracks = new List <string>(); foreach (var item in input.BarrackIds) { if (!OFBarracksGroup.Contains(item)) { newBarracks.Add(item); } } // recorre los ids de los barracks de un input. foreach (var item in newBarracks) { var variety = await Queries.GetBarrackVarietyFromBarrackId(item); var specie = await Queries.GetSpecieFromVarietyId(variety); if (specie != OFSpecie) { throw new CustomException($"La especie del barrack de id {item} no es la misma que la especie de la order folder a la que quiere ser ingresado"); } await IsRepeated(item, input); } if (!Enum.IsDefined(typeof(PreOrderType), input.PreOrderType)) { throw new ArgumentOutOfRangeException("input", "Enum fuera de rango"); } }
public override async Task <ExtPostContainer <string> > SaveInput(PreOrderInput input) { /// Valida cada pre orden await Validate(input); var id = !string.IsNullOrWhiteSpace(input.Id) ? input.Id : Guid.NewGuid().ToString("N"); var preOrder = new PreOrder { Id = id, Name = input.Name, OrderFolderId = input.OrderFolderId, PreOrderType = input.PreOrderType, BarrackIds = input.BarrackIds }; await SaveDb(preOrder); var result = await SaveSearch(preOrder); return(result); }