コード例 #1
0
 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));
     }
 }
コード例 #2
0
        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));
        }