public IResult SetCustomerContractsStatus(ISetContractsStatusParameters parameters) { try { return(_salesServiceProvider.SetCustomerContractsStatus(parameters)); } catch (Exception ex) { ex = ex.GetBaseException(); _exceptionLogger.LogException(ex); return(new FailureResult <string>(null, ex.Message)); } }
public IResult SetCustomerContractsStatus(ISetContractsStatusParameters parameters) { if (parameters == null) { throw new ArgumentNullException("parameters"); } var contractKeys = new List <ContractKey>(); foreach (var key in parameters.ContractKeys.Distinct().Where(k => !string.IsNullOrWhiteSpace(k))) { var keyResult = KeyParserHelper.ParseResult <IContractKey>(key); if (!keyResult.Success) { return(keyResult); } contractKeys.Add(new ContractKey(keyResult.ResultingObject)); } if (contractKeys.Any()) { var predicate = contractKeys.Aggregate(PredicateBuilder.False <Contract>(), (c, n) => c.Or(n.FindByPredicate)).ExpandAll(); var contracts = _inventoryShipmentOrderUnitOfWork.ContractRepository.Filter(predicate).ToList(); var missingKey = contractKeys.FirstOrDefault(k => contracts.All(c => !k.FindByPredicate.Invoke(c))); if (missingKey != null) { return(new InvalidResult(string.Format(UserMessages.CustomerContractNotFound, missingKey))); } contracts.ForEach(c => c.ContractStatus = parameters.ContractStatus); _inventoryShipmentOrderUnitOfWork.Commit(); } return(SyncParameters.Using(new SuccessResult(), contractKeys)); }