Code Duplication    Length = 27-36 lines in 4 locations

chezbetty/models/box_vendor.py 1 location

@@ 5-39 (lines=35) @@
2
from . import vendor
3
from . import box
4
5
class BoxVendor(Base):
6
    __tablename__ = 'box_vendors'
7
8
    id          = Column(Integer, primary_key=True, nullable=False)
9
    vendor_id   = Column(Integer, ForeignKey("vendors.id"), nullable=False)
10
    box_id      = Column(Integer, ForeignKey("boxes.id"), nullable=False)
11
    item_number = Column(String(255), nullable=False)
12
13
    enabled     = Column(Boolean, default=True, nullable=False)
14
15
    vendor      = relationship(
16
                      vendor.Vendor,
17
                      primaryjoin="and_(BoxVendor.vendor_id==Vendor.id, BoxVendor.enabled==True)",
18
                      backref="boxes"
19
                  )
20
    box         = relationship(
21
                      box.Box,
22
                      primaryjoin="and_(BoxVendor.box_id==Box.id, BoxVendor.enabled==True)",
23
                      backref="vendors"
24
                  )
25
26
27
    def __init__(self, vendor, box, item_number, enabled=True):
28
        self.vendor_id   = vendor.id
29
        self.box_id      = box.id
30
        self.item_number = item_number
31
        self.enabled     = enabled
32
33
    @classmethod
34
    def from_id(cls, id):
35
        return DBSession.query(cls).filter(cls.id == id).one()
36
37
    @classmethod
38
    def from_number_fuzzy(cls, number):
39
        return DBSession.query(cls).filter(cls.item_number.like('%{}%'.format(number))).all()
40

chezbetty/models/item_vendor.py 1 location

@@ 5-38 (lines=34) @@
2
from . import vendor
3
from . import item
4
5
class ItemVendor(Base):
6
    __tablename__ = 'item_vendors'
7
8
    id          = Column(Integer, primary_key=True, nullable=False)
9
    vendor_id   = Column(Integer, ForeignKey("vendors.id"), nullable=False)
10
    item_id     = Column(Integer, ForeignKey("items.id"), nullable=False)
11
    item_number = Column(String(255), nullable=False)
12
13
    enabled     = Column(Boolean, default=True, nullable=False)
14
15
    vendor      = relationship(
16
                      vendor.Vendor,
17
                      primaryjoin="and_(ItemVendor.vendor_id==Vendor.id, ItemVendor.enabled==True)",
18
                      backref="items"
19
                  )
20
    item         = relationship(
21
                      item.Item,
22
                      primaryjoin="and_(ItemVendor.item_id==Item.id, ItemVendor.enabled==True)",
23
                      backref="vendors"
24
                  )
25
26
    def __init__(self, vendor, item, item_number, enabled=True):
27
        self.vendor_id   = vendor.id
28
        self.item_id     = item.id
29
        self.item_number = item_number
30
        self.enabled     = enabled
31
32
    @classmethod
33
    def from_id(cls, id):
34
        return DBSession.query(cls).filter(cls.id == id).one()
35
36
    @classmethod
37
    def from_number_fuzzy(cls, number):
38
        return DBSession.query(cls).filter(cls.item_number.like('%{}%'.format(number))).all()
39

chezbetty/models/request_post.py 1 location

@@ 5-31 (lines=27) @@
2
3
from sqlalchemy_utils import ArrowType
4
5
class RequestPost(Base):
6
    __tablename__ = 'request_posts'
7
8
    id         = Column(Integer, primary_key=True, nullable=False)
9
    timestamp  = Column(ArrowType, nullable=False, default=datetime.datetime.utcnow)
10
    request_id = Column(Integer, ForeignKey("requests.id"), nullable=False)
11
    user_id    = Column(Integer, ForeignKey("users.id"), nullable=False)
12
    post       = Column(Text)
13
    # Allow admin users to post as users or admins by tracking the view that the post is posted from
14
    staff_post = Column(Boolean, default=False, nullable=False)
15
    deleted    = Column(Boolean, default=False, nullable=False)
16
17
    def __init__(self, request, user, post, staff_post=False, deleted=False):
18
        self.request_id = request.id
19
        self.user_id = user.id
20
        self.post = post
21
        self.staff_post = staff_post
22
        self.deleted = deleted
23
24
    @classmethod
25
    def from_id(cls, id):
26
        return DBSession.query(cls).filter(cls.id == id).one()
27
28
    @classmethod
29
    def all(cls):
30
        return DBSession.query(cls).filter(cls.deleted==False)\
31
                        .order_by(desc(cls.timestamp))\
32
                        .all()
33
34

chezbetty/models/transaction.py 1 location

@@ 908-943 (lines=36) @@
905
    @classmethod
906
    def virtual_revenue_by_period(cls, period, start=None, end=None):
907
        r = DBSession.query(cls.amount.label('summable'), event.Event.timestamp)\
908
                     .join(Transaction)\
909
                     .join(event.Event)\
910
                     .filter(event.Event.deleted==False)\
911
                     .order_by(event.Event.timestamp)
912
        if start:
913
            r = r.filter(event.Event.timestamp>=start.replace(tzinfo=None))
914
        if end:
915
            r = r.filter(event.Event.timestamp<end.replace(tzinfo=None))
916
        return utility.group(r.all(), period)
917
918
    @classmethod
919
    def profit_on_sales(cls, start=None, end=None):
920
        r = DBSession.query(func.sum(cls.amount-(cls.wholesale*cls.quantity)).label('p'))\
921
                        .join(Transaction)\
922
                        .join(event.Event)\
923
                        .filter(event.Event.deleted==False)
924
        if start:
925
            r = r.filter(event.Event.timestamp>=start.replace(tzinfo=None))
926
        if end:
927
            r = r.filter(event.Event.timestamp<end.replace(tzinfo=None))
928
929
        return r.one().p or Decimal(0.0)
930
931
    @classmethod
932
    def item_sale_quantities(cls, item_id):
933
        return DBSession.query(cls, event.Event)\
934
                        .join(Transaction)\
935
                        .join(event.Event)\
936
                        .filter(event.Event.deleted==False)\
937
                        .filter(cls.item_id==int(item_id))\
938
                        .order_by(event.Event.timestamp).all()
939
940
941
# This is slowww:
942
# @property
943
# def __number_sold(self):
944
#     return object_session(self).query(func.sum(PurchaseLineItem.quantity).label('c'))\
945
#                                .join(Transaction)\
946
#                                .join(event.Event)\