From 5d9367c3bf0c530e565b0b16aa48ca2646dfa547 Mon Sep 17 00:00:00 2001
From: MouseOfLight <MouseOfLight@gmail.com>
Date: Thu, 17 Oct 2019 23:18:58 -0700
Subject: [PATCH] Reworked how divisions are dissolved.

---
 src/Corporation/corporate-divisionAcquiring.js  | 1 +
 src/Corporation/corporate-divisionBase.js       | 7 +++----
 src/Corporation/corporate-divisionProcessing.js | 1 +
 src/Corporation/corporate.js                    | 7 ++-----
 src/Corporation/manageCorporation.tw            | 4 ++--
 5 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/Corporation/corporate-divisionAcquiring.js b/src/Corporation/corporate-divisionAcquiring.js
index fc997b397fa..66b22415dfc 100644
--- a/src/Corporation/corporate-divisionAcquiring.js
+++ b/src/Corporation/corporate-divisionAcquiring.js
@@ -54,6 +54,7 @@ App.Corporate.Init_DivisionAcquiring = function(shared) {
         }
         get nextDivisions()       { return this._const.nextDivisions; }
         dissolve() {
+            App.Corporate.sellSlaves(this, this.heldSlaves);
             super.dissolve();
             delete V[`${this._const.corpId}Slaves`];
         }
diff --git a/src/Corporation/corporate-divisionBase.js b/src/Corporation/corporate-divisionBase.js
index a947a548b89..8bd77675d91 100644
--- a/src/Corporation/corporate-divisionBase.js
+++ b/src/Corporation/corporate-divisionBase.js
@@ -41,10 +41,9 @@ App.Corporate.Init_DivisionBase = function(shared) {
         get developmentCount()      { return this.getStored("Dev"); }
         set developmentCount(value) {
             if(value < 0) throw "Cannot set development count to less than 0";
+            //dissolve is the only function that sets founded to false.
+            if(value == 0 && this.founded) throw "Cannot set development count to 0; use dissolve instead.";
             this.setStored("Dev", value);
-            if(value == 0) {
-                this.dissolve();
-            }
         }
 
         //calculated
@@ -193,7 +192,7 @@ App.Corporate.Init_DivisionBase = function(shared) {
         }
         dissolve() {
             this.setStored('', 0);
-            this.setStored('Dev', 0);
+            this.developmentCount = 0;
             App.Corporate.dissolvedDivision();
             this.relatedDivisions.to.forEach(nextDep => delete V[`${this._const.corpId}To${nextDep.id}`]);
         }
diff --git a/src/Corporation/corporate-divisionProcessing.js b/src/Corporation/corporate-divisionProcessing.js
index 7709077c13a..3631deaffb3 100644
--- a/src/Corporation/corporate-divisionProcessing.js
+++ b/src/Corporation/corporate-divisionProcessing.js
@@ -72,6 +72,7 @@ App.Corporate.Init_DivisionProcessing = function(shared) {
             shared.SellOverflowSlaves(this);
         }
         dissolve() {
+            App.Corporate.sellSlaves(this, this.heldSlaves);
             super.dissolve();
             delete V[this._const.corpId + "Slaves"];
             delete V[this._const.corpId + "Slaves2"];
diff --git a/src/Corporation/corporate.js b/src/Corporation/corporate.js
index 8c981e43e6d..9296a8efc3e 100644
--- a/src/Corporation/corporate.js
+++ b/src/Corporation/corporate.js
@@ -394,7 +394,7 @@ App.Corporate.Init = function() {
         SellOverflowSlaves: function(division) {
             const slavesToSell  = division.activeSlaves - division.developmentCount;
             if(slavesToSell > 0) {
-                const slaveProcCost = Math.trunc(App.Corporate.slaveMarketPurchaseValue(this, -slavesToSell));
+                const slaveProcCost = Math.trunc(App.Corporate.slaveMarketPurchaseValue(division, -slavesToSell));
                 App.Corporate.chargeAsset(slaveProcCost, "slaves");
                 division.activeSlaves -= slavesToSell;
                 V.menialDemandFactor -= slavesToSell;
@@ -594,10 +594,7 @@ App.Corporate.Init = function() {
     };
     App.Corporate.dissolve = function() {
         for(let division of this.divisionList.filter(x=>x.founded)) {
-            if(division.toMarket) {
-                this.sellSlaves(division, division.heldSlaves);
-            }
-            division.developmentCount = 0;
+            this.dissolveDivision(division);
         }
         this.founded = false;
         this.numDivisions = 0;
diff --git a/src/Corporation/manageCorporation.tw b/src/Corporation/manageCorporation.tw
index 1cd33c468fc..220018e0a5d 100644
--- a/src/Corporation/manageCorporation.tw
+++ b/src/Corporation/manageCorporation.tw
@@ -230,10 +230,10 @@
         <</if>>
         </div>
     <</if>>
-    <<if App.Corporate.divisions > 1>> /* Cannot dissolve the last division */
+    <<if App.Corporate.numDivisions > 1>> /* Cannot dissolve the last division */
         <div>Dissolve the division @@.orange;//Think before you click//@@ /* TODO: Add a confirmation button. Probably use replace?*/
         <<= "[[Dissolve|Manage Corporation]"
-          + "[App.Corporate.sellDevelopment('" + _div.id + "', " + _div.developmentCount + ")]"
+          + "[App.Corporate.divisions['" + _div.id + "'].dissolve()]"
           + "]">>
         </div>
     <</if>>
-- 
GitLab