Untitled

 avatar
unknown
plain_text
12 days ago
4.2 kB
1
Indexable
 public async Task<UpdatedBusinessTripViewModel> SaveOrSubmit(BusinessTripRequest businessTripRequest, int actionID, UserModel user)
        {
            UpdatedBusinessTripViewModel updatedBTRequest = null;
            var dbBusinessTrip = new BusinessTripRequest();

            using (var transaction = Context.Database.BeginTransaction())
            {
                try
                {
                    var action = (actionID == Constants.Common.Action.Submit.ToInt())
                                    ? Constants.Common.Action.Submit.ToInt()
                                    : Constants.Common.Action.Save.ToInt();

                    if (businessTripRequest.BusinessTripRequestID == 0)
                    {
                        dbBusinessTrip = SaveAllRequest(businessTripRequest, user.CompanyId);
                        //Approval Hierarchy
                        //dbBusinessTrip = SaveRequest(businessTripRequest, user.CompanyId);
                    }
                    else
                    {
                        dbBusinessTrip = UpdateRequest(businessTripRequest, user.CompanyId);
                    }

                    UnitOfWork.SaveChanges();

                    GenerateAuditTrail(dbBusinessTrip.BusinessTripRequestID,
                                       action,
                                       user);

                    UnitOfWork.SaveChanges();

                    await Context.Entry(dbBusinessTrip).ReloadAsync().ConfigureAwait(false);

                    updatedBTRequest = new UpdatedBusinessTripViewModel
                    {
                        BusinessTripRequestID = dbBusinessTrip.BusinessTripRequestID,
                        EmployeeFirstName = dbBusinessTrip.Employee.FirstName,
                        EmployeeName = dbBusinessTrip.Employee.EmployeeName,
                        StartOfTrip = dbBusinessTrip.StartOfTrip,
                        EndOfTrip = dbBusinessTrip.EndOfTrip,
                        NatureOfTrip = Constants.BusinessTripRequest.NatureOfTrip[dbBusinessTrip.NatureOfTripID ?? 0],
                        NoOfDays = dbBusinessTrip.NoOfDays,
                        Destination = dbBusinessTrip.Destination,
                        ApproverEmailAddress = dbBusinessTrip.BusinessTripRequestApprovers
                                                .FirstOrDefault(x => x.OrdinalPosition == dbBusinessTrip.CurrentApprover)
                                                ?.Approver
                                                .EmailAddress,
                        ApproverFirstName = dbBusinessTrip.BusinessTripRequestApprovers
                                                .FirstOrDefault(x => x.OrdinalPosition == dbBusinessTrip.CurrentApprover)
                                                ?.Approver
                                                .FirstName,
                        CurrentOrdinal = 1,
                        Approvers = dbBusinessTrip.BusinessTripRequestApprovers
                                                  .Select(x => new BusinessTripRequestApproverViewModel
                                                  {
                                                      ApproverID = x.ApproverID,
                                                      ApproverEmail = x.Approver.EmailAddress,
                                                      ApproverFirstName = x.Approver.FirstName,
                                                      Ordinal = x.OrdinalPosition,
                                                      DateProcessed = x.DateProcessed,
                                                      StatusID = x.StatusID,
                                                      StatusName = x.BusinessTripRequestApproverStatus?.StatusName

                                                  }).ToList()

                    };

                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }

            return updatedBTRequest;
        }
Leave a Comment