/// <summary> /// Will convert a dbModel to its DTO pair. /// </summary> /// <param name="dbModel">The Journal Entry that we are converting to a DTO.</param> /// <returns>The DTO that represent the journal entry provided.</returns> public static JournalEntryModel LoadJournalEntry(JournalEntry dbModel) { JournalEntryModel ret = null; switch (dbModel.JournalTypeId) { case (int)JournalType.Enum.Expenses: break; case (int)JournalType.Enum.Recurring: ret = new RecurringJounralEntryModel() { Settlements = dbModel.RecurringExtension.Settlements, CycleDue = dbModel.RecurringExtension.CycleDue != null ? (decimal)dbModel.RecurringExtension.CycleDue : 0, FrequencyName = dbModel.RecurringExtension.FrequencyType.FrequencyName, FrequencyTypeId = dbModel.RecurringExtension.FrequencyType.FrequencyTypeId, InterestRate = dbModel.RecurringExtension.InterestRate, LoanDate = dbModel.RecurringExtension.LoanDate }; break; case (int)JournalType.Enum.MaintenanceParts: ret = new MaintenanceJournalEntryModel() { MaintenanceTypeId = dbModel.MaintenanceExtension.MaintenanceType.MaintenanceTypeId, MaintenanceTypeName = dbModel.MaintenanceExtension.MaintenanceType.MaintenanceTypeName, TransactionDate = dbModel.MaintenanceExtension.TransactionDate }; break; case (int)JournalType.Enum.Compliance: break; case (int)JournalType.Enum.Adjustment: break; default: throw new ArgumentException("Journal Type does not exist."); } ret.Amount = dbModel.Amount; ret.Description = dbModel.Description; if (dbModel.Driver != null) { // TODO: transfer driver info here. ret.Driver = new DriverModel() { DriverId = dbModel.DriverId, DriverFirstName = dbModel.Driver.FirstName, DriverLastName = dbModel.Driver.LastName, HireDate = dbModel.Driver.HireDate ?? new DateTime(2000, 1, 1), TermDate = dbModel.Driver.TermDate, DriverLicenseNumber = dbModel.Driver.DriverLicenseNumber }; } else { ret.Driver = new DriverModel(); } ret.DriverGLAccount = dbModel.DriverGLAccount; ret.JournalEntryId = dbModel.JournalEntryId; ret.Name = dbModel.JournalEntryName; ret.SMEGLAccount = dbModel.SMEGLAccount; ret.Type = dbModel.JournalType.JournalTypeName; ret.Contract = new ContractModel() { ContractId = dbModel.ContractId }; return(ret); }
/// <summary> /// Save a JournalEntryModel in a way specific to the type passed into the Journal Type Id. /// </summary> /// <param name="user">The user saving.</param> /// <param name="journalTypeId">The type of journal entry being saved.</param> /// <param name="model">The data to be saved to the database.</param> /// <returns></returns> public async static Task <JournalEntryModel> SaveJournalEntryModel(PortalUser user, int journalTypeId, JournalEntryModel model, IDriverRepository repository) { JournalEntryModel saveMe = model; JournalEntry dbEntry = null; switch (journalTypeId) { case (int)JournalType.Enum.Expenses: break; case (int)JournalType.Enum.Recurring: dbEntry = saveMe.JournalEntryId != 0 ? await repository.GetRecurringJournalEntryById(saveMe.JournalEntryId) : null; break; case (int)JournalType.Enum.MaintenanceParts: dbEntry = saveMe.JournalEntryId != 0 ? await repository.GetMaintenanceJournalEntryById(saveMe.JournalEntryId) : null; break; case (int)JournalType.Enum.Compliance: break; case (int)JournalType.Enum.Adjustment: break; default: throw new NullReferenceException("Journal Type does not exist."); } if (dbEntry != null && user.CompanyId != dbEntry.CompanyId) { throw new NullReferenceException("Journal Type does not exist."); } Driver driver = null; // Make sure the driver exists. if (saveMe.Driver == null && dbEntry == null) { throw new NullReferenceException("Driver is required to create."); } else if (saveMe.Driver != null) { driver = await repository.GetDriverById(saveMe.Driver.DriverId); if (driver == null && dbEntry == null) { throw new NullReferenceException($"Could not find driver with id {saveMe.Driver.DriverId}"); } } // Are we saving a new Journal or editing an old one? if (dbEntry == null && saveMe.JournalEntryId == 0) { dbEntry = new JournalEntry(); repository.Insert(dbEntry); dbEntry.CreatedBy = user.PortalUsername; dbEntry.CreatedDate = DateTime.UtcNow; } else if (dbEntry == null) { throw new NullReferenceException("Either Journal Entry Id or Jounral Type Id is incorrect."); } dbEntry.JournalEntryName = saveMe.Name; dbEntry.SMEGLAccount = saveMe.SMEGLAccount; // This can only be bypassed if the record already exists and we arent changin the driver. // Otherwise this if statement should be true. if (driver != null) { dbEntry.DriverId = driver.DriverId; } dbEntry.DriverGLAccount = saveMe.DriverGLAccount; dbEntry.Description = saveMe.Description; dbEntry.CompanyId = user.CompanyId; dbEntry.Amount = saveMe.Amount; dbEntry.JournalTypeId = journalTypeId; dbEntry.JournalType = await repository.GetJournalTypeById(dbEntry.JournalTypeId); if (dbEntry.JournalType == null) { throw new NullReferenceException("Could not find Journal Type."); } dbEntry.IsActive = true; // Save extension table as well. switch (journalTypeId) { case (int)JournalType.Enum.Expenses: break; case (int)JournalType.Enum.Recurring: // Casting for ease. RecurringJounralEntryModel recurring = (RecurringJounralEntryModel)saveMe; if (dbEntry.RecurringExtension == null) { dbEntry.RecurringExtension = new JournalRecurringExtension(); repository.Insert(dbEntry.RecurringExtension); dbEntry.RecurringExtension.CreatedBy = user.PortalUsername; dbEntry.RecurringExtension.CreatedDate = DateTime.UtcNow; } dbEntry.RecurringExtension.CycleDue = recurring.CycleDue; dbEntry.RecurringExtension.InterestRate = recurring.InterestRate; dbEntry.RecurringExtension.FrequencyTypeId = recurring.FrequencyTypeId; dbEntry.RecurringExtension.FrequencyType = await repository.GetFrequencyTypeById(recurring.FrequencyTypeId); if (dbEntry.RecurringExtension.FrequencyType == null) { throw new NullReferenceException("The frequency type does not exist."); } dbEntry.RecurringExtension.LoanDate = recurring.LoanDate; dbEntry.RecurringExtension.Settlements = recurring.Settlements; dbEntry.RecurringExtension.IsActive = true; if (repository.IsChanged(dbEntry.RecurringExtension)) { dbEntry.RecurringExtension.ModifiedBy = user.PortalUsername; dbEntry.RecurringExtension.ModifiedDate = DateTime.UtcNow; } break; case (int)JournalType.Enum.MaintenanceParts: // Casting for ease. MaintenanceJournalEntryModel maintenance = (MaintenanceJournalEntryModel)saveMe; if (dbEntry.MaintenanceExtension == null) { dbEntry.MaintenanceExtension = new JournalMaintenanceExtension(); repository.Insert(dbEntry.MaintenanceExtension); dbEntry.MaintenanceExtension.CreatedBy = user.PortalUsername; dbEntry.MaintenanceExtension.CreatedDate = DateTime.UtcNow; } dbEntry.MaintenanceExtension.IsActive = true; dbEntry.MaintenanceExtension.TransactionDate = maintenance.TransactionDate; dbEntry.MaintenanceExtension.MaintenanceTypeId = maintenance.MaintenanceTypeId; dbEntry.MaintenanceExtension.MaintenanceType = await repository.GetMaintenanceById(maintenance.MaintenanceTypeId); if (dbEntry.MaintenanceExtension.MaintenanceType == null) { throw new NullReferenceException("The maintenance type does not exist."); } if (repository.IsChanged(dbEntry.MaintenanceExtension)) { dbEntry.MaintenanceExtension.ModifiedBy = user.PortalUsername; dbEntry.MaintenanceExtension.ModifiedDate = DateTime.UtcNow; } break; case (int)JournalType.Enum.Compliance: break; case (int)JournalType.Enum.Adjustment: break; default: break; } if (repository.IsChanged(dbEntry)) { dbEntry.ModifiedBy = user.PortalUsername; dbEntry.ModifiedDate = DateTime.UtcNow; } await repository.SaveChanges(); return(LoadJournalEntry(dbEntry)); }