/// <summary>
        /// Provides the description of the model settings for summary (GetFullSummary)
        /// </summary>
        /// <param name="formatForParentControl">Use full verbose description</param>
        /// <returns></returns>
        public override string ModelSummary(bool formatForParentControl)
        {
            using (StringWriter htmlWriter = new StringWriter())
            {
                ZoneCLEM        clemParent = FindAncestor <ZoneCLEM>();
                ResourcesHolder resHolder;
                Finance         finance = null;
                if (clemParent != null)
                {
                    resHolder = clemParent.FindAllChildren <ResourcesHolder>().FirstOrDefault() as ResourcesHolder;
                    finance   = resHolder.FinanceResource();
                }

                if (finance == null)
                {
                    htmlWriter.Write("\r\n<div class=\"activityentry\">This activity is not required as no <span class=\"resourcelink\">Finance</span> resource is available.</div>");
                }
                else
                {
                    htmlWriter.Write("\r\n<div class=\"activityentry\">Interest rates are set in the <span class=\"resourcelink\">FinanceType</span> component</div>");
                    foreach (FinanceType accnt in finance.FindAllChildren <FinanceType>())
                    {
                        if (accnt.InterestRateCharged == 0 & accnt.InterestRatePaid == 0)
                        {
                            htmlWriter.Write("\r\n<div class=\"activityentry\">This activity is not needed for <span class=\"resourcelink\">" + accnt.Name + "</span> as no interest rates are set.</div>");
                        }
                        else
                        {
                            if (accnt.InterestRateCharged > 0)
                            {
                                htmlWriter.Write("\r\n<div class=\"activityentry\">This activity will calculate interest charged for <span class=\"resourcelink\">" + accnt.Name + "</span> at a rate of <span class=\"setvalue\">" + accnt.InterestRateCharged.ToString("#.00") + "</span>%</div>");
                            }
                            else
                            {
                                htmlWriter.Write("\r\n<div class=\"activityentry\">This activity will calculate interest paid for <span class=\"resourcelink\">" + accnt.Name + "</span> at a rate of <span class=\"setvalue\">" + accnt.InterestRatePaid.ToString("#.00") + "</span>%</div>");
                            }
                        }
                    }
                }
                return(htmlWriter.ToString());
            }
        }
Пример #2
0
        /// <inheritdoc/>
        public override void DoActivity()
        {
            Status = ActivityStatus.NotNeeded;
            if (finance != null)
            {
                // make interest payments on bank accounts
                foreach (FinanceType accnt in finance.FindAllChildren <FinanceType>())
                {
                    if (accnt.Balance > 0)
                    {
                        if (accnt.InterestRatePaid > 0)
                        {
                            accnt.Add(accnt.Balance * accnt.InterestRatePaid / 1200, this, "", "Interest");
                            SetStatusSuccess();
                        }
                    }
                    else if (accnt.Balance < 0)
                    {
                        double interest = Math.Round(Math.Abs(accnt.Balance) * accnt.InterestRateCharged / 1200, 2, MidpointRounding.ToEven);
                        if (Math.Abs(accnt.Balance) * accnt.InterestRateCharged / 1200 != 0)
                        {
                            ResourceRequest interestRequest = new ResourceRequest
                            {
                                ActivityModel      = this,
                                Required           = interest,
                                AllowTransmutation = false,
                                Category           = TransactionCategory
                            };
                            accnt.Remove(interestRequest);

                            // report status
                            if (interestRequest.Required > interestRequest.Provided)
                            {
                                interestRequest.ResourceType     = typeof(Finance);
                                interestRequest.ResourceTypeName = accnt.NameWithParent;
                                interestRequest.Available        = accnt.FundsAvailable;
                                ResourceRequestEventArgs rre = new ResourceRequestEventArgs()
                                {
                                    Request = interestRequest
                                };
                                OnShortfallOccurred(rre);

                                switch (OnPartialResourcesAvailableAction)
                                {
                                case OnPartialResourcesAvailableActionTypes.ReportErrorAndStop:
                                    throw new ApsimXException(this, String.Format("Insufficient funds in [r={0}] to pay interest charged.\r\nConsider changing OnPartialResourcesAvailableAction to Skip or Use Partial.", accnt.Name));

                                case OnPartialResourcesAvailableActionTypes.SkipActivity:
                                    Status = ActivityStatus.Ignored;
                                    break;

                                case OnPartialResourcesAvailableActionTypes.UseResourcesAvailable:
                                    Status = ActivityStatus.Partial;
                                    break;

                                default:
                                    break;
                                }
                            }
                            else
                            {
                                Status = ActivityStatus.Success;
                            }
                        }
                    }
                }
            }
        }