From 99fdad023d96d235a88471e17909e3789ba48bd7 Mon Sep 17 00:00:00 2001
From: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Sun, 13 Mar 2022 16:48:12 -0400
Subject: [PATCH 1/7] Squashed commit of the following:
commit 2449c03dca2f8203507b7673401d7ed12c24f636
Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Sun Mar 13 16:47:20 2022 -0400
Merging work
commit 877a41de4a9634725004aefd4608d872c2c958cf
Merge: 0cfbcdc 2301551
Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Sun Mar 13 10:14:24 2022 -0400
Merge branch 'towers-in-the-soup' of https://github.com/Unit26Y21/DesignAnarchy into towers-in-the-soup
commit 0cfbcdcdd2b42f8167bac02d4afa621766cd8bd2
Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Sun Mar 13 10:14:08 2022 -0400
coordinating carpark code with other rates
commit 2301551ed607b4c663c6fe6f47d9639309309b6a
Merge: dd60c76 25ec2ed
Author: kkenny000 <92530883+kkenny000@users.noreply.github.com>
Date: Fri Mar 11 14:30:04 2022 -0500
Projected Proceeds
updated code to combine all functions for commercial, residential and manufacturing proceeds
commit dd60c7658ad4f14e5365bb62d55556c32e99a57f
Author: kkenny000 <92530883+kkenny000@users.noreply.github.com>
Date: Tue Mar 8 10:53:41 2022 -0500
Manufacturing Code and Coffee edits
commit 25ec2ed2bc8e4b3df2dd5c96ea60e1f99ebb1d84
Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Mon Mar 7 20:41:19 2022 -0500
Other Rates Pro Forma Code
commit ca6b5bc93701c22beb690cffec2b484bffe93610
Merge: 8717f74 4d4be3d
Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Mon Mar 7 19:14:37 2022 -0500
Merge branch 'towers-in-the-soup' of https://github.com/Unit26Y21/DesignAnarchy into towers-in-the-soup
commit 8717f74f71f0d63dd14ce582af85c674542eaf17
Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Mon Mar 7 19:13:55 2022 -0500
proforma updates
commit 4d4be3da49b09de77712b5597b898717aadb656a
Author: kkenny000 <92530883+kkenny000@users.noreply.github.com>
Date: Mon Mar 7 14:03:34 2022 -0500
Manufacturing Py Files
initial edits
commit 56056be584066f59cea3d3e88da57dd4013aba3e
Author: kkenny000 <92530883+kkenny000@users.noreply.github.com>
Date: Mon Mar 7 11:13:26 2022 -0500
Manufacturing Constants
commit 1c877017839faadb0e260ab62ead928a44cefdb8
Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Sun Feb 27 14:15:01 2022 -0500
proforma update
commit c2346e3207f7083ff327fe744e3a7540d7f598bf
Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Sat Feb 26 09:09:59 2022 -0500
Added conditional statements for user input
commit e2d97792eb05f2005de860b4ffd29fd317580b39
Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com>
Date: Thu Feb 24 23:49:16 2022 -0500
creating environment for Pro Forma
---
.../.idea/Towers in the Soup.iml | 10 ++
.../inspectionProfiles/profiles_settings.xml | 6 +
.../Teams/Towers in the Soup/.idea/misc.xml | 4 +
.../Towers in the Soup/.idea/modules.xml | 8 +
Spring/Teams/Towers in the Soup/.idea/vcs.xml | 6 +
.../Towers in the Soup/.idea/workspace.xml | 164 ++++++++++++++++++
.../ProForma/.idea/.gitignore | 3 +
.../ProForma/.idea/ProForma.iml | 10 ++
.../inspectionProfiles/profiles_settings.xml | 6 +
.../ProForma/.idea/misc.xml | 4 +
.../ProForma/.idea/modules.xml | 8 +
.../Towers in the Soup/ProForma/.idea/vcs.xml | 6 +
.../ProForma/BuildUp_ProForma.py | 1 +
.../ProForma/DevCosts_CapitalStruc.py | 159 +++++++++++++++++
.../ProForma/DevelopmentCostsInputs.py | 41 +++++
.../ProForma/Manufacturing_Constants.py | 9 +
.../Towers in the Soup/ProForma/OtherRates.py | 30 ++++
.../ProForma/ProForma_ProfileInformation.py | 17 ++
.../ProForma/ProForma_ROI.py | 98 +++++++++++
.../ProForma/Proceeds_Constants.py | 31 ++++
.../ProForma/Projected_Proceeds.py | 119 +++++++++++++
.../ProForma/Starting_Assumptions.py | 21 +++
.../DevCosts_CapitalStruc.cpython-310.pyc | Bin 0 -> 3890 bytes
.../DevelopmentCostsInputs.cpython-310.pyc | Bin 0 -> 1167 bytes
.../Manufacturing_Constants.cpython-310.pyc | Bin 0 -> 463 bytes
.../__pycache__/ProForma_ROI.cpython-310.pyc | Bin 0 -> 3540 bytes
.../Proceeds_Constants.cpython-310.pyc | Bin 0 -> 950 bytes
.../Starting_Assumptions.cpython-310.pyc | Bin 0 -> 649 bytes
.../Teams/Towers in the Soup/ProForma/main.py | 9 +
29 files changed, 770 insertions(+)
create mode 100644 Spring/Teams/Towers in the Soup/.idea/Towers in the Soup.iml
create mode 100644 Spring/Teams/Towers in the Soup/.idea/inspectionProfiles/profiles_settings.xml
create mode 100644 Spring/Teams/Towers in the Soup/.idea/misc.xml
create mode 100644 Spring/Teams/Towers in the Soup/.idea/modules.xml
create mode 100644 Spring/Teams/Towers in the Soup/.idea/vcs.xml
create mode 100644 Spring/Teams/Towers in the Soup/.idea/workspace.xml
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/OtherRates.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevCosts_CapitalStruc.cpython-310.pyc
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevelopmentCostsInputs.cpython-310.pyc
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/Manufacturing_Constants.cpython-310.pyc
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/ProForma_ROI.cpython-310.pyc
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/Proceeds_Constants.cpython-310.pyc
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/Starting_Assumptions.cpython-310.pyc
create mode 100644 Spring/Teams/Towers in the Soup/ProForma/main.py
diff --git a/Spring/Teams/Towers in the Soup/.idea/Towers in the Soup.iml b/Spring/Teams/Towers in the Soup/.idea/Towers in the Soup.iml
new file mode 100644
index 0000000..74d515a
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/.idea/Towers in the Soup.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/.idea/inspectionProfiles/profiles_settings.xml b/Spring/Teams/Towers in the Soup/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/.idea/misc.xml b/Spring/Teams/Towers in the Soup/.idea/misc.xml
new file mode 100644
index 0000000..a662bc4
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/.idea/modules.xml b/Spring/Teams/Towers in the Soup/.idea/modules.xml
new file mode 100644
index 0000000..4e6885f
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/.idea/vcs.xml b/Spring/Teams/Towers in the Soup/.idea/vcs.xml
new file mode 100644
index 0000000..c2365ab
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/.idea/workspace.xml b/Spring/Teams/Towers in the Soup/.idea/workspace.xml
new file mode 100644
index 0000000..0d7e2ba
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/.idea/workspace.xml
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1645762265428
+
+
+ 1645762265428
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore b/Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml b/Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml
new file mode 100644
index 0000000..74d515a
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml
new file mode 100644
index 0000000..a4652f3
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml
new file mode 100644
index 0000000..cb032cd
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml
new file mode 100644
index 0000000..4fce1d8
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py b/Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py
new file mode 100644
index 0000000..1fcfaa3
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py
@@ -0,0 +1 @@
+''' test '''
diff --git a/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py
new file mode 100644
index 0000000..92b8f69
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py
@@ -0,0 +1,159 @@
+import DevelopmentCostsInputs as devCost
+
+#0.StartingAssumptions#
+
+def TotalGrossZoningFloorArea(residZFA, comZFA, manZFA):
+ totalGZFA = [residZFA,comZFA,manZFA]
+ sumGZFA = sum(totalGZFA)
+ #for i in totalGZFA:
+ print("Residential", residZFA,)
+ print("Commercial", comZFA)
+ print("Manufacturing", manZFA)
+ return sumGZFA
+
+def InacuracyFloorLoss(myTotalGZFA, InacFact):
+ floorLoss = myTotalGZFA * InacFact
+ print("Inaccuracy factor")
+ print(InacFact)
+ return floorLoss
+
+def TotalZoningFloorArea(myTotalGZFA, LossFact):
+ totalZFA = myTotalGZFA - (myTotalGZFA * LossFact)
+ print("Net loss factor")
+ print(LossFact)
+ return totalZFA
+
+myTotalGZFA = TotalGrossZoningFloorArea(residZFA= devCost.ResidentialZoningFloorArea,
+ comZFA= devCost.CommercialZoningFloorArea,
+ manZFA= devCost.ManufacturingZoningFloorArea)
+print("My total gross zoning floor area")
+print(myTotalGZFA)
+
+myFloorLoss = InacuracyFloorLoss(myTotalGZFA= myTotalGZFA,
+ InacFact= devCost.InacuracyFactor)
+print("my total floor loss")
+print(myFloorLoss)
+
+myTotalZFA = TotalZoningFloorArea(myTotalGZFA= myTotalGZFA,
+ LossFact= devCost.NetLossFactor)
+print("My total zoning floor area")
+print(myTotalZFA)
+
+#A.DevelopmentCosts#
+
+def LandPurchaseCost(landCost, lotArea):
+ totalPurchCost = landCost * lotArea
+ print(landCost)
+ print(lotArea)
+ return totalPurchCost
+
+def ResidentialCost(residZFA, residCost):
+ totalResidCost = residZFA * residCost
+ print(residCost)
+ return totalResidCost
+
+def CommercialCost(comZFA, comCost):
+ totalComCost = comZFA * comCost
+ print(comCost)
+ return totalComCost
+
+def ManufacturingCost(manZFA, manCost):
+ totalManCost = manZFA * manCost
+ print(manCost)
+ return totalManCost
+
+def HardCost(myTotalGZFA, hardCost):
+ totalHardCost = myTotalGZFA * hardCost
+ print(hardCost)
+ return totalHardCost
+
+def SoftCost(myTotalGZFA, softCost):
+ totalSoftCost = myTotalGZFA * softCost
+ print(softCost)
+ return totalSoftCost
+
+def TotalDevelopmentCost(BuildPurch, mytotalPurchCost, mytotalResidCost, mytotalComCost, mytotalManCost, mytotalHardCost, mytotalSoftCost):
+ totalDevCost = [BuildPurch, mytotalPurchCost, mytotalResidCost, mytotalComCost, mytotalManCost, mytotalHardCost, mytotalSoftCost]
+ sumDevCost: int = sum(totalDevCost)
+ print(BuildPurch)
+ return sumDevCost
+
+mytotalPurchCost = LandPurchaseCost(landCost= devCost.LandCostpsf,
+ lotArea= devCost.LotArea)
+print("My total purchasing costs")
+print(mytotalPurchCost)
+
+mytotalResidCost = ResidentialCost(residZFA= devCost.ResidentialZoningFloorArea,
+ residCost= devCost.ResidentialCostpsf)
+print("My total residential Cost")
+print(mytotalResidCost)
+
+mytotalComCost = CommercialCost(comZFA= devCost.CommercialZoningFloorArea,
+ comCost= devCost.CommercialCostpsf)
+print("My total commercial cost")
+print(mytotalComCost)
+
+mytotalManCost = ManufacturingCost(manZFA= devCost.ManufacturingZoningFloorArea,
+ manCost= devCost.ManufacturingCostpsf)
+print("My total manufacturing cost")
+print(mytotalManCost)
+
+mytotalHardCost = HardCost(myTotalGZFA= myTotalGZFA,
+ hardCost= devCost.HardCostpsf)
+print("My total hard cost")
+print(mytotalHardCost)
+
+mytotalSoftCost = SoftCost(myTotalGZFA= myTotalGZFA,
+ softCost= devCost.SoftCostpsf)
+print("My total soft cost")
+print(mytotalSoftCost)
+
+myTotalDevCost = TotalDevelopmentCost(BuildPurch= devCost.ExistingBuildingPurchase,
+ mytotalPurchCost= mytotalPurchCost,
+ mytotalResidCost= mytotalResidCost,
+ mytotalComCost= mytotalComCost,
+ mytotalManCost= mytotalManCost,
+ mytotalHardCost= mytotalHardCost,
+ mytotalSoftCost= mytotalSoftCost)
+print("My total development cost")
+print(myTotalDevCost)
+
+#B.CapitalStructure#
+
+def Equity(myTotalDevCost, EqPerc):
+ totalEq = myTotalDevCost * EqPerc
+ print(EqPerc)
+ return totalEq
+
+def Debt(myTotalDevCost, mytotalEq):
+ totalDebt = myTotalDevCost - mytotalEq
+ return totalDebt
+
+def DebtService(mytotalDebt, DebtServPerc):
+ totalDebtServ = mytotalDebt * DebtServPerc
+ print(DebtServPerc)
+ return totalDebtServ
+
+mytotalEq = Equity(myTotalDevCost= myTotalDevCost,
+ EqPerc= devCost.EquityPercentage)
+print("My total equity")
+print(mytotalEq)
+
+mytotalDebt = Debt(myTotalDevCost= myTotalDevCost,
+ mytotalEq= mytotalEq)
+print("My total debt")
+print(mytotalDebt)
+
+mytotalDebtServ = DebtService(mytotalDebt= mytotalDebt,
+ DebtServPerc= devCost.DebtServicePercentage)
+print("My total debt servicing cost")
+print(mytotalDebtServ)
+
+#C.ProjectedResidentialProceeds#
+
+#ResidentialExpenses#
+
+#Depreciation#
+
+
+
diff --git a/Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py b/Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py
new file mode 100644
index 0000000..440ffc2
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py
@@ -0,0 +1,41 @@
+#0.StartingAssumptions#
+DevelopmentTimeline = 11
+LotArea = 10375
+ExistingBuildingFloorArea = 132420.00 ##instead of hard coding can input from Built Area from Profile Information. whose code would that be?##
+ResidentialFAR = 7.52
+CommercialFAR = 1.00
+ManufacturingFAR = 0.00
+ResidentialZoningFloorArea = 100000.00
+CommercialZoningFloorArea = 100000.00
+ManufacturingZoningFloorArea = 100000.00
+InacuracyFactor = 0.03
+NetLossFactor = 0.15
+
+#A.DevelopmentCosts#
+ResidentialCostpsf = 500.00
+CommercialCostpsf = 500.00
+ManufacturingCostpsf = 500.00
+HardCostpsf = 200.00
+SoftCostpsf = 200.00
+LandCostpsf = 50
+ExistingBuildingPurchase = 0
+
+#B.CapitalStructure#
+DebtPercentage = 0.65
+EquityPercentage = 0.35
+DebtServicePercentage = 0.0688
+
+#C.ProjectedResidentialProceeds#
+AverageMarketRateUnitSizepsf = 900.00
+MarketRateRentpyr = 12000.00
+ResidentialVacancyRate = 0.05
+IncomeExpenseEscalation = 0.02
+
+#ResidentialExpenses#
+OperationalExpensespsf = 6.50
+RealEstateTaxespsf = 2.50
+ReplacementReservepsf = 1.00
+
+#Depreciation#
+ResidentailDepreciationinyrs = 27.5
+
diff --git a/Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py b/Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py
new file mode 100644
index 0000000..752f422
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py
@@ -0,0 +1,9 @@
+#Manufacturing Constants
+
+marketRateRent = 12000
+manufacturingVacancyRate = .05
+manufacturingIncome = 100000
+operationalExpensesPerSqft = 3
+realEstateTaxesPerSqft = 1
+replacementReservesPerSqft = .50
+manufacturingDepreciationInYears = 39
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/OtherRates.py b/Spring/Teams/Towers in the Soup/ProForma/OtherRates.py
new file mode 100644
index 0000000..0255598
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/OtherRates.py
@@ -0,0 +1,30 @@
+"""Attributes"""
+
+'''Import from Legacies py file'''
+import DevCosts_CapitalStruc
+DC = DevCosts_CapitalStruc
+
+annualIncreaseInExpenses = .02
+annualPublicSubsidiesIncrease = .02
+capRateAtSale = .06
+salesExpense = .05
+ordinaryIncomeTax = .35
+depreciationRecapture = .25
+capitalGainsTax = .2
+discountRate = 0
+interestRate = .05
+
+
+loanAmount = DC.myTotalDevCost #TODO: import from Car legacies -> DC.totalDevelopmentCost?
+
+debtService = DC.mytotalDebtServ #TODO: import from Car legacies -> CS.debtService?
+
+def constantLoanRate(loanAmount, debtService):
+ return debtService / loanAmount
+constantRate = constantLoanRate(loanAmount, debtService)
+print(constantRate)
+
+
+'''print(constantLoanRate())'''
+print(loanAmount)
+print(debtService)
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py
new file mode 100644
index 0000000..c9be1bc
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py
@@ -0,0 +1,17 @@
+ProfileInformation = {
+ Date=
+ Team=
+ Portfolio=
+ Lot Area=
+ Lot Depth=
+ Land Use=
+ Easements=
+ BBL=
+ BIN=
+ Zoning District=
+ BuiltFAR=
+ ExistingBuildings=
+ YearBuilt=
+ BuiltArea=
+ BuildingUse=
+}
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py
new file mode 100644
index 0000000..1a0f7b9
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py
@@ -0,0 +1,98 @@
+# Global Constants
+constructionCostPerSqFt = 362
+studioSqFt = 400
+oneBedroomSqFt = 575
+twoBedroomSqFt = 775
+threeBedroomSqFt = 950
+numberStudios = 20
+numberOneBedrooms = 20
+numberTwoBedrooms = 40
+numberThreeBedrooms = 20
+affordableRentPerSqft = 1
+marketRentPerSqft = 3
+i = .03
+n = 1
+
+def userInput():
+ userInput = input("What percentage of housing would you like to be affordable? ")
+ try:
+ userInputNumber = int(userInput)
+ if 0 < userInputNumber < 101:
+ return tidsProforma(userInputNumber)
+ elif userInputNumber > 100:
+ print("You can't have more than 100% of anything. Who taught you math?")
+ elif userInputNumber == 0:
+ print("Why did you enter zero? Do you hate poor people?")
+ elif userInputNumber < 0:
+ print("You entered a negative number. That's not possible.")
+ except ValueError:
+ print("You didn't put and integer... Stop Trying to break my program!")
+
+def tidsProforma(userInputNumberAffordable):
+ print("Towers In The Soup")
+ print("Pro Forma")
+
+ percentAffordable = userInputNumberAffordable
+ percentMarketRate = 100 - percentAffordable
+
+ development_totalSqFt = totalSqft()
+ affordable_totalSqFt = totalAffordableSqft(development_totalSqFt, percentAffordable)
+ market_totalSqFt = totalMarketSqft(development_totalSqFt, percentMarketRate)
+ construction_expenses = totalConstructionExpense(development_totalSqFt, constructionCostPerSqFt)
+ affordable_rent = affordableRent(affordable_totalSqFt, affordableRentPerSqft)
+ market_rent = marketRent(market_totalSqFt, marketRentPerSqft)
+ total_rent_income = totalRentalIncome(affordable_rent, market_rent)
+ payment_output = annualFinancingPayment(construction_expenses, i, n)
+ profitability_output = profitability(total_rent_income, payment_output)
+
+ print("######"*10)
+ print("Amount of percent affordable: " + str(percentAffordable) + "%")
+ print("Amount of market rate: {0}%".format(percentMarketRate))
+ print("Amount of affordable -> {0}% | Amount of market rate -> {1}%".format(percentAffordable, percentMarketRate))
+ print(development_totalSqFt)
+ print("######" * 10)
+ print("The profitability output of your development is: {0}".format(profitability_output))
+ print("annual payments are: {0}" .format(payment_output))
+ print(total_rent_income * 12)
+
+def totalSqft():
+ #Python Collection
+ #{} or [] or ()
+ return (studioSqFt * numberStudios) + (oneBedroomSqFt * numberOneBedrooms) + (twoBedroomSqFt * numberTwoBedrooms) + (threeBedroomSqFt * numberThreeBedrooms)
+
+
+def numberOfUnits():
+ return numberStudios + numberOneBedrooms + numberTwoBedrooms + numberThreeBedrooms
+
+
+def totalAffordableSqft(total_sqft,percentAffordable):
+ return total_sqft * percentAffordable/100
+
+
+def totalMarketSqft(total_sqft,percentMarketRate):
+ return total_sqft * percentMarketRate/100
+
+
+def totalConstructionExpense(total_sqft, constructionCostPerSqFt):
+ return total_sqft * constructionCostPerSqFt
+
+
+def annualFinancingPayment(construction_expenses, i, n):
+ return construction_expenses/(1 + pow((1 + i), -n) / i)
+ #annual financing payment for loan + principle
+
+
+def affordableRent(affordable_sqft, affordableRentPerSqft):
+ return affordable_sqft * affordableRentPerSqft
+
+
+def marketRent(market_sqft, marketRentPerSqft):
+ return market_sqft * marketRentPerSqft
+
+
+def totalRentalIncome(affordable_rent, market_rent):
+ return affordable_rent + market_rent
+
+
+def profitability(total_rental_income, payment_output):
+ return (total_rental_income * 12) - payment_output
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py b/Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py
new file mode 100644
index 0000000..66a6486
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py
@@ -0,0 +1,31 @@
+#Proceeds_Constants
+
+'''Residential Constants'''
+res_avgMarketRateUnitSize = 900
+res_marketRateRent = 12000
+res_vacancyRate = .05
+res_approxunits = 94
+res_incomeExpenseEscalation = .02
+res_operationalExpenses = 6.50
+res_realEstateTaxes = 2.50
+res_replacementReserve = 1.00
+res_depreciation = -1545455
+
+'''Commercial Constants'''
+com_marketRateRent = 12000
+com_vacancyRate = .10
+com_operationalExpenses = 6.50
+com_realEstateTaxes = 2.50
+com_replacementReserve = 1.00
+com_depreciation = -1089744
+
+'''Manufacturing Constants'''
+
+manu_marketRateRent = 12000
+manu_vacancyRate = .05
+manu_income = 100000
+manu_operationalExpenses = 3
+manu_realEstateTaxes = 1
+manu_replacementReserves = .50
+manu_Depreciation = 39
+
diff --git a/Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py b/Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py
new file mode 100644
index 0000000..093c937
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py
@@ -0,0 +1,119 @@
+
+import Starting_Assumptions as SA
+import Proceeds_Constants as PC
+
+
+def common_area_and_circulation (zoningFloorArea, netLossFactor):
+ return zoningFloorArea * netLossFactor
+
+resCommonAreaCirculation = common_area_and_circulation(SA.residentialZoningFloorArea, SA.netLossFactor)
+comCommonAreaCirculation = common_area_and_circulation(SA.commercialZoningFloorArea, SA.netLossFactor)
+manuCommonAreaCirculation = common_area_and_circulation(SA.manufacturingZoningFloorArea, SA.netLossFactor)
+
+print(resCommonAreaCirculation)
+print(comCommonAreaCirculation)
+print(manuCommonAreaCirculation)
+
+
+def net_area (zoningFloorArea, common_area_and_circulation):
+ return zoningFloorArea - common_area_and_circulation
+
+resNetArea = net_area(SA.residentialZoningFloorArea, resCommonAreaCirculation)
+comNetArea = net_area(SA.residentialZoningFloorArea, comCommonAreaCirculation)
+manuNetArea = net_area(SA.residentialZoningFloorArea, manuCommonAreaCirculation)
+
+print(resNetArea)
+print(comNetArea)
+print(manuNetArea)
+
+
+def approximate_units (resNetArea, avgmarketRateUnitSize):
+ return resNetArea / avgmarketRateUnitSize
+
+print(approximate_units)
+
+
+def total_income (approxUnits, marketRateRent):
+ return approxUnits * marketRateRent
+
+resTotalIncome = total_income(PC.res_approxunits, PC.res_marketRateRent)
+comTotalIncome = total_income(comNetArea, PC.com_marketRateRent)
+
+manuTotalIncome = SA.manufacturingZoningFloorArea
+
+
+print(resTotalIncome)
+print(comTotalIncome)
+print(manuTotalIncome)
+
+
+def total_vacancy (vacancyRate, total_income):
+ return vacancyRate * total_income
+
+resTotalVacancy = total_vacancy(PC.res_vacancyRate, resTotalIncome)
+comTotalVacancy = total_vacancy(PC.com_vacancyRate, comTotalIncome)
+manuTotalVacancy = total_vacancy(PC.manu_vacancyRate, manuTotalIncome)
+
+print(resTotalVacancy)
+print(comTotalVacancy)
+print(manuTotalVacancy)
+
+
+def operational_expenses (operationalExpenses, net_area):
+ return operationalExpenses * net_area
+
+resOperationalExpenses = operational_expenses(PC.res_operationalExpenses, resNetArea)
+comOperationalExpenses = operational_expenses(PC.com_operationalExpenses, comNetArea)
+manuOperationalExpenses = operational_expenses(PC.manu_operationalExpenses, manuNetArea)
+
+print(resOperationalExpenses)
+print(comOperationalExpenses)
+print(manuOperationalExpenses)
+
+
+def real_estate_taxes (realestateTaxes, net_area):
+ return realestateTaxes * net_area
+
+resRealEstateTaxes = real_estate_taxes(PC.res_realEstateTaxes, resNetArea)
+comRealEstateTaxes = real_estate_taxes(PC.com_realEstateTaxes, comNetArea)
+manuRealEstateTaxes = real_estate_taxes(PC.manu_realEstateTaxes, manuNetArea)
+
+print(resRealEstateTaxes)
+print(comRealEstateTaxes)
+print(manuRealEstateTaxes)
+
+
+def replacement_reserve (zoningFloorArea, replacementReserve):
+ return zoningFloorArea * replacementReserve
+
+resReplacementReserve = replacement_reserve(SA.residentialZoningFloorArea, PC.res_replacementReserve)
+comReplacementReserve = replacement_reserve(SA.commercialZoningFloorArea, PC.com_replacementReserve)
+manuReplacementReserve = replacement_reserve(SA.manufacturingZoningFloorArea, PC.manu_replacementReserves)
+
+print(resReplacementReserve)
+print(comReplacementReserve)
+print(manuReplacementReserve)
+
+
+def total_cost (net_area, devCost):
+ return (net_area * devCost)
+
+resTotalCost = replacement_reserve(resNetArea, SA.resDevCost)
+comTotalCost = replacement_reserve(comNetArea, SA.comDevCost)
+manuTotalCost = replacement_reserve(manuNetArea, SA.ManuDevCost)
+
+print (resTotalCost)
+print(comTotalCost)
+print(manuTotalCost)
+
+
+def depreciation (total_cost, depreciation):
+ return (-1 * (total_cost / depreciation))
+
+resDepreciation = replacement_reserve(resTotalCost, PC.res_depreciation)
+comDepreciation = replacement_reserve(comTotalCost, PC.com_depreciation)
+manuDepreciation = replacement_reserve(manuTotalCost, PC.manu_Depreciation)
+
+print(resDepreciation)
+print(comDepreciation)
+print(manuDepreciation)
\ No newline at end of file
diff --git a/Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py b/Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py
new file mode 100644
index 0000000..ec61c7e
--- /dev/null
+++ b/Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py
@@ -0,0 +1,21 @@
+#Starting Assumptions Constants
+
+devTimeline = 11
+lotArea = 10375
+existingBuildingFloorArea = 0
+residentialFAR = 7.52
+commercialFAR = 1.00
+manufacturingFAR = 1.00
+residentialZoningFloorArea = 100000
+commercialZoningFloorArea = 100000
+manufacturingZoningFloorArea = 100000
+airRightsSqft = 0
+innacuracyFactor = .03
+inaccuracyFloorLoss = 9000
+netLossFactor = .15
+
+
+#Development Costs
+resDevCost = 500
+comDevCost = 500
+ManuDevCost = 500
diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevCosts_CapitalStruc.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevCosts_CapitalStruc.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..210177a8f91bb067b855cfb43e8cc9f025fb4013
GIT binary patch
literal 3890
zcmbVOTW=Fb6y9As-nAXaxk2t^0|a93P})irLQO*gs1TtheHmG*7S9k|*e^bE&JN1KJ&&y+waWIt}jWdQd>J`cE2-o&YbJ`rBcDb@8Qm^m%mRN#vk<3
z|I6d$YdpcYWfDczco!m
zNiX4iOYnFeN7*VMC2*P>ZBi=DIEtoWS>>RhzKy4PTZ
z4ZqnGvPSdLbFbBT<<-KDthe@#ttb<8n$bubZ((I5awM%|TkBD-<~J2>dM!|v5B<<<
zJf^9QB{VrUqyrs4wl}`2ejf-KRD-a-FIv?{ey!7l@Sys*9zN;3tUki7d#&}BCu^?{
zsyifYuevL|W>DSrf5J+)-g3j&!rk#Z?dl8ZZ~3z6VcGtMAB4dV8(zB(={uq9)NZv8
zqPbnAjP!$m`7La=)$o0}E`>)H3`Q{&Ovfx(1+!pgO-XrLLlUMxGBUj@LoZ@NhMqQ#
ztPsv27s1?$b}bmx+CH3k+VX0(j`V5=E}74l$EM6;VI>n4n+LHzWG{ypx4^;juSlt9
z&{3Hw9;hZnlfV37ym6aDhT+rSxG(}q_x^dWX&kA
zGLrVz%BajfO__3E&J%tQ%Ri7abU@8wdZtG5JkSB@v@)_$1(fVjWe60K(oQkOnWYMctMJ*j-pO6sIf^y{$4odj4<
z#V!9Iae@CTRHux^?daDN;u2sh6}Lj-$WqCVN(#NJT6P5!3aqZx&2+Qfk#26!KC)5G
zY%~uiq}G81=sG*v*_0=hd{p?RQ*XqP9E~>*2BSXxl7?P1rg?Ngr0?2WQCZ`OwbBpC
zc~~4!y27&pT8f?zn;@=007b)ZQ&%CgeG9c!1)5AMP=yX+$te&?*>yOVR*N>JuNRFVgx;G+d@(l?HOSyh_6whQ3qtp2gJq|DK2B&0T7++9OeJ
z^UVv~ADFG;V)MgJ;T9?U`bf`WE%qxa?3rL1VfG66JOHY`)R=
zjz{9&QYvLVb
z#;3lE8Nz{1Ag^OMET>);%0LNtlfY66atH==o7UYSXmJ2?akbj7*OKt9++gR2vLSfd
zYInkb+3-0BWYX
za05y18NOr%9b0tQpdKlyEvZH!scuWErjlx$q>N@o>acXCcJPYX&*HYMa)3?tol0}4
zykHZ(BPHJ{RoL{vc@l^ch!vAU1u-g{STU(o^o3H3&2Ii|5{wr)ni=()eSKtJY5e
zC@Buuc$^ayOsFZ|o{;2qa
N$*x)O3~DfH{sYkvjVAyA
literal 0
HcmV?d00001
diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevelopmentCostsInputs.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevelopmentCostsInputs.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a0bdbb38afae78e4c970b54f104dd5be97254cea
GIT binary patch
literal 1167
zcmZuxJ8Tm{5Itk(A185Q=SPSvDngM0x`41voS&40U?&u#Yc{u=%ffm0vbz`JP(Xud
zC}}{5J`ECGdI}n7DO`a_6VXs1goMQ0aZa3wv1V`Q&AvB#b0f=iy4ylKYM)LXfI@F8U|?}4AFkb(gDcP3=Gpj7@Ik-d-46dyNPym)*K
z1&>2j_tVGFjtcHpWS|BP;ehb7kSYvKi-s1#hWKL
zimOwXV5rP?nJ4`k6K0*)n8yWcbSz6#QjEaZ+#c743-@-wJ&MnHPf8V~`YKFwiY!jN
z`BDYav$9rW%8A2)6(WKy;+Q~%v{I!p-a-H=TE!Y;r{wdgi8Dgyv;9kgIDsNgeI9E`
z)kv>0vn;ia!@-uKvr-#hZ#6Qf#hOs|Opzwqvq%&@3953-oCM26oMcANH)$zJhqFIx0ugrYK@Y{!iT-235u+$I^Z?yd0nVqpWkf&`N
zrd=lNvUGw_P1_6HEC!o)8HdRgB|)%rb-U_^Lu0QqQq%Uje2C0E7kRVI@>Lo5_L`FO
xQq>63PKG!9GE{0ku1be#YI
literal 0
HcmV?d00001
diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Manufacturing_Constants.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Manufacturing_Constants.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..20883a59945d5c5634b8d4aec34ae75be13866cb
GIT binary patch
literal 463
zcmY*V%}xR_5bp9H6S$Zd!)Z?%EkFAKCFi#<{+h3h&Y!N+@wWh4B0^T;NPotsoAKtrq>n^O!Awc@H0aWeteN=96`#Dpq%;({x&NLhNg$F!Bu5zwlR!EhI9#i!Tv7?cIu0n?j}96d6CMeDG+
z&*$5E)j&Mu0wSE(1qQv*
zNK#eHZbNsM3|R|o7^o}7jTkRjFHU!2ec+L0ef^4!eyDsm2EV71n01W4(I(>Te)k5?
eO|5VVRISI0Rp~s^GMU0fdQMwGm-Du-XCf_
literal 0
HcmV?d00001
diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/ProForma_ROI.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/ProForma_ROI.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8b0bcb178f34ca15b94dfe95d9f76220464a9135
GIT binary patch
literal 3540
zcmbtW&2t+`74MnR$LPafu^c;blI`7Kf`By+S)d56ctf&bQ-Bj92Uk?0Tx0cE8Z1p~
zds=Ix9iI$$j+`hs?ms~7-!fNDhGTAfS$?laUpDc9Vy61_d#}6SSHIWYa&E53@IBbR
zefY&ZWB(*#_On5Jj28U`K(IO!R^1YI-4;&W5t({MWb0Y9oXFMl=v|So7ld0cibA~v
zyex{M^hZ{o6J;@neqPLr1@sGIQ7oZf6xYNu`Xx~jE9kF@>tYrCvRD&0&{xDwv5tO4
z+!D9ZUl(`8d+1jM7w@BA6Cc!A^=|Nci?QI(1a@F@kaqz70dQV{-RIvSfI)T+7HfTV
z=THCs%~yZjX@Z!1;p>@o%7#DHR?L9G@7T&PhaEGuEF8d_p>44+tHD3B
z_F0X^mdG4u)P{CM_RO-_K4NCL_OY$Dz|CFaGW9cX^HXlRBExiM@Jox)k8zjA-xygZ
ztXkL|Ztu4}&3nFT`l0q(K9@(lE&EXrw)lzccLX2EKJNs_KG%{T`rJD@l1g}o9e;