iro/model/schema.py
branchdevel
changeset 127 79966b937274
parent 125 19b3f383c9ce
child 135 f8640c663e3e
--- a/iro/model/schema.py	Mon Jan 30 06:52:46 2012 +0100
+++ b/iro/model/schema.py	Mon Jan 30 21:02:03 2012 +0100
@@ -7,7 +7,8 @@
 from sqlalchemy import ForeignKey
 from sqlalchemy.orm import relationship, backref, object_session
 
-from sqlalchemy import and_ 
+from sqlalchemy import and_
+import sqlalchemy.sql.functions as func
 
 from ..error import JobNotFound
 
@@ -22,11 +23,27 @@
     offer_name = Column('offer', String(100), ForeignKey('offer.name'), primary_key=True)
     isDefault = Column(Boolean)
     offer = relationship("Offer")
+    user = relationship("User")
 
     def __init__(self, offer, default=False):
         self.offer = offer
         self.isDefault = default
 
+    @property
+    def bill(self):
+        '''getting a list of unbilled messages grouped by Job.info'''
+        query = [ func.count(Message.id).label('anz'),      # anz of messages
+                  func.sum(Message.price).label("price"),   # price of the messages
+                  Job.info.label('info'),                   # info tag
+                  ]
+
+        filters = [ Message.isBilled==False,                # only unbilled messages
+                   Job.user==self.user,                     # only jobs connected to user
+                   Message.offer==self.offer,               # only messages in the right offer
+                   Message.job_hash==Job.hash,              # join Message and Job
+                ]
+        return object_session(self).query(*query).filter(and_(*filters)).group_by(Job.info)
+
 class Offer(Base):
     """Alle Routen über die SMS, Faxe und Mails verschickt werden könnnen. <em>provider</em>, <em>typ</em> und <em>route</em> werden verwendet, um die entsprechenden Zugangsdaten laden zu können."""
     __tablename__ = "offer"
@@ -43,8 +60,8 @@
     recipient = Column(String(100))
     isBilled = Column(Boolean)
     date = Column(DateTime)
-    price = Column(Numeric(8,2))
-    job_hash = Column("job",Integer, ForeignKey('job.hash'))
+    price = Column(Numeric(8,4))
+    job_hash = Column("job", String(40), ForeignKey('job.hash'))
     job = relationship("Job", backref=backref('messages'))
     offer_id = Column("offer",String(100), ForeignKey('offer.name'))
     offer = relationship("Offer", backref=backref('messages'))