/// <summary>
        /// Method used to perform activity if it can occur as soon as resources are available.
        /// </summary>
        public override void DoActivity()
        {
            double labourlimit = this.LabourLimitProportion;
            double pricelimit  = this.LimitProportion(typeof(FinanceType));
            double limit       = Math.Min(labourlimit, pricelimit);

            Status = ActivityStatus.NotNeeded;
            if (price != null)
            {
                if (limit == 1 || this.OnPartialResourcesAvailableAction == OnPartialResourcesAvailableActionTypes.UseResourcesAvailable)
                {
                    double units2buy = units * limit;
                    if (price.UseWholePackets)
                    {
                        units2buy = Math.Truncate(units2buy);
                    }
                    // adjust resources bought based on labour/finance shortfall
                    // buy resources
                    if (units2buy > 0)
                    {
                        resourceToBuy.Add(units2buy * price.PacketSize, this, "Purchase " + (resourceToBuy as Model).Name);
                        Status = ActivityStatus.Success;
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Method used to perform activity if it can occur as soon as resources are available.
        /// </summary>
        public override void DoActivity()
        {
            Status = ActivityStatus.NotNeeded;
            // take local equivalent of market from resource

            double provided = 0;

            if ((resourceToBuy as CLEMResourceTypeBase).MarketStoreExists)
            {
                // find resource entry in market if present and reduce
                ResourceRequest rr = ResourceRequestList.Where(a => a.Resource == (resourceToBuy as CLEMResourceTypeBase).EquivalentMarketStore).FirstOrDefault();
                provided = rr.Provided / this.FarmMultiplier;
            }
            else
            {
                provided = unitsCanAfford * price.PacketSize;
            }

            if (provided > 0)
            {
                resourceToBuy.Add(provided, this, "", "Purchase");
                Status = ActivityStatus.Success;
            }

            // make financial transactions
            if (bankAccount != null)
            {
                ResourceRequest payment = new ResourceRequest()
                {
                    AllowTransmutation          = false,
                    MarketTransactionMultiplier = this.FarmMultiplier,
                    Required          = provided / price.PacketSize * price.PricePerPacket,
                    ResourceType      = typeof(Finance),
                    ResourceTypeName  = bankAccount.Name,
                    Category          = "Purchase",
                    RelatesToResource = (resourceToBuy as CLEMModel).NameWithParent,
                    ActivityModel     = this
                };
                bankAccount.Remove(payment);
            }
        }