示例#1
0
        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);
            }
        }
示例#2
0
        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());
            //}
        }
示例#3
0
        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);
        }