コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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));
        }