def change_status(self,
                   new_status,
                   status_from_date=None,
                   status_thru_date=end_of_times()):
     from sqlalchemy import orm
     if not status_from_date:
         status_from_date = datetime.date.today()
     mapper = orm.class_mapper(self.__class__)
     status_property = mapper.get_property('status')
     status_type = status_property._get_target().class_
     old_status = status_type.query.filter(
         and_(
             status_type.status_for == self,
             status_type.status_from_date <= status_from_date,
             status_type.status_thru_date >= status_from_date)).first()
     if old_status != None:
         old_status.thru_date = datetime.date.today(
         ) - datetime.timedelta(days=1)
         old_status.status_thru_date = status_from_date - datetime.timedelta(
             days=1)
     new_status = status_type(status_for=self,
                              classified_by=new_status,
                              status_from_date=status_from_date,
                              status_thru_date=status_thru_date,
                              from_date=datetime.date.today(),
                              thru_date=end_of_times())
     if old_status:
         self.query.session.flush([old_status])
     self.query.session.flush([new_status])
Beispiel #2
0
 def change_status(self,
                   new_status,
                   status_from_date=None,
                   status_thru_date=end_of_times()):
     """
     Change the status of this object.  This method does not start a
     transaction, but it is advised to run this method in a transaction.
     """
     if not status_from_date:
         status_from_date = datetime.date.today()
     history_type = self._status_history
     session = orm.object_session(self)
     old_status_query = session.query(history_type)
     old_status_query = old_status_query.filter(
         sql.and_(history_type.status_for == self,
                  history_type.status_from_date <= status_from_date,
                  history_type.status_thru_date >= status_from_date))
     new_thru_date = datetime.date.today() - datetime.timedelta(days=1)
     new_status_thru_date = status_from_date - datetime.timedelta(days=1)
     for old_status in old_status_query.yield_per(10):
         old_status.thru_date = new_thru_date
         old_status.status_thru_date = new_status_thru_date
     new_status = history_type(status_for=self,
                               classified_by=new_status,
                               status_from_date=status_from_date,
                               status_thru_date=status_thru_date,
                               from_date=datetime.date.today(),
                               thru_date=end_of_times())
     session.flush()
Beispiel #3
0
 def change_status(self,
                   new_status,
                   status_from_date=None,
                   status_thru_date=end_of_times()):
     from sqlalchemy import orm
     if not status_from_date:
         status_from_date = datetime.date.today()
     history_type = self._status_history
     session = orm.object_session(self)
     old_status_filter = sql.and_(
         history_type.status_for == self,
         history_type.status_from_date <= status_from_date,
         history_type.status_thru_date >= status_from_date)
     old_status_query = session.query(history_type)
     old_status = old_status_query.filter(old_status_filter).first()
     if old_status != None:
         old_status.thru_date = datetime.date.today() - datetime.timedelta(
             days=1)
         old_status.status_thru_date = status_from_date - datetime.timedelta(
             days=1)
     new_status = history_type(status_for=self,
                               classified_by=new_status,
                               status_from_date=status_from_date,
                               status_thru_date=status_thru_date,
                               from_date=datetime.date.today(),
                               thru_date=end_of_times())
     session.flush()
    def change_status( self, new_status, status_from_date=None, status_thru_date=end_of_times() ):
	from sqlalchemy import orm
	if not status_from_date:
	    status_from_date = datetime.date.today()
	history_type = self._status_history
	session = orm.object_session( self )
	old_status_filter =  sql.and_( history_type.status_for == self,
	                               history_type.status_from_date <= status_from_date,
	                               history_type.status_thru_date >= status_from_date )
	old_status_query = session.query( history_type )
	old_status = old_status_query.filter( old_status_filter ).first()
	if old_status != None:
	    old_status.thru_date = datetime.date.today() - datetime.timedelta( days = 1 )
	    old_status.status_thru_date = status_from_date - datetime.timedelta( days = 1 )
	new_status = history_type( status_for = self,
	                           classified_by = new_status,
	                           status_from_date = status_from_date,
	                           status_thru_date = status_thru_date,
	                           from_date = datetime.date.today(),
	                           thru_date = end_of_times() )	
	session.flush()
Beispiel #5
0
    def change_status(self, new_status, status_from_date=None, status_thru_date=end_of_times()):
	from sqlalchemy import orm
	if not status_from_date:
	    status_from_date = datetime.date.today()
	mapper = orm.class_mapper(self.__class__)
	status_property = mapper.get_property('status')
	status_type = status_property.mapper.class_
	old_status = status_type.query.filter( sql.and_( status_type.status_for == self,
                                                         status_type.status_from_date <= status_from_date,
                                                         status_type.status_thru_date >= status_from_date ) ).first()
	if old_status != None:
	    old_status.thru_date = datetime.date.today() - datetime.timedelta( days = 1 )
	    old_status.status_thru_date = status_from_date - datetime.timedelta( days = 1 )
	new_status = status_type(    status_for = self,
                                     classified_by = new_status,
                                     status_from_date = status_from_date,
                                     status_thru_date = status_thru_date,
                                     from_date = datetime.date.today(),
                                     thru_date = end_of_times() )
	if old_status:
	    self.query.session.flush( [old_status] )
	self.query.session.flush( [new_status] )