Subversion Repositories SmartDukaan

Rev

Rev 115 | Rev 384 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 115 Rev 122
Line 10... Line 10...
10
from elixir.relationships import OneToMany, ManyToOne
10
from elixir.relationships import OneToMany, ManyToOne
11
import datetime
11
import datetime
12
 
12
 
13
 
13
 
14
 
14
 
15
class Category(Entity):
-
 
16
    '''
-
 
17
    This class represents the catalog. 
-
 
18
    '''
-
 
19
    #id = Field(Integer, primary_key=True)
-
 
20
    name = Field(String(30))
-
 
21
    isRoot = Field(Integer)
-
 
22
    addedOn = Field(DateTime)
-
 
23
    status = Field(Integer)
-
 
24
    items = ManyToMany('Item')
-
 
25
    children = OneToMany('Category', inverse='parent')
-
 
26
    parent = ManyToOne('Category', inverse='children')
-
 
27
    def __repr__(self):
-
 
28
        return "<id>%id </id>"%(self.id)
-
 
29
 
-
 
30
 
-
 
31
class Vendor(Entity):
-
 
32
    #id = Field(Integer, primary_key=True)
-
 
33
    name = Field(String(30))
-
 
34
    status = Field(Integer)
-
 
35
    addedOn = Field(datetime)
-
 
36
    warehouses = ManyToMany('Warehouse')
-
 
37
    def __repr__(self):
-
 
38
        return "<Vendor>%s</Vendor>" %(self.name)
-
 
39
 
-
 
40
    
-
 
41
class Warehouse(Entity):
15
class Warehouse(Entity):
42
    #id = Field(Integer, primary_key=True)
16
    id = Field(Integer, primary_key=True, autoincrement=True)
43
    location = Field(String(20))
17
    location = Field(String(20))
44
    status = Field(Integer)
18
    status = Field(Integer)
45
    addedOn = Field(datetime)
19
    addedOn = Field(DateTime)
46
    vendors = ManyToMany('Vendor')
-
 
47
    inventory = OneToMany('CurrentInventorySnapshot')
20
    inventory = OneToMany('CurrentInventorySnapshot')
48
    inventoryHistory = OneToMany('ItemInventoryHistory')
21
    inventoryHistory = OneToMany('ItemInventoryHistory')
49
    
22
    
50
    def __repr__(self):
23
    def __repr__(self):
51
        return "<warehouse>%s</warehouse>" %(self.location)
24
        return "<warehouse>%s</warehouse>" %(self.location)
52
 
25
 
-
 
26
    @property
-
 
27
    def all_items(self):
-
 
28
        items = []
-
 
29
        for ci in self.inventory:
-
 
30
            items.append(ci.item)
-
 
31
        return items 
53
 
32
    
54
class Item(Entity):
33
class Item(Entity):
55
    #id = Field(Integer, primary_key=True)
34
    id = Field(Integer, primary_key=True, autoincrement=True)
-
 
35
    catalog_item_id = Field(Integer)
56
    name = Field(String(20))
36
    vendor_item_id = Field(Integer)
57
    price = Field(Float)
37
    feature_id = Field(Integer)
-
 
38
    feature_description = Field(String(200))
58
    addedOn = Field(datetime)
39
    addedOn = Field(DateTime)
59
    status = Field(Integer)
40
    status = Field(Integer)
-
 
41
    initDate = Field(DateTime)
60
    startDate = Field(datetime)
42
    startDate = Field(DateTime)
61
    retireDate = Field(datetime)
43
    retireDate = Field(DateTime)
-
 
44
    weight = Field(Float)
-
 
45
    prices = OneToMany("Price")
62
    currentInventory = OneToMany('CurrentInventorySnapshot')
46
    currentInventory = OneToMany('CurrentInventorySnapshot')
63
    inventoryHistory = OneToMany('ItemInventoryHistory')
47
    inventoryHistory = OneToMany('ItemInventoryHistory')
64
    category = ManyToMany("Category")
-
 
65
    iteminfo = OneToMany("ItemInfo")
48
    iteminfo = OneToMany("ItemInfo")
66
    statusChangeLog = OneToMany("ItemChangeLog")
49
    statusChangeLog = OneToMany("ItemChangeLog")
67
    
50
    
68
    def __repr__(self):
51
    def __repr__(self):
69
        return "<Item>%s</item>" % (self.name)
52
        return "<Item>%d</item>" % (self.id)
70
    
53
    
71
    #@property
54
    @property
72
    def get_total_inventory(self):
55
    def get_total_inventory(self):
73
        if self.currentInventory:
56
        if self.currentInventory:
74
            i = 0
57
            i = 0
75
            for entry in self.currentInventory:
58
            for entry in self.currentInventory:
76
                i += entry.availability
59
                i += entry.availability
77
            return i
60
            return i
78
        
61
        
79
        else:
62
        else:
80
            return 0;
63
            return 0;
81
    
64
    
82
    #@property
65
    @property
83
    def get_all_warehouses(self):
66
    def get_all_warehouses(self):
84
        warehouses = []
67
        warehouses = []
85
        for warehouse in self.currentInventory.warehouse:
68
        for ci in self.currentInventory:
86
            warehouses.append(warehouse)
69
            warehouses.append(ci.warehouse)
87
        return warehouses
70
        return warehouses
-
 
71
 
-
 
72
 
-
 
73
class Price(Entity):
-
 
74
    id = Field(Integer, primary_key=True, autoincrement=True)
-
 
75
    price = Field(Float)
-
 
76
    warehouse_id = Field(Integer)
-
 
77
    item = ManyToOne("Item")
88
    
78
    
-
 
79
    def __repr__(self):
-
 
80
        return "<price><item_id> %d </item_id><warehouse_id> %d </warehouse_id><val> %f </val> </price>" % (self.item.id, self.warehouse_id, self.price)
-
 
81
 
89
    
82
    
90
class ItemInfo(Entity):
83
class ItemInfo(Entity):
91
    #id = Field(Integer, primary_key=True)
84
    id = Field(Integer, primary_key=True, autoincrement=True)
92
    key = Field(String(30))
85
    key = Field(String(30))
93
    value = Field(String(100))
86
    value = Field(String(100))
94
    item = ManyToOne("Item")
87
    item = ManyToOne("Item")
95
    
88
    
96
    def __repr__(self):
89
    def __repr__(self):
97
        return "<ItemInfo><key>%s</key><value>%s</value></ItemInfo>" % (self.key, self.value)
90
        return "<ItemInfo><key>%s</key><value>%s</value></ItemInfo>" % (self.key, self.value)
98
    
91
    
99
 
92
 
100
class CurrentInventorySnapshot(Entity):
93
class CurrentInventorySnapshot(Entity):
101
    #id = Field(Integer, primary_key=True)
94
    #id = Field(Integer, primary_key=True)
102
    checkedOn = Field(DateTime, default=datetime.datetime)
95
    checkedOn = Field(DateTime, default=datetime.datetime.now())
103
    availibility = Field(Integer)
96
    availibility = Field(Integer)
104
    item = ManyToOne("Item")
97
    item = ManyToOne("Item")
105
    warehouse = ManyToOne("Warehouse")
98
    warehouse = ManyToOne("Warehouse")
106
    
99
    
107
    def __repr__(self):
100
    def __repr__(self):
108
        return "<current inventory><availability> %s </availability><time>%s</time><item>%s</item><warehouse>%s</warehouse></current inventory>" %(self.availibility, self.checkedOn, self.item, self.warehouse)
101
        return "<current inventory><availability> %s </availability><time>%s</time><item>%s</item><warehouse>%s</warehouse></current inventory>" %(self.availibility, self.checkedOn, self.item, self.warehouse)
109
 
102
 
110
#===============================================================================
-
 
111
# This is just a placeholder, will be using naveen's code for this.
-
 
112
#===============================================================================
-
 
113
    
-
 
114
class ItemInventoryHistory(Entity):
103
class ItemInventoryHistory(Entity):
115
    #id = Field(Integer, primary_key=True)    
104
    id = Field(Integer, primary_key=True, autoincrement = True)    
116
    timestamp = Field(DateTime, default=datetime.datetime.now())
105
    timestamp = Field(DateTime, default=datetime.datetime.now())
117
    availibility = Field(Integer)
106
    availibility = Field(Integer)
118
    item = ManyToOne("Item")
107
    item = ManyToOne("Item")
119
    warehouse = ManyToOne("Warehouse")
108
    warehouse = ManyToOne("Warehouse")
120
    
109
    
121
    def __repr__(self):
110
    def __repr__(self):
122
        pass
111
        pass
123
 
112
 
124
class ItemChangeLog(Entity):
113
class ItemChangeLog(Entity):
125
    #id = Field(Integer, primary_key=True)
114
    id = Field(Integer, primary_key=True, autoincrement=True)
126
    old_status = Field(Integer)
115
    old_status = Field(Integer)
127
    new_status = Field(Integer)
116
    new_status = Field(Integer)
128
    timestamp = Field(datetime)
117
    timestamp = Field(DateTime, default=datetime.datetime.now())
129
    item = ManyToOne("Item")
118
    item = ManyToOne("Item")
130
    
119
    
131
    def __repr__(self):
120
    def __repr__(self):
132
        return "<Log><id>%d</id><item>%d</item><old_status>%d</old_status><new_status>%d</new_status></Log>" %(self.id,self.item.id, self.old_status, self.new_status)    
121
        return "<Log><id>%d</id><item>%d</item><old_status>%d</old_status><new_status>%d</new_status></Log>" %(self.id,self.item.id, self.old_status, self.new_status)    
133
 
122
 
134
 
123
 
135
def initialize():
124
def initialize():
136
    metadata.bind = "sqlite:///catalog1.sqlite"
125
    metadata.bind = "sqlite:///inventory.sqlite" #need to read it from configserver.
137
    metadata.bind.echo = True
126
    metadata.bind.echo = True
138
    setup_all(True)
127
    setup_all(True)
139
 
128
 
140
if __name__=="__main__":
129
if __name__=="__main__":
141
    initialize()
130
    initialize()
142
131