@@ 176-188 (lines=13) @@ | ||
173 | if start: |
|
174 | r = r.filter(event.Event.timestamp>=start) |
|
175 | if end: |
|
176 | r = r.filter(event.Event.timestamp<end) |
|
177 | ||
178 | return r.one().a or Decimal(0.0) |
|
179 | ||
180 | # Get the total amount of discounts people have received for keeping |
|
181 | # money in their account |
|
182 | @classmethod |
|
183 | def discounts(cls, start=None, end=None): |
|
184 | r = DBSession.query(func.sum((cls.amount / (1-cls.discount)) - cls.amount).label('d'))\ |
|
185 | .join(event.Event)\ |
|
186 | .filter(cls.discount > 0)\ |
|
187 | .filter(event.Event.deleted==False) |
|
188 | ||
189 | if start: |
|
190 | r = r.filter(event.Event.timestamp>=start) |
|
191 | if end: |
|
@@ 161-173 (lines=13) @@ | ||
158 | r = r.filter(event.Event.timestamp<end) |
|
159 | ||
160 | if distinct_on is None: |
|
161 | raise NotImplementedError("required argument distinct_on missing") |
|
162 | ||
163 | r = r.distinct(distinct_on) |
|
164 | ||
165 | return r.count() |
|
166 | ||
167 | @classmethod |
|
168 | def total(cls, start=None, end=None): |
|
169 | r = DBSession.query(func.sum(cls.amount).label('a'))\ |
|
170 | .join(event.Event)\ |
|
171 | .filter(event.Event.deleted==False) |
|
172 | ||
173 | if start: |
|
174 | r = r.filter(event.Event.timestamp>=start) |
|
175 | if end: |
|
176 | r = r.filter(event.Event.timestamp<end) |
|
@@ 795-806 (lines=12) @@ | ||
792 | ||
793 | class PurchaseLineItem(SubTransaction): |
|
794 | __mapper_args__ = {'polymorphic_identity': 'purchaselineitem'} |
|
795 | price = Column(Numeric) |
|
796 | def __init__(self, transaction, amount, item, quantity, price, wholesale): |
|
797 | SubTransaction.__init__(self, transaction, amount, item.id, quantity, wholesale) |
|
798 | self.price = price |
|
799 | ||
800 | @classmethod |
|
801 | def quantity_by_period(cls, period, start=None, end=None): |
|
802 | r = DBSession.query(cls.quantity.label('summable'), event.Event.timestamp)\ |
|
803 | .join(Transaction)\ |
|
804 | .join(event.Event)\ |
|
805 | .filter(event.Event.deleted==False)\ |
|
806 | .order_by(event.Event.timestamp) |
|
807 | if start: |
|
808 | r = r.filter(event.Event.timestamp>=start.replace(tzinfo=None)) |
|
809 | if end: |
|
@@ 782-793 (lines=12) @@ | ||
779 | if not trans_type: |
|
780 | return DBSession.query(cls)\ |
|
781 | .join(Transaction)\ |
|
782 | .join(event.Event)\ |
|
783 | .filter(event.Event.deleted==False)\ |
|
784 | .order_by(desc(event.Event.timestamp)) |
|
785 | else: |
|
786 | return DBSession.query(cls)\ |
|
787 | .join(Transaction)\ |
|
788 | .join(event.Event)\ |
|
789 | .filter(cls.type==trans_type)\ |
|
790 | .filter(event.Event.deleted==False)\ |
|
791 | .order_by(desc(event.Event.timestamp)) |
|
792 | ||
793 | class PurchaseLineItem(SubTransaction): |
|
794 | __mapper_args__ = {'polymorphic_identity': 'purchaselineitem'} |
|
795 | price = Column(Numeric) |
|
796 | def __init__(self, transaction, amount, item, quantity, price, wholesale): |
|
@@ 769-780 (lines=12) @@ | ||
766 | @limitable_all |
|
767 | def all_item_events(cls, id): |
|
768 | return DBSession.query(cls)\ |
|
769 | .join(Transaction)\ |
|
770 | .join(event.Event)\ |
|
771 | .filter(cls.item_id == id)\ |
|
772 | .filter(event.Event.deleted==False)\ |
|
773 | .filter(or_(event.Event.type=="inventory", event.Event.type =="restock"))\ |
|
774 | .order_by(desc(event.Event.timestamp)) |
|
775 | ||
776 | @classmethod |
|
777 | @limitable_all |
|
778 | def all(cls, trans_type=None): |
|
779 | if not trans_type: |
|
780 | return DBSession.query(cls)\ |
|
781 | .join(Transaction)\ |
|
782 | .join(event.Event)\ |
|
783 | .filter(event.Event.deleted==False)\ |
|
@@ 481-492 (lines=12) @@ | ||
478 | # Now get all cash deposits between that cash box empty and this one |
|
479 | q = object_session(self).query(event.Deposit)\ |
|
480 | .filter(event.Event.timestamp < self.timestamp)\ |
|
481 | .order_by(asc(event.Event.timestamp)) |
|
482 | ||
483 | if previous_cb_empty: |
|
484 | q = q.filter(event.Event.timestamp >= previous_cb_empty.timestamp) |
|
485 | ||
486 | return q.all() |
|
487 | event.EmptyCashBox.relevant_cash_deposits = __relevant_cash_deposits |
|
488 | ||
489 | ################################################################################ |
|
490 | ## Related Classes |
|
491 | ################################################################################ |
|
492 | ||
493 | class Purchase(Transaction): |
|
494 | __mapper_args__ = {'polymorphic_identity': 'purchase'} |
|
495 | discount = Column(Numeric) |
|
@@ 146-157 (lines=12) @@ | ||
143 | if start: |
|
144 | r = r.filter(event.Event.timestamp>=start) |
|
145 | if end: |
|
146 | r = r.filter(event.Event.timestamp<end) |
|
147 | ||
148 | return r.one().c |
|
149 | ||
150 | @classmethod |
|
151 | def distinct(cls, *, distinct_on=None, start=None, end=None): |
|
152 | r = DBSession.query(cls).join(event.Event)\ |
|
153 | .filter(event.Event.deleted==False) |
|
154 | ||
155 | if start: |
|
156 | r = r.filter(event.Event.timestamp>=start) |
|
157 | if end: |
|
158 | r = r.filter(event.Event.timestamp<end) |
|
159 | ||
160 | if distinct_on is None: |