Beispiel #1
0
        public async Task <IActionResult> Put([FromBody] MoveActivityViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                ValidateUser();

                await Facade.MoveActivity(viewModel);

                return(NoContent());
            }
            catch (DbUpdateConcurrencyException e)
            {
                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, Common.INTERNAL_ERROR_STATUS_CODE, e.Message)
                    .Fail();
                return(StatusCode(Common.INTERNAL_ERROR_STATUS_CODE, Result));
            }
            catch (Exception e)
            {
                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, Common.INTERNAL_ERROR_STATUS_CODE, e.Message)
                    .Fail();
                return(StatusCode(Common.INTERNAL_ERROR_STATUS_CODE, Result));
            }
        }
        public async Task <int> MoveActivity(MoveActivityViewModel viewModel)
        {
            int Count = 0;

            using (var transaction = this.DbContext.Database.BeginTransaction())
            {
                try
                {
                    switch (viewModel.Type)
                    {
                    case "Order":
                        StageLogic.UpdateDealsOrder(viewModel.SourceStageId, viewModel.SourceDealsOrder);
                        Count = await DbContext.SaveChangesAsync();

                        break;

                    case "Move":
                        StageLogic.UpdateDealsOrder(viewModel.SourceStageId, viewModel.SourceDealsOrder);
                        StageLogic.UpdateDealsOrder(viewModel.TargetStageId, viewModel.TargetDealsOrder);

                        Deal model = await ReadById(viewModel.DealId);

                        model.StageId = viewModel.TargetStageId;
                        await this.Update(viewModel.DealId, model);

                        Activity activity = new Activity()
                        {
                            DealId        = model.Id,
                            DealCode      = model.Code,
                            DealName      = model.Name,
                            Type          = "MOVE",
                            StageFromId   = viewModel.SourceStageId,
                            StageFromName = viewModel.SourceStageName,
                            StageToId     = viewModel.TargetStageId,
                            StageToName   = viewModel.TargetStageName
                        };

                        do
                        {
                            activity.Code = CodeGenerator.Generate();
                        }while (this.DbContext.DealTrackingActivities.Any(d => d.Code.Equals(activity.Code)));
                        ActivityLogic.Create(activity);

                        Count = await DbContext.SaveChangesAsync();

                        break;
                    }
                }
                catch (DbUpdateConcurrencyException e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }

                transaction.Commit();
            }

            return(Count);
        }