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

@@ 1037-1072 (lines=36) @@
1034
1035
# This is for tracking which items were in which boxes when we restocked
1036
1037
class SubSubTransaction(Base):
1038
    __tablename__      = "subsubtransactions"
1039
1040
    id                 = Column(Integer, primary_key=True, nullable=False)
1041
    subtransaction_id  = Column(Integer, ForeignKey("subtransactions.id"), nullable=False)
1042
    type               = Column(Enum("restocklineboxitem",
1043
                                     name="subsubtransaction_type"), nullable=False)
1044
    item_id            = Column(Integer, ForeignKey("items.id"), nullable=True)
1045
    quantity           = Column(Integer, nullable=False)
1046
1047
    subtransaction     = relationship(SubTransaction, backref="subsubtransactions", cascade="all")
1048
    item               = relationship(item.Item, backref="subsubtransactions")
1049
1050
    __mapper_args__    = {'polymorphic_on': type}
1051
1052
    def __init__(self, subtransaction, item_id, quantity):
1053
        self.subtransaction_id = subtransaction.id
1054
        self.item_id = item_id
1055
        self.quantity = quantity
1056
1057
    def __getattr__(self, name):
1058
        if name == 'deleted':
1059
            return self.subtransaction.transaction.event.deleted
1060
        else:
1061
            raise AttributeError
1062
1063
    @classmethod
1064
    @limitable_all
1065
    def all_item(cls, item_id):
1066
        return DBSession.query(cls)\
1067
                        .join(SubTransaction)\
1068
                        .join(Transaction)\
1069
                        .join(event.Event)\
1070
                        .filter(cls.item_id == item_id)\
1071
                        .filter(event.Event.deleted==False)\
1072
                        .order_by(cls.id)
1073
1074
1075
class RestockLineBoxItem(SubSubTransaction):