Browse Source

Finish location tracking

JoostSijm 5 years ago
parent
commit
2f870b3cf8
4 changed files with 25 additions and 9 deletions
  1. 4 4
      app/__main__.py
  2. 2 2
      app/api.py
  3. 17 2
      app/database.py
  4. 2 1
      app/models.py

+ 4 - 4
app/__main__.py

@@ -25,7 +25,7 @@ def job_update_factories(state_id):
     LOGGER.info('"%s": get factories', state.name)
     factories = get_factories(state.id)
     LOGGER.info('"%s": "%s" factories', state.name, len(factories))
-    print_factories(factories)
+    # print_factories(factories)
     save_factories(state.id, factories)
     LOGGER.info('"%s": done saving factories', state.name)
 
@@ -38,13 +38,13 @@ def add_update_factories(state_id):
         args=[state_id],
         id='factories_{}'.format(state_id),
         replace_existing=True,
-        hour='2'
+        hour='2,14'
     )
 
 if __name__ == '__main__':
-    # jobs
-    job_update_factories(2788)
+    # job_update_factories(2788)
 
+    # jobs
     # Verenigde Nederlanden
     add_update_factories(2788)
     # Belgium

+ 2 - 2
app/api.py

@@ -19,8 +19,8 @@ TYPES = {
 
 def get_factories(state_id):
     """Get factories from state"""
-    return read_factories()
-    # return download_factories(state_id)
+    # return read_factories()
+    return download_factories(state_id)
 
 def read_factories():
     """Read factories file"""

+ 17 - 2
app/database.py

@@ -3,7 +3,7 @@
 from datetime import datetime
 
 from app import Session
-from app.models import State, Player, Factory, FactoryTrack, FactoryStat
+from app.models import State, Region, Factory, FactoryTrack, FactoryStat, FactoryLocation
 
 
 def get_state(state_id):
@@ -32,10 +32,25 @@ def save_factories(state_id, factories):
         factory_stat.experience = factory_dict['experience']
         factory_stat.wage = factory_dict['wage']
         factory_stat.workers = factory_dict['workers']
-        factory_stat.factory_id = factory_dict['id']
+        factory_stat.factory_id = factory.id
         factory_stat.factory_track_id = factory_track.id
         session.add(factory_stat)
 
+        current_location = session.query(FactoryLocation) \
+            .filter(FactoryLocation.factory_id == factory.id) \
+            .filter(FactoryLocation.until_date_time == None).first()
+
+        if not current_location or current_location.region.name != factory_dict['region_name']:
+            region = session.query(Region) \
+                .filter(Region.name == factory_dict['region_name']).first()
+            factory_location = FactoryLocation()
+            factory_location.factory_id = factory.id
+            factory_location.region_id = region.id
+            factory_location.from_date_time = datetime.now()
+            session.add(factory_location)
+            if current_location:
+                current_location.until_date_time = datetime.now()
+
     session.commit()
     session.close()
 

+ 2 - 1
app/models.py

@@ -40,8 +40,9 @@ class FactoryLocation(Base):
     __tablename__ = 'factory_location'
     factory_id = Column(Integer, ForeignKey('factory.id'), primary_key=True)
     region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
-    from_date_time = Column(DateTime)
+    from_date_time = Column(DateTime, primary_key=True)
     until_date_time = Column(DateTime)
+    region = relationship('Region')
 
 class FactoryStat(Base):
     """Model for factory"""