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); }