示例#1
0
        public async Task <IActionResult> RejectProposal([FromRoute] Guid organizationId, [FromRoute] Guid proposalId,
                                                         [FromBody] ProposalRejectionInput model)
        {
            var p = await _proposalService
                    .Reject(_customer, proposalId, model);

            return(Ok(p));
        }
        public async Task <ProposalResult> Reject(Guid proposalId, ProposalRejectionInput input)
        {
            _logger.LogTrace(GetLogMessage($@"Rejecting Proposal: {proposalId}"));

            var proposal = await Repository.Queryable()
                           .FindById(proposalId)
                           .FirstOrDefaultAsync();

            return(await RejectProposal(proposal, input));
        }
        private async Task <ProposalResult> RejectProposal(FixedPriceProposal proposal, ProposalRejectionInput input)
        {
            if (proposal == null)
            {
                throw new ApplicationException("No proposal found with this id for this organization");
            }

            var retVal = new ProposalResult()
            {
                ProposalId = proposal.Id
            };

            proposal.Status      = ProposalStatus.Rejected;
            proposal.UpdatedById = _userInfo.UserId;
            proposal.Updated     = DateTimeOffset.UtcNow;

            proposal.StatusTransitions.Add(new ProposalStatusTransition()
            {
                Status      = ProposalStatus.Rejected,
                ObjectState = ObjectState.Added
            });

            proposal.InjectFrom(input);

            var result = Update(proposal);

            if (result.Succeeded)
            {
                retVal.Succeeded = true;
                await Task.Run(() =>
                {
                    RaiseEvent(new ProposalRejectedEvent
                    {
                        ProposalId = result.ProposalId
                    });
                });
            }

            return(retVal);
        }