public void CreateNewForExpense(Expense entity, ExpenseStatusLog change) { var user = this.usersRepository.GetSingle(entity.UserId); var userDevices = this.devicesRepository.GetAll().Where(x => x.UserId == entity.UserId).ToList(); var expenseNotificationDetail = Mapper.Map <Expense, ExpenseNotificationDetailDto>(entity); var clickParameter = JsonConvert.SerializeObject(expenseNotificationDetail); var notification = new Domain.Entities.Notification() { Id = 0, UserId = user.Id, Title = "Tu solicitud de gasto para el día " + entity.Date.Date.ToString("dd/MM/yyyy") + " fue rechazado por " + change.ReasonOfChange, Status = 1, Message = change.Notes, RoleId = user.RoleId, Type = "info", Read = false, ClickParameter = clickParameter, OnAppClick = "editExpensePage" }; this.entityRepository.Add(notification); this.unitOfWork.Commit(); foreach (var device in userDevices) { notification.DeviceId = device.Id; notification.Device = device; SendPushNotification(notification); } }
public override ExpenseDto Save(ExpenseDto expenseDto) { //try{ var expenseUser = this.userRepository.GetAllIncluding(x => x.UserCompanyGroups, x => x.UserCompanyGroups.Select(y => y.Company), x => x.UserCompanyGroups.Select(y => y.UserGroup)). Where(x => x.Id == expenseDto.UserId). FirstOrDefault(); /// entidad intermedia entre Compañía-Grupo de la compañía a la que se le agrega el gasto. var currentCompanyUserGroup = expenseUser.UserCompanyGroups.Where(x => x.CompanyId == expenseDto.CompanyId).FirstOrDefault(); if (currentCompanyUserGroup != null) { expenseDto.Group = currentCompanyUserGroup.UserGroup.Description + " " + currentCompanyUserGroup.Company.Name; } else { expenseDto.Group = "N/A"; } var provider = this.providerRepository.GetAll().Where(x => x.Cuit == expenseDto.Provider.Cuit).FirstOrDefault(); if (provider != null) { expenseDto.Provider = Mapper.Map <Provider, ProviderDto>(provider); } else { var dbProvider = Mapper.Map <ProviderDto, Provider>(expenseDto.Provider); dbProvider.UserId = (int)this.CurrentUserId; this.providerRepository.Add(dbProvider); try { this.unitOfWork.Commit(); } catch (Exception ex) { throw new Exception("Catch en metodo save uow1: " + ex.ToString()); } expenseDto.Provider.Id = dbProvider.Id; } if (expenseDto.Id == 0) { var duplicatedSyncStatus = this.syncStatusesRepository.GetAll(). Where(x => x.Description == "Duplicado"). FirstOrDefault(); //var receiptIsEmpty = String.IsNullOrEmpty(expenseDto.Receipt); //var totalAsDouble = StringExtensionMethods.ToDouble(expenseDto.Total); var expensesMatching = this.entityRepository.GetAllIncluding(x => x.Provider, x => x.Category, x => x.SyncStatus, x => x.Company). Where(x => x.Provider.Cuit == expenseDto.Provider.Cuit && x.Receipt != null && x.Receipt != "" && x.Receipt == expenseDto.Receipt). ToList(). OrderBy(x => x.UpdatedDateTime); if (expensesMatching.Count() > 0) { expenseDto.SyncStatus = Mapper.Map <SyncStatus, SyncStatusDto>(duplicatedSyncStatus); } expenseDto.UpdatedBy = (int)this.CurrentUserId; var expense = Mapper.Map <ExpenseDto, Expense>(expenseDto); this.entityRepository.Add(expense); try { this.unitOfWork.Commit(); } catch (Exception ex) { throw new Exception("Catch en metodo save uow2:"); } expenseDto.Id = expense.Id; if (expensesMatching.Count() > 0) { var expenseStateLogEntry = new ExpenseStatusLog() { Id = 0, ReasonOfChange = "Carga duplicada.", Notes = "Se detectó que este gasto puede estar duplicado. Será inspeccionado por Administración.", ExpenseId = expenseDto.Id, UserId = (int)this.CurrentUserId, Change = "Nuevo 🡆 Duplicado" }; this.expenseStatusLogRepository.Add(expenseStateLogEntry); try { this.unitOfWork.Commit(); } catch (Exception ex) { throw new Exception("Catch en metodo save uow3:"); } } else { var expenseStateLogEntry = new ExpenseStatusLog() { Id = 0, ReasonOfChange = "N/A", UserId = (int)this.CurrentUserId, Notes = "N/A", ExpenseId = expenseDto.Id, Change = "Nuevo 🡆 " + expenseDto.SyncStatus.Description }; this.expenseStatusLogRepository.Add(expenseStateLogEntry); try { this.unitOfWork.Commit(); } catch (Exception ex) { throw new Exception("Catch en metodo save uow4:"); } } if (expenseDto.Images.Count() > 0) { foreach (var image in expenseDto.Images) { var img = Mapper.Map <ImageDto, Image>(image); img.ExpenseId = expenseDto.Id; this.imagesRepository.Add(img); try { this.unitOfWork.Commit(); } catch (Exception ex) { throw new Exception("Catch en metodo save uow5:" + ex.ToString()); } } } } else { var dbExpense = this.entityRepository.GetAllIncluding(x => x.SyncStatus). Where(x => x.Id == expenseDto.Id). FirstOrDefault(); expenseDto.UpdatedBy = (int)this.CurrentUserId; var expense = Mapper.Map <ExpenseDto, Expense>(expenseDto); this.entityRepository.Edit(expense); try { this.unitOfWork.Commit(); } catch (Exception ex) { throw new Exception("Catch en metodo save uow6:"); } if (dbExpense.SyncStatus.Description != expenseDto.SyncStatus.Description) { var expenseStateLogEntry = new ExpenseStatusLog() { Id = 0, ReasonOfChange = "Corrección de datos.", Notes = "N/A", UserId = (int)this.CurrentUserId, ExpenseId = expenseDto.Id, Change = dbExpense.SyncStatus.Description + " 🡆 " + expenseDto.SyncStatus.Description }; this.expenseStatusLogRepository.Add(expenseStateLogEntry); try { this.unitOfWork.Commit(); } catch (Exception ex) { throw new Exception("Catch en metodo save uow7:"); } } } return(expenseDto); //}catch(Exception ex){ // throw new Exception("Catch en metodo save:" + ex.ToString()); //} }
public ChangeExpenseStatusResult ChangeStatus(ChangeExpenseStatusDto entity) { var result = new ChangeExpenseStatusResult(); var currentUser = this.userRepository.GetAllIncluding(x => x.Role). Where(x => x.Id == (int)this.CurrentUserId). FirstOrDefault(); var expense = this.entityRepository.GetAllIncluding(x => x.SyncStatus, x => x.Provider, x => x.Category, x => x.Payment). Where(x => x.Id == entity.Id). FirstOrDefault(); if (expense != null) { /// Previus SyncStatus == "Editar" var newStatusLogEntry = new ExpenseStatusLog() { Id = 0, Change = expense.SyncStatus.Description + " 🡆 " + entity.SyncStatus.Description, ExpenseId = entity.Id, Notes = "N/A", UserId = (int)this.CurrentUserId, ReasonOfChange = "Solucionar errores en datos." }; if (currentUser.Role.Description != "Usuario") { if (string.IsNullOrEmpty(entity.ChangeStatusNote)) { newStatusLogEntry.Notes = "N/A"; } else { newStatusLogEntry.Notes = entity.ChangeStatusNote; } if (string.IsNullOrEmpty(entity.ChangeStatusReason)) { newStatusLogEntry.ReasonOfChange = "N/A"; } else { newStatusLogEntry.ReasonOfChange = entity.ChangeStatusReason; } } this.expenseStatusLogRepository.Add(newStatusLogEntry); this.unitOfWork.Commit(); expense.SyncStatus = Mapper.Map <SyncStatusDto, SyncStatus>(entity.SyncStatus); expense.SyncStatusId = entity.SyncStatus.Id; expense.UpdatedBy = (int)this.CurrentUserId; if (entity.SyncStatus != null && entity.SyncStatus.Description == "Rechazado") { this.notificationAppService.CreateNewForExpense(expense, newStatusLogEntry); } this.entityRepository.Edit(expense); this.unitOfWork.Commit(); result.Success = true; result.Message = "Éxito"; } else { result.Success = false; result.Message = "No se encontró el gasto que se intenta editar."; } return(result); }