I only have 1 Business Rule in the application and I deactivated it. I only have a JavaScript file to open a new Extra Cost record as a centered dialog and a JavaScript file to add icons in a grid.
Here's a code snippet of the Update TraineeBudget Record:
 public class UpdateTraineeBudgets : IPlugin
    {
        private static IOrganizationService _service;
        private IOrganizationServiceFactory _serviceFactory;
        private IPluginExecutionContext _context;
        public void Execute(IServiceProvider serviceProvider)
        {
            _context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            if (_context.Depth > 1)
            {
                return;
            }
            _serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            _service = _serviceFactory.CreateOrganizationService(_context.UserId);
            if (_context.MessageName == "Update")
            {
                UpdateBudgets();
            }
        }
        private void UpdateBudgets()
        {
            {
                var targetEntity = _context.InputParameters["Target"] as Entity;
                var preUpdate = EntityMapper.Map(_context.PreEntityImages["cref8_jaarlijkbudget"]);
                var budget = EntityMapper.Map(_service.Retrieve(targetEntity.LogicalName, targetEntity.Id, new ColumnSet("cref8_jaarlijkbudgetid","cref8_overigebudget","cref8_overigedagen","cref8_startbudget","cref8_startdagen")));
                var budgetToSave = new Entity("cref8_jaarlijkbudget");
                budgetToSave["cref8_jaarlijkbudgetid"] = budget.Id;
                if (budget.StartDays != 0)
                {
                    double? newDays = budget.StartDays - (preUpdate.StartDays - budget.RemainingDays);
                    budgetToSave["cref8_overigedagen"] = newDays;
                }
                if (budget.StartBudget != 0)
                {
                    double? newBudget = budget.StartBudget - (preUpdate.StartBudget - budget.RemainingBudget);
                    budgetToSave["cref8_overigebudget"] = newBudget;
                }
                _service.Update(budgetToSave);
            }
        }
    }
Here's a code snippet of the Update TrainingCost:
 public class UpdateTrainingCost : IPlugin
    {
        private static IOrganizationService _service;
        private IOrganizationServiceFactory _serviceFactory;
        private IPluginExecutionContext _context;
        public void Execute(IServiceProvider serviceProvider)
        {
            _context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            if (_context.Depth > 1)
            {
                return;
            }
            _serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            _service = _serviceFactory.CreateOrganizationService(_context.UserId);
            if (_context.MessageName == "Update")
            {
                UpdateBudgets();
            }
        }
        private void UpdateBudgets()
        {
            var targetEntity = _context.InputParameters["Target"] as Entity;
            var preUpdate = EntityMapper.Map(_context.PreEntityImages["cref8_opleiding"]);
            var training = EntityMapper.Map(_service.Retrieve(targetEntity.LogicalName, targetEntity.Id, new ColumnSet("cref8_jaarstartopleiding", "cref8_opleidingid", "cref8_prijs")));
            var cursists = GetCursists("cref8_cursist", "cref8_opleiding_cref8_cursist", "cref8_cursistid", "cref8_opleidingid", training.Id);
            foreach (var cursist in cursists)
            {
                var traineeBudget = GetTraineeBudget(cursist, training);
                double nieuwBudget = traineeBudget.RemainingBudget   preUpdate.Price - training.Price;
                Entity budget = new Entity("cref8_jaarlijkbudget");
                budget["cref8_jaarlijkbudgetid"] = traineeBudget.Id;
                budget["cref8_overigebudget"] = nieuwBudget;
                _service.Update(budget);
            }
        }
        private static TraineeBudget GetTraineeBudget(Cursist cursist, Training training)
        {
            ConditionExpression ceYearlyBudgetFromTrainee = new ConditionExpression("cref8_cursist", ConditionOperator.Equal, cursist.Id);
            ConditionExpression ceYearlyBudgetYear = new ConditionExpression("cref8_jaar", ConditionOperator.Equal, (int)training.Year);
            FilterExpression filter = new FilterExpression();
            filter.Conditions.Add(ceYearlyBudgetFromTrainee);
            filter.Conditions.Add(ceYearlyBudgetYear);
            QueryExpression qeYearlyBudget = new QueryExpression("cref8_jaarlijkbudget");
            qeYearlyBudget.ColumnSet = new ColumnSet("cref8_jaarlijkbudgetid", "cref8_overigebudget");
            qeYearlyBudget.Criteria.AddFilter(filter);
            EntityCollection yearlyBudgetResult = _service.RetrieveMultiple(qeYearlyBudget);
            return EntityMapper.Map(yearlyBudgetResult.Entities.First());
        }
        private static List GetCursists(string entityName, string linkToEntityName, string linkAttributeName, string attributeName, Guid id)
        {
            var query = new QueryExpression()
            {
                EntityName = entityName,
                ColumnSet = new ColumnSet("cref8_cursistid", "cref8_fullname"),
            };
            var link = query.AddLink(linkToEntityName, linkAttributeName, linkAttributeName);
            link.LinkCriteria = new FilterExpression()
            {
                Conditions =
                                    {
                                        new ConditionExpression(attributeName, ConditionOperator.Equal, id)
                                    }
            };
            return _service.RetrieveMultiple(query).Entities.Select(e => EntityMapper.Map(e)).ToList();
        }
    }